Gitlab CI如何通过SSH部署应用程序

时间:2017-03-08 16:12:22

标签: gitlab gitlab-ci

我正在使用Hosted Gitlab来托管我的Git存储库,最近我一直在使用它来构建/部署PHP和Java应用程序到服务器。

我想要做的是,一旦构建完成,使用SSH部署应用程序。有时这可能只是通过SSH将最终构建(PHP文件)的内容上传到服务器,或者有时可能上传已编译的.jar文件,然后在远程服务器上执行命令以重新启动服务。

我已经将自己的Docker容器设置为构建环境,其中包括Java,PHP,Composer和Maven等所有构建完成所需的东西。我正在使用此图像来运行构建。

我想知道的是,如何通过SSH连接外部服务器以执行我可以在gitlab-ci.yaml文件中指定的部署命令?

4 个答案:

答案 0 :(得分:28)

您可以将SSH密钥存储为gitlab-ci.yaml中的秘密变量,并在构建期间使用它来执行SSH命令,有关详细信息,请参阅我们的文档here

获得SSH访问权限后,您可以使用rsyncscp等命令将文件复制到服务器上。我在另一篇帖子here中找到了一个例子,您可以将其作为参考。

请让我知道你的去向。

谢谢,

亚当

服务工程师@ Gitlab

答案 1 :(得分:4)

举个例子,假设您已经安装了需求的服务器,并且您希望使用ssh部署到该服务器。

image: ubuntu:latest
stages:
  - deploy
deploy_QA:
  stage: deploy
  environment: 
    name: Staging
    url: "$QA_URL"
  before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - mkdir -p ~/.ssh
  - eval $(ssh-agent -s)
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  script:
    - ssh-add <(echo "$PRIVATE_KEY")
    - ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
    - scp -P22 -r . ubuntu@"$QA_SERVER":/var/www/html

首先,在这个例子中我们使用的是ubuntu图像。还要注意我们正在使用一些gitlab秘密变量。 $ QA_URL,$ PRIVATE_KEY,$ DB_CONNECTION,$ QA_SERVER。 重要的是$ PRIVATE_KEY和QA_SERVER。私钥是您使用QA_SERVER进行身份验证所需的密钥(如果您使用的是私钥)。显然,QA_SERVER是您要部署代码的地址。

  

用于创建新的变量访问gitlab-&gt; settings-&gt; CI / CD。



 在before_script中我们正在做的是创建和添加ssh密钥,我们也禁止命令行询问密码。 'StrictHostKeyChecking no'

ssh-add <(echo "$PRIVATE_KEY")

将ssh密钥添加到代理。

ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'

不需要:此行使用ssh删除/ var / www / html中的任何文件     scp -P22 -r。 Ubuntu的@&#34; $ QA_SERVER&#34;:在/ var / www / html等 最后,文件从当前目录复制到/ var / www / html

  

请注意权限,这取决于您要复制的目录。

答案 2 :(得分:1)

在gitlab.com上使用ssh交易并不容易。

这就是为什么我为.gitlab-ci.yml编写SSH帮助程序的原因。 您可以在这里https://gitlab.com/x4v13r/gitlab-ci

进行检查

只需 include:到您的.gitlab-ci.yml,然后就可以使用:

  

ssh_run 根myhostname $ MYHOST_PKEY “ touch foo; cp foo bar; ls -al; rm foo bar; ls -al”

答案 3 :(得分:0)

使用镜子。在Settings -> Repository -> Mirroring Repositories下。

它会生成一个ssh pubkey,您应该将其放置在服务器上。

您可以选择方向(拉或推),以及哪个分支被拉或推。还等待管道。

效果很棒。