假设你有:
Repo A
使用通用应用程序。Repo B
使用Ansible部署脚本。在RepoA CI / CD跑步者中,我想从Repo B运行Ansible脚本。最好/最简单的方法是什么?
我正在尝试的是仅为RepoB创建一个额外的ssh密钥,并通过Secret Variables将其提供给跑步者。不幸的是,我必须创建一个虚拟用户,只能访问RepoB。
我还有其他办法吗?这似乎应该是部署非常常见的工作流程。
答案 0 :(得分:3)
你是对的,这是一个很常见的用例。 Gitlab使用它所谓的Deploy Keys
来实现这一点(更多信息here)。
我已经回答了类似的问题here。
以下是根据您的具体需求调整的答案版本。
首先生成SSH密钥对。您可以使用ssh-keygen -t rsa
。
然后转到Repo B的gitlab页面并找到Deploy Keys
设置。你应该粘贴你刚刚生成的公钥。
然后转到回购A找到Variables
页面。例如,创建一个名为SSH_PRIVATE_KEY
的新私有变量,并粘贴您在那里生成的私钥。
最后,在您的.gitlab-ci.yml
文件中添加以下内容,以便您的私钥可供CI环境使用:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
您的回购现在应该设置CI环境,以便可以拉回购回报。