无法使用 YAML 配置在 GoCD Kubernetes 中获取 ENV 变量
Unable to get ENV variables in GoCD Kubernetes using YAML config
GoCD 版本:19.12.0
我试图在我的 GoCD YAML 配置中获取 Kubernetes 部署(系统)中定义的环境变量,以便在拉取资源时通过 GitHub 身份验证。
我已确认我可以使用 personal access token. (via https://[TOKEN]@github.com/[COMPANY]/[REPO].git)
调用存储库
如果我对实际的 YAML git
字段执行相同的操作,这当然也有效。
K8s 中的 GoCD 秘密:
apiVersion: v1
data:
GITHUB_ACCESS_KEY: base64EncodedKey
kind: Secret
type: Opaque
GoCD部署获取秘诀:
...
spec:
containers:
- env:
- name: GOCD_PLUGIN_INSTALL_kubernetes-elastic-agents
value: https://github.com/gocd/kubernetes-elastic-agents/releases/download/v3.4.0-196/kubernetes-elastic-agent-3.4.0-196.jar
- name: GOCD_PLUGIN_INSTALL_docker-registry-artifact-plugin
value: https://github.com/gocd/docker-registry-artifact-plugin/releases/download/v1.1.0-104/docker-registry-artifact-plugin-1.1.0-104.jar
- name: GITHUB_ACCESS_KEY
valueFrom:
secretKeyRef:
key: GITHUB_ACCESS_KEY
name: gocd-server
...
我已经执行到 pod 中并回显变量,returns 解码值。
YAML:
format_version: 9
pipelines:
db-docker-build:
group: someGroup
label_template: ${COUNT}-${git[:8]}
lock_behavior: unlockWhenFinished
display_order: 1
materials:
git:
git: 'https://$GITHUB_ACCESS_KEY@github.com/[COMPANY]/[REPO].git'
shallow_clone: true
auto_update: true
branch: master
...
我希望它能起作用,但它并没有起作用,它实际上只是得到 $GITHUB_ACCESS_KEY
作为值。管道阶段中定义的作业 运行 使用弹性代理 pod,该 pod 也定义了所需的秘密。我试过几个
设置环境变量-
environment_variables: GIT_KEY: ${GITHUB_ACCESS_KEY}
然后使用该变量
git: 'https://$GIT_KEY@github.com/[COMPANY]/[REPO].git'
正在设置 env 变量且没有引号 -
environment_variables: GIT_KEY: ${GITHUB_ACCESS_KEY}
然后使用该变量
git: https://${GIT_KEY}@github.com/[COMPANY]/[REPO].git
没有引号 - git: https://$GITHUB_ACCESS_KEY@github.com/[COMPANY]/[REPO].git
没有带括号的引号 - git: https://${GITHUB_ACCESS_KEY}@github.com/[COMPANY]/[REPO].git
我从一些 YAML documentation 那里看到建议使用 encrypted_password
作为 GitHub 密码,但这似乎没有必要,因为 GUI 隐藏了令牌,并且它的运行在 Kubernetes 中使用秘密。
我和我的团队进一步研究了这个问题并找到了解决方法。大多数问题和文章都解释了 docs 中写的内容,您确实需要访问 /bin/bash -c
才能获取变量。
YAML 插件创建者还使用安全的加密变量来存储 sensitive data 这很好,但对于我们的团队来说,这意味着很多 Kubernetes 功能都没有被利用。
解决方法:
使用GUI在GoCD中创建管道,输入GitHub link,添加一个用户名和用户的personal access token作为密码,测试连接是否正常。创建后,转到 Admin -> Pipelines 并单击 Download pipeline configuration and select YAML。
生成的 YAML 使用 GoCD 服务器私钥加密令牌。
GoCD 版本:19.12.0
我试图在我的 GoCD YAML 配置中获取 Kubernetes 部署(系统)中定义的环境变量,以便在拉取资源时通过 GitHub 身份验证。 我已确认我可以使用 personal access token. (via https://[TOKEN]@github.com/[COMPANY]/[REPO].git)
调用存储库如果我对实际的 YAML git
字段执行相同的操作,这当然也有效。
K8s 中的 GoCD 秘密:
apiVersion: v1
data:
GITHUB_ACCESS_KEY: base64EncodedKey
kind: Secret
type: Opaque
GoCD部署获取秘诀:
...
spec:
containers:
- env:
- name: GOCD_PLUGIN_INSTALL_kubernetes-elastic-agents
value: https://github.com/gocd/kubernetes-elastic-agents/releases/download/v3.4.0-196/kubernetes-elastic-agent-3.4.0-196.jar
- name: GOCD_PLUGIN_INSTALL_docker-registry-artifact-plugin
value: https://github.com/gocd/docker-registry-artifact-plugin/releases/download/v1.1.0-104/docker-registry-artifact-plugin-1.1.0-104.jar
- name: GITHUB_ACCESS_KEY
valueFrom:
secretKeyRef:
key: GITHUB_ACCESS_KEY
name: gocd-server
...
我已经执行到 pod 中并回显变量,returns 解码值。
YAML:
format_version: 9
pipelines:
db-docker-build:
group: someGroup
label_template: ${COUNT}-${git[:8]}
lock_behavior: unlockWhenFinished
display_order: 1
materials:
git:
git: 'https://$GITHUB_ACCESS_KEY@github.com/[COMPANY]/[REPO].git'
shallow_clone: true
auto_update: true
branch: master
...
我希望它能起作用,但它并没有起作用,它实际上只是得到 $GITHUB_ACCESS_KEY
作为值。管道阶段中定义的作业 运行 使用弹性代理 pod,该 pod 也定义了所需的秘密。我试过几个
设置环境变量-
environment_variables: GIT_KEY: ${GITHUB_ACCESS_KEY}
然后使用该变量
git: 'https://$GIT_KEY@github.com/[COMPANY]/[REPO].git'
正在设置 env 变量且没有引号 -
environment_variables: GIT_KEY: ${GITHUB_ACCESS_KEY}
然后使用该变量
git: https://${GIT_KEY}@github.com/[COMPANY]/[REPO].git
没有引号 - git: https://$GITHUB_ACCESS_KEY@github.com/[COMPANY]/[REPO].git
没有带括号的引号 - git: https://${GITHUB_ACCESS_KEY}@github.com/[COMPANY]/[REPO].git
我从一些 YAML documentation 那里看到建议使用 encrypted_password
作为 GitHub 密码,但这似乎没有必要,因为 GUI 隐藏了令牌,并且它的运行在 Kubernetes 中使用秘密。
我和我的团队进一步研究了这个问题并找到了解决方法。大多数问题和文章都解释了 docs 中写的内容,您确实需要访问 /bin/bash -c
才能获取变量。
YAML 插件创建者还使用安全的加密变量来存储 sensitive data 这很好,但对于我们的团队来说,这意味着很多 Kubernetes 功能都没有被利用。
解决方法:
使用GUI在GoCD中创建管道,输入GitHub link,添加一个用户名和用户的personal access token作为密码,测试连接是否正常。创建后,转到 Admin -> Pipelines 并单击 Download pipeline configuration and select YAML。
生成的 YAML 使用 GoCD 服务器私钥加密令牌。