我想在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并执行所有操作?
有什么其他方法可以做同样的事情?
答案 0 :(得分:0)
我找到了一种使用ssm agent进行部署的方法,我们可以使用标记部署到多个EC2实例(不需要.pem密钥)
步骤:
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实例上运行的命令。我使用最新代码&amp;运行git pull
。 pm2 start
希望这会对某人有所帮助。