如何使用 gitlab runners 在 ec2 上自动部署?

How to auto deploy on ec2 using gitlab runners?

我想在 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 进行部署的方法,通过这种方法我们可以使用标签(不需要 .pem 密钥)部署到多个 EC2 实例

步骤:

1) 在 EC2 实例上安装 SSM,将该实例标记为 environment=qa

2) 使用 Gitlab 运行ner 向这个标记的实例发送命令

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 instance.I 运行 git pull 上 运行 的哪些命令,最新代码 & pm2 start

希望这对某人有所帮助。