我正在设置一个Gitlab运行器以SSH到远程服务器,以便可以在物理硬件上运行测试,但是从分支分支启动后,作业将失败。我将SSH密钥另存为父级中的环境变量,但分叉运行程序上运行的作业未将其获取。如何从父级导入环境变量?
当我手动将SSH密钥作为环境变量添加到我的派生存储库中时,作业成功完成,但是此操作不可扩展。我尝试将项目和所有参与的人员添加到一个公共组中,并在其中设置相同的变量,并启动组运行器。看来,如果您从您的个人帐户中启动了跑步者,那么您将无法访问必要的变量。
在.gitlab-ci.yml
文件中,我添加了一些打印输出语句以帮助调试。我在父仓库中将SSH_PRIVATE_KEY
和RUNNER_ID
设置为所需的值,并在我的分支分支中未分配它们。从我的个人帐户运行时,我得到了空白的输出。
gitlab-ci.yml
hardware-1:
image: ubuntu
before_script:
- echo "$SSH_PRIVATE_KEY"
- echo "$RUNNER_ID"
tags:
- hardware
script:
- ssh pi@raspberry "./test-hardware.sh"
分叉存储库上的运行程序控制台输出。
$ ...
$ Updating certificates in /etc/ssl/certs...
$ 0 added, 0 removed; done.
$ Running hooks in /etc/ca-certificates/update.d...
$ echo "$SSH_PRIVATE_KEY"
$ echo "$RUNNER_ID"
在父分支上,控制台输出实际的SSH_PRIVATE_KEY和RUNNER_ID。如何强制跑步者始终从父仓库运行?
答案 0 :(得分:0)
可以保护变量。只要变量受到保护,它就只能安全地传递到在受保护分支或受保护标签上运行的管道。其他管道将不会获得任何受保护的变量。
可以通过以下方法添加受保护的变量:转到项目的“设置”>“ CI / CD”,然后找到“变量”部分,然后选中“受保护”。
设置它们后,它们将可用于所有后续管道。
要保护分支或标签:
设置->存储库->受保护的分支/标签