node.js - 如何使用 gitlab runners 在 ec2 上自动部署?

标签 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 并执行所有操作?

还有什么其他方法可以做到这一点?

最佳答案

我找到了一种使用 ssm agent 进行部署的方法通过它我们可以使用标签部署到多个 EC2 实例(不需要 .pem key )

步骤:

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 实例上运行的命令。我用最新代码运行 git pull & pm2 start

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

关于node.js - 如何使用 gitlab runners 在 ec2 上自动部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233955/

相关文章:

node.js - 通过 npm install 在 Docker 容器中访问私有(private) git repos

javascript - 如何在 React 中从索引文件导出多个组件?

javascript - 将react项目依赖项从node迁移到apache

.net - Azure 部署 .NET 应用部署脚本

deployment - 使用 pm2 运行 play scala 应用程序

mysql - Sequelize - 从未创建连接表

hadoop - 使用内部和公共(public) IP 的亚马逊 ec2 实例的 telnet 差异

mysql - Amazon S3 - 以编程方式创建目录结构

postgresql - 无法从 pgadmin4 连接到 postgresql ec2 实例

deployment - 部署图有问题