使用GitLab实现NodeJS的持续部署

16

我有一个使用NodeJS开发的API,并已经通过.gitlab-ci.yml文件成功设置了持续集成。下一步是如果所有测试都通过,则设置从主分支连续部署到Heroku。

虽然有很多关于部署Ruby和Python应用程序的教程,但对于NodeJS没有什么。目前我的.gitlab-ci.yml文件如下所示:

image: node:latest

job1:
  script: "ls -l"

test:
  script: "npm install;npm test"

production:
  type: deploy
  script:
  - npm install
  - npm start
  - gem install dpl
  - dpl --provider=heroku --app=my-first-nodejs --api-key=XXXXXXXXXX
  only:
  - master
Ruby 和 Python 教程使用 "dpl" 工具进行部署,但部署完成后如何在服务器上启动 NodeJS 脚本?
添加了生产环境部分并推送后,测试运行并通过,但部署阶段卡在待处理状态。控制台为空白。有没有人为 NodeJS 设置成功的 CD 脚本?

1
你好,能分享一下你目前的解决方案吗?谢谢 :) - Ibe Vanmeenen
3个回答

11

您可以使用更简单的YAML脚本,其中可以定义CI的阶段(在生产部署之前运行测试),然后可以在Heroku部署阶段使用不同的镜像。因此,对于node应用程序,您可以将默认镜像定义为node:latest。然后,在使用dpl进行生产部署时,您可以使用ruby镜像。

image: node:latest

stages:
  - job1
  - test
  - production

job1:
  stage: job1
  script: "ls -l"

test:
  stage: test
  script: 
    - npm install
    - npm test
  artifacts:
    paths:
      - dist/

production:
  type: deploy
  stage: production
  image: ruby:latest
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=my-first-nodejs --api-key=XXXXXXXXXX
  only:
    - master

小编,我有一个问题,--api-key已经附加到我的Heroku账户上了,所以如果我在GitLab上有一个开源项目,任何人都可以部署到我的Heroku服务器上。我该如何确保只有我的GitLab.ci可以使用我的API密钥进行部署? - Cynthia Sanchez
2
@CynthiaSanchez 你可以在 GitLab 中添加只有你自己能看到的变量。检查你项目的设置,它应该在某个地方。 - Ced
目前(GitLab >= v10),它在> CI/CD > 环境中,但是您可以将它们创建为环境变量,并从文件中引用它们使用 $ENV_NAME - xam

10

嗯,这不会是最长的答案,但是这个或许可以帮助你

如果内容消失了,这里是它的内容:

  image: node:argon

  before_script:
    - apt-get -qq update
    - apt-get -qq install -y python2.7 python2.7-dev build-essential make gcc g++ libicu-dev
    - npm -g install npm --silent
    - "echo -e \"export default {CLIENT_ID: '$CLIENT_ID'}\" > app/scripts/settings.js"
    - npm set progress=false
    - npm install --silent

  stages:
    - test
    - build
    - clean_up

  run_tests:
    stage: test
    script:
      - npm test

  build_and_deploy_prod:
    stage: build
    script:
      - npm run build
      - mkdir  dist/build
      - tar czfC dist/build/latest.tar.gz dist/$CI_BUILD_REF_NAME/ .
      - tar czfC dist/build/$CI_BUILD_REF.tar.gz dist/$CI_BUILD_REF_NAME/ .
      - apt-get install -yqq ruby ruby-dev
      - gem install dpl
      - dpl --skip_cleanup --provider=s3 --region=eu-west-1 --access-key-id=$AWS_ACCESS_KEY --secret-access-key=$AWS_SECRET_KEY --bucket=$AWS_BUCKET --local-dir=dist/build/ --upload-dir=$CI_BUILD_REF_NAME
    artifacts:
      paths:
        - dist/$CI_BUILD_REF_NAME/
    only:
      - master
      - develop

  clean_up_job:
    stage: clean_up
    script:
      - rm -rf node_modules
      - rm -rf ~/.node-gyp
    when: on_failure

1
一篇关于使用GitLab进行NodeJS持续部署的文章,讲解详尽:

链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接