首页 > 解决方案 > appctl(gcloud 组件)在哪里寻找 git 访问令牌或 ssh 密钥?

问题描述

我目前appctl在 GitHub Actions 中使用以部署到 GKE。

通过一些工作,我也能够成功安装 gcloud sdk 和 appctl。(因为默认的 GitHub 运行程序从 apt 安装 cloud sdk,所以我无法从该发行版安装单独的组件)

我正在运行以下命令来初始化我的配置仓库:

- name: 'Configuring ssh key'
      run: |-
        cd ${HOME}
        mkdir ${HOME}/.ssh
        gcloud secrets versions access latest --secret="my-ssh-key" --project=${{secrets.GCLOUD_PROJECT_ID}} > ${HOME}/.ssh/id_rsa
        chmod 600 ${HOME}/.ssh/id_rsa
        ssh-add ${HOME}/.ssh/id_rsa

- run: export APPCTL_INTERACTIVE=false

    - name: 'Initializing git repo'
      run: |-
        appctl init my-app --app-config-repo=https://github.com/ORG/my-app-config
        #other operations....
        git add .
        git commit -m "Updated config for latest develop commit $GITHUB_SHA"
        git tag $(git rev-parse --short HEAD)
        git push origin --tags

以上在初始化我的仓库时有效,甚至标记和推送按预期工作,这让我相信它正在使用我的 ssh 密钥对我的配置仓库进行身份验证,因为它是私有的。

但是当我打电话时appctl prepare dev,起初我得到了一些好处:

Sync-up the latest Refs from remote ...
Generating kustomize artifacts...
Stash deployment git repo...
Writing release artifact to deployment repo...
Pushing the new git-commit to the deployment repo.

然后我遇到了这个。

Error: unable to find personal token. Please consider setting the environment variable "APPCTL_INTERACTIVE" to be true

现在奇怪的是,所有的推动等都按预期工作。唯一的问题是它似乎appctl无法创建PR?它将标签和所有内容推送到配置部署存储库。

还有其他人面临类似的问题吗?就推送标签等而言,我得到了我需要的一切,但由于访问令牌,这项工作失败了。如果我的原始 ssh 密钥在签出配置存储库时有效,甚至推送标签和提交到遥控器,那么最后一步appctl是什么,需要访问令牌,我将在 CI/CD 管道中的哪个位置添加它?

任何帮助将不胜感激。

标签: google-cloud-platformgcloudgithub-actionsgoogle-cloud-sdk

解决方案


经过数小时的寻找和尝试不同的事情后,我解决了我的问题。

我发现当appctl询问您的 GitHub 访问令牌(它用来代表您创建拉取请求)时,它会将其存储在主目录中的一个名为.appctlconfig

所以位置将是~/.appctlconfig,我通过观察我的 Mac 上的文件系统并注意到正在读取/访问的内容发现了这一点。

该文件的格式(您猜对了)是 K8s 类型

apiVersion: appctl.gke.io/v1beta1
creationTimestamp: null
github_access_token: my-access-token
kind: Config

我的解决方案是模仿这种格式,然后在我打电话之前将其写入正确的路径appctl prepare dev

${{secrets.APPCTL_CONFIG}} > ${HOME}/.appctlconfig

appctl对此感到满意,并代表我成功创建了 PR。


推荐阅读