Jenkins hashicorp-vault-plugin 空结果
Jenkins hashicorp-vault-plugin empty result
我尝试了此处提到的 Jenkins 管道示例:https://plugins.jenkins.io/hashicorp-vault-plugin
node {
// define the secrets and the env variables
def secrets = [
[$class: 'VaultSecret', path: 'secret/testing', secretValues: [
[$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'value_one'],
[$class: 'VaultSecretValue', envVar: 'testing_again', vaultKey: 'value_two']]],
[$class: 'VaultSecret', path: 'secret/another_test', secretValues: [
[$class: 'VaultSecretValue', envVar: 'another_test', vaultKey: 'value']]]
]
// optional configuration, if you do not provide this the next higher configuration
// (e.g. folder or global) will be used
def configuration = [$class: 'VaultConfiguration',
vaultUrl: 'http://my-very-other-vault-url.com',
vaultCredentialId: 'my-vault-cred-id']
// inside this block your credentials will be available as env variables
wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {
sh 'echo $testing'
sh 'echo $testing_again'
sh 'echo $another_test'
}
}
所以我在 Jenkins 2.173 中安装了 hashicorp-vault-plugin 2.2.0 并使用
启动了一个 Vault (v1.1.1) Docker 容器
docker run -d --name vaulttest -p 80:8200 --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' vault
接下来我使用 token "myroot"
在 Jenkins 中配置了一个 token 凭据
我在 Vault 中创建了 Secret(使用 WebUI)
testing
value_one
value_two
another_test
value
首先示例中有一个错误:当使用路径 "secret/testing" 和 "secret/another_test" 时,插件失败并出现错误 404:
Invalid path for a versioned K/V secrets engine. See the API docs for the appropriate API endpoints to use. If using the Vault CLI, use 'vault kv get' for this operation."
这可以在使用路径 "secret/data/testing" 和 "secret/data/another_test" 时修复(参见 https://issues.jenkins-ci.org/browse/JENKINS-44900)
然后调用作业时,变量似乎是空的:
[Pipeline] sh
+ echo
[Pipeline] sh
+ echo
[Pipeline] sh
+ echo
连接确实有效,因为在提供无效凭据或无效路径时我收到错误消息。
也直接检索 Secrets return 一个有效的回复:
/ # vault kv get secret/testing
====== Metadata ======
Key Value
--- -----
created_time 2019-04-17T05:31:23.581020191Z
deletion_time n/a
destroyed false
version 3
====== Data ======
Key Value
--- -----
value_one HUGO
value_two BETTY
我在这里错过了什么?
如此处所示https://issues.jenkins-ci.org/browse/JENKINS-52646 Vault KV V2 returns 不同的Json Resonse。
所以你必须使用
def secrets = [
[$class: 'VaultSecret', path: 'secret/data/testing', secretValues: [
[$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'data']]]
]
检索正确的 json 响应。
生成的 Json-Response 然后可以传递给 "readJSON"
def result = readJSON text: testing
echo result.value_one
echo result.value_two
我尝试了此处提到的 Jenkins 管道示例:https://plugins.jenkins.io/hashicorp-vault-plugin
node {
// define the secrets and the env variables
def secrets = [
[$class: 'VaultSecret', path: 'secret/testing', secretValues: [
[$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'value_one'],
[$class: 'VaultSecretValue', envVar: 'testing_again', vaultKey: 'value_two']]],
[$class: 'VaultSecret', path: 'secret/another_test', secretValues: [
[$class: 'VaultSecretValue', envVar: 'another_test', vaultKey: 'value']]]
]
// optional configuration, if you do not provide this the next higher configuration
// (e.g. folder or global) will be used
def configuration = [$class: 'VaultConfiguration',
vaultUrl: 'http://my-very-other-vault-url.com',
vaultCredentialId: 'my-vault-cred-id']
// inside this block your credentials will be available as env variables
wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {
sh 'echo $testing'
sh 'echo $testing_again'
sh 'echo $another_test'
}
}
所以我在 Jenkins 2.173 中安装了 hashicorp-vault-plugin 2.2.0 并使用
启动了一个 Vault (v1.1.1) Docker 容器docker run -d --name vaulttest -p 80:8200 --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' vault
接下来我使用 token "myroot"
在 Jenkins 中配置了一个 token 凭据我在 Vault 中创建了 Secret(使用 WebUI)
testing
value_one
value_two
another_test
value
首先示例中有一个错误:当使用路径 "secret/testing" 和 "secret/another_test" 时,插件失败并出现错误 404:
Invalid path for a versioned K/V secrets engine. See the API docs for the appropriate API endpoints to use. If using the Vault CLI, use 'vault kv get' for this operation."
这可以在使用路径 "secret/data/testing" 和 "secret/data/another_test" 时修复(参见 https://issues.jenkins-ci.org/browse/JENKINS-44900)
然后调用作业时,变量似乎是空的:
[Pipeline] sh
+ echo
[Pipeline] sh
+ echo
[Pipeline] sh
+ echo
连接确实有效,因为在提供无效凭据或无效路径时我收到错误消息。
也直接检索 Secrets return 一个有效的回复:
/ # vault kv get secret/testing
====== Metadata ======
Key Value
--- -----
created_time 2019-04-17T05:31:23.581020191Z
deletion_time n/a
destroyed false
version 3
====== Data ======
Key Value
--- -----
value_one HUGO
value_two BETTY
我在这里错过了什么?
如此处所示https://issues.jenkins-ci.org/browse/JENKINS-52646 Vault KV V2 returns 不同的Json Resonse。
所以你必须使用
def secrets = [
[$class: 'VaultSecret', path: 'secret/data/testing', secretValues: [
[$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'data']]]
]
检索正确的 json 响应。
生成的 Json-Response 然后可以传递给 "readJSON"
def result = readJSON text: testing
echo result.value_one
echo result.value_two