无法使用 YAML 配置在 GoCD Kubernetes 中获取 ENV 变量



GoCD 版本: 19.12.0

我正在尝试在我的 GoCD YAML 配置中获取在 Kubernetes 部署(系统(中定义的环境变量,以便在拉取资源时传递 GitHub 身份验证。 我已确认我能够使用个人访问令牌调用存储库。(通过 https://[TOKEN]@github.com/[COMPANY]/[REPO].git(

当然,如果我对实际的 YAMLgit字段执行相同的操作,这也有效。


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 并回显了返回解码值的变量。


亚姆:

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 还定义了所需的密钥。我试过一些


设置 env 变量 -

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 文档中看到,建议使用encrypted_password作为 GitHub 密码,但这似乎是不必要的,因为 GUI 隐藏了令牌,并且它在 Kubernetes 中运行有秘密。

我和团队对此进行了进一步的研究,并找到了解决方法。大多数问题和文章都解释了文档中所写的内容,您确实需要访问/bin/bash -c才能获取变量。

YAML 插件创建者还使用安全的加密变量来存储敏感数据,这很好,但对于我们的团队来说,这意味着许多 Kubernetes 功能没有被利用。


解决方法:

使用 GUI 在 GoCD 中创建管道,输入GitHub 链接,添加用户的用户名和个人访问令牌作为密码,测试连接是否正常。创建后,转到">管理员 ->管道",单击"下载管道配置"并选择"YAML"。

生成的 YAML 的令牌与 GoCD 服务器私钥一样加密。

最新更新