无法使用 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 服务器私钥加密令牌。