2017-05-29 129 views
3

我想在gitlab上自动部署node.js项目。如何使用gitlab跑步者在ec2上自动部署?

目前我使用下面的配置上.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 [email protected]$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

你有什么发现?寻找同样的东西。 – vira

+0

https://stackoverflow.com/questions/36437278/automate-code-deploy-from-git-lab-to-aws-ec2-instance。 只是可怕的是,我们需要与AWS整合达到多深。我希望有一个更简单的解决方案。 – vira

回答

0

我找到了一种方法使用ssm agent部署,使我们可以部署到使用标签多个EC2实例(不是必需的.pem键)

步骤:

1)EC2实例安装SSM,标记,实例作为环境= QA

2)使用Gitlab转轮发送命令到该被标记的实例

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 
这在我们正在被部署由标签定义的EC2实例

在上述命令

--targets指定

--parameters commands的命令,以在EC2 instance.I运行限定跑git pull与最新的代码& pm2 start

希望这将有助于某人。