我想在 gitlab 上自动部署 node.js 项目。
目前我在 .gitlab-ci.yml 上使用以下配置
deploy_to_dev_aws:
only:
- development
script:
- echo "$EC2_SSH_KEY" >> "key.pem"
- chmod 600 key.pem
- ssh -T -i key.pem -o StrictHostKeyChecking=no ubuntu@$EC2_HOST_IP <<EOF
- cd ~/projects
- rm myproject
- git checkout git://myprojectpath
- cd myproject
- pm2 delete all
- pm2 start app.js
- logout
- EOF
stage: build
这是正确的方法吗,因为我登录到 ec2 并执行所有操作?
还有什么其他方法可以做到这一点?
最佳答案
我找到了一种使用 ssm agent 进行部署的方法通过它我们可以使用标签部署到多个 EC2 实例(不需要 .pem key )
步骤:
1) 在 EC2 实例上安装 SSM,将该实例标记为 environment=qa
2) 使用 Gitlab runner 向这个标记的实例发送命令
deploy_to_prod_dev_aws:
image: python:latest
only:
- qa
script:
- pip install awscli
- export AWS_ACCESS_KEY_ID=$AWS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET
- export AWS_DEFAULT_REGION=$AWS_REGION
- aws ssm send-command --targets "Key=tag:environment,Values=qa" --document-name "AWS-RunShellScript" --comment "Deployment" --parameters commands="cd /project && git clean -fd && git fetch && git checkout qa && git pull origin qa && npm install && pm2 delete all && pm2 start app.js" --output text
stage: build
environment:
name: qa
在上面的命令中
--targets
指定我们要部署到哪些由标签定义的 ec2 实例
--parameters commands
定义要在 ec2 实例上运行的命令。我用最新代码运行 git pull
& pm2 start
希望这会对某人有所帮助。
关于node.js - 如何使用 gitlab runners 在 ec2 上自动部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233955/