我正在使用Hosted Gitlab来托管我的Git存储库,最近我一直在使用它来构建/部署PHP和Java应用程序到服务器。
我想要做的是,一旦构建完成,使用SSH部署应用程序。有时这可能只是通过SSH将最终构建(PHP文件)的内容上传到服务器,或者有时可能上传已编译的.jar文件,然后在远程服务器上执行命令以重新启动服务。
我已经将自己的Docker容器设置为构建环境,其中包括Java,PHP,Composer和Maven等所有构建完成所需的东西。我正在使用此图像来运行构建。
我想知道的是,如何通过SSH连接外部服务器以执行我可以在gitlab-ci.yaml文件中指定的部署命令?
答案 0 :(得分:28)
您可以将SSH密钥存储为gitlab-ci.yaml
中的秘密变量,并在构建期间使用它来执行SSH命令,有关详细信息,请参阅我们的文档here。
获得SSH访问权限后,您可以使用rsync
和scp
等命令将文件复制到服务器上。我在另一篇帖子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,您应该将其放置在服务器上。
您可以选择方向(拉或推),以及哪个分支被拉或推。还等待管道。
效果很棒。