如何在Gitlab CD中链接来自应用程序仓库的部署脚本/ repo?

时间:2017-04-09 19:52:34

标签: git deployment ansible gitlab

假设你有:

  • Repo A使用通用应用程序。
  • Repo B使用Ansible部署脚本。

在RepoA CI / CD跑步者中,我想从Repo B运行Ansible脚本。最好/最简单的方法是什么?

我正在尝试的是仅为RepoB创建一个额外的ssh密钥,并通过Secret Variables将其提供给跑步者。不幸的是,我必须创建一个虚拟用户,只能访问RepoB。

我还有其他办法吗?这似乎应该是部署非常常见的工作流程。

1 个答案:

答案 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环境,以便可以拉回购回报。