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

时间:2017-05-29 02:40:36

标签: node.js amazon-ec2 deployment gitlab gitlab-ci

我想在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并执行所有操作?

有什么其他方法可以做同样的事情?

1 个答案:

答案 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 pullpm2 start

希望这会对某人有所帮助。