我正在使用Hosted Gitlab来托管我的Git存储库,最近我一直在使用它来构建/部署PHP和Java应用程序到服务器.
我想要做的是一旦构建完成,使用SSH部署应用程序.有时这可能只是通过SSH将最终构建(PHP文件)的内容上传到服务器,或者有时可能上传已编译的.jar文件,然后在远程服务器上执行命令以重新启动服务.
我已经将自己的Docker容器设置为构建环境,这包括Java,PHP,Composer和Maven等所有构建完成所需的东西.我正在使用此图像来运行构建.
我想知道的是,我如何通过SSH连接外部服务器以执行我可以在gitlab-ci.yaml文件中指定的部署命令?
在 gitlab.com 上处理 ssh 并不简单。
这就是我为 .gitlab-ci.yml 编写 SSH 帮助程序的原因。
您可以在这里查看https://gitlab.com/gitlab-cd/ssh-template
只需将:它添加到您的 .gitlab-ci.yml 中,然后您就可以使用:
ssh_run root myhostname $MYHOST_PKEY "touch foo; cp foo bar; ls -al; rm foo bar; ls -al"
小智 5
举例来说,假设您有一台已经安装了需求的服务器,并且想使用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
Run Code Online (Sandbox Code Playgroud)
首先,在此示例中,我们使用ubuntu映像。还要注意,我们正在使用一些gitlab秘密变量。$ QA_URL,$ PRIVATE_KEY,$ DB_CONNECTION,$ QA_SERVER。重要的是$ PRIVATE_KEY和QA_SERVER。私钥是您需要通过QA_SERVER进行身份验证的密钥(如果您使用的是私钥)。显然,QA_SERVER是您要部署代码的地址。
要创建新的变量,请访问gitlab-> settings-> CI / CD。
在before_script中,我们正在做的是创建并添加ssh密钥,同时我们也禁用了命令行以要求输入密码。 'StrictHostKeyChecking no'
ssh-add <(echo "$PRIVATE_KEY")
Run Code Online (Sandbox Code Playgroud)
将ssh密钥添加到代理。
ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
Run Code Online (Sandbox Code Playgroud)
不需要:此行使用ssh删除/ var / www / html scp -P22 -r中的任何文件。ubuntu @“ $ QA_SERVER”:/ var / www / html最后,文件从当前目录复制到/ var / www / html
请注意权限,它取决于您要复制的目录。