作者:Meloux | 来源:互联网 | 2023-02-09 16:17
我正在使用Hosted Gitlab来托管我的Git存储库,最近我一直在使用它来构建/部署PHP和Java应用程序到服务器.
我想要做的是一旦构建完成,使用SSH部署应用程序.有时这可能只是通过SSH将最终构建(PHP文件)的内容上传到服务器,或者有时可能上传已编译的.jar文件,然后在远程服务器上执行命令以重新启动服务.
我已经将自己的Docker容器设置为构建环境,这包括Java,PHP,Composer和Maven等所有构建完成所需的东西.我正在使用此图像来运行构建.
我想知道的是,我如何通过SSH连接外部服务器以执行我可以在gitlab-ci.yaml文件中指定的部署命令?
1> 小智..:
您可以将SSH密钥存储为秘密变量,gitlab-ci.yaml
并在构建期间使用它来执行SSH命令,有关详细信息,请参阅此处的文档.
一旦你有SSH访问,你可以再使用命令,如rsync
和scp
复制文件到您的服务器.我在这里的另一篇文章中找到了一个例子,您可以将其作为参考.
请让我知道你怎么走.
谢谢,
亚当
服务工程师@ Gitlab
如果页面出现故障,您可以在这里总结一下吗?
2> 小智..:
举例来说,假设您有一台已经安装了需求的服务器,并且想使用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-> settings-> 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 @“ $ QA_SERVER”:/ var / www / html最后,文件从当前目录复制到/ var / www / html
请注意权限,它取决于您要复制的目录。
约翰不清楚不清楚在哪里生成PRIVATE_KEY以及在哪里存储相应的PUBLIC KEY?我的猜测是,管理员登录到QA_SERVER并生成密钥对,然后将私钥复制粘贴到gitlab上的PRIVATE_KEY变量中。