假设您有:
-
Repo A
与通用应用程序。
-
Repo B
使用 Ansible 部署脚本。
在 RepoA CI/CD 运行程序中,我想从 Repo B 运行 Ansible 脚本。最好/最简单的方法是什么?
我正在尝试的是仅为 RepoB 创建一个额外的 ssh 密钥,并将其输入到运行程序中秘密变量。不幸的是,我必须创建一个虚拟用户,该用户只能访问 RepoB。
我还有其他方法可以做到这一点吗?看起来这应该是一个非常常见的部署工作流程。
你是对的,这是一个非常常见的用例。 Gitlab 使用它所谓的Deploy Keys
为了实现这一点(更多信息here).
我回答过类似的问题here.
以下是根据您的具体需求调整的答案版本。
首先生成SSH密钥对。您可以使用ssh-keygen -t rsa
为了那个原因。
然后进入Repo B的gitlab页面并找到Deploy Keys
环境。您应该将刚刚生成的公钥粘贴到此处。
然后转到 Repo 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'
现在应该设置您的 Repo A CI 环境,以便可以拉取 Repo B。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)