2017-05-29 70 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

希望這將有助於某人。