google-cloud-platform - 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 管道中的哪个位置添加它?
任何帮助将不胜感激。
解决方案
经过数小时的寻找和尝试不同的事情后,我解决了我的问题。
我发现当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。
推荐阅读
- haskell - 需要 renderString 解释
- haskell - 为什么 Djinn 没有为 State 找到 <*>?
- python - 将 Python BeatifoulSoup 的结果保存到文件中
- graph - 如何在 pyqt 图中创建具有密度比例的散点图?
- docker - 带有要运行的 shell 脚本文件的 Dockerfile 给出错误
- python - tkinter 用于用户通知的文本
- python - 如何将一个方法定义为实例方法和类方法(共享相同名称),每个方法都有不同的参数?
- opencv - 有没有办法让这段代码运行得更快
- javascript - 包含 php 文件时 $.post 失败
- python - 并行化从 BigQuery 到 Python 中的本地 JSON 文件的导出