如何使用Gitlab CI/CD部署一个meteor项目?

How to use Gitlab CI/CD to deploy a meteor project?

正如在他们的网站上声称的那样,Gitlab 可用于在将一些代码推送到存储库后自动部署项目,但我无法弄清楚如何。那里有很多 ruby 教程,但 none 用于流星或节点。

基本上我只需要在我的服务器上重建一个 Docker 容器,在代码被推送到我的 master 分支之后。有谁知道如何实现它?我对 .gitlab-ci.yml 完全陌生,非常感谢帮助。

简介:我 运行正在使用 Meteor 1.3.2 应用程序,托管在 Digital Ocean (Ubuntu 14.04) 上已有 4 个月了。我在与 Meteor 应用程序相同的 Digital Ocean droplet 上使用 Gitlab v. 8.3.4 运行ning。它是一个 2 GB / 2 个 CPU 的 droplet(每月 20 美元)。使用内置的 Gitlab CI for CI/CD。到目前为止,此设置已成功 运行ning。 (我们目前没有使用 Docker,但这应该无关紧要。)

我们的CI/CD策略:

  1. 我们在本地笔记本电脑上查看 Master 分支。该分支包含整个 Meteor 项目,如下所示:

我们在 Windows 上使用 git CLI 工具连接到我们的 Gitlab 服务器。 (用于拉、推等类似的常规 git 活动)

  1. 在 Atom 编辑器中打开签出的项目。我们还将 Atom 与 Gitlab 集成在一起。这有助于在 Atom 编辑器本身中快速 git status/pull/push 等。做常规的流星工作即。修复错误等

  2. Post 在本地笔记本电脑上测试,然后我们在主机上执行 git 推送和提交。这会触发使用 Gitlab CI 的自动构建,结果(包括构建日志)可以在 Gitlab 本身中看到,如下所示:

下图显示了所有以前的构建日志:

请按照以下步骤操作:

  1. 在 DO 液滴上安装 meteor。

  2. 在 DO 上安装 Gitlab(如果可能,使用一键部署)或手动安装。确保您正在安装 Gitlab v. 8.3.4 或更新版本。我在我的 Droplet 上做了一个 DO one-click 部署。 启动 gitlab 服务器并从浏览器登录 gitlab。打开您的项目并从左侧菜单转到项目设置 -> Runners

  1. 通过 SSH 连接到您的 DO 服务器并以 root 身份在 Droplet 上配置一个新的 upstart 服务:

    vi /etc/init/meteor-service.conf
    

示例文件:

#upstart service file at /etc/init/meteor-service.conf
description "Meteor.js (NodeJS) application for eaxmple.com:3000"
author "rohanray@gmail.com"

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on shutdown

# Automatically restart process if crashed
respawn
respawn limit 10 5

script
    export PORT=3000
    # this allows Meteor to figure out correct IP address of visitors
    export HTTP_FORWARDED_COUNT=1
    export MONGO_URL=mongodb://xxxxxx:xxxxxx@example123123.mongolab.com:59672/meteor-db
    export ROOT_URL=http://<droplet_ip>:3000
    exec /home/gitlab-runner/.meteor/packages/meteor-tool/1.1.10/mt-os.linux.x86_64/dev_bundle/bin/node /home/gitlab-runner/erecaho-build/server-alpha-running/bundle/main.js >> /home/gitlab-runner/erecaho-build/server-alpha-running/meteor.log
end script
  1. 从这里安装 gitlab-ci-multi-runner:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md 按照说明 备忘单:

    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
    sudo apt-get install gitlab-ci-multi-runner
    sudo gitlab-ci-multi-runner register
    

    输入第 2 步的详细信息

  2. 现在新的 运行ner 应该是绿色的或者如果需要激活 运行ner

  3. 在meteor项目目录下创建.gitlab-ci.yml

    示例文件:

    before_script:
      - echo "======================================"
      - echo "==== START auto full script v0.1 ====="
      - echo "======================================"
    
    types:
      - cleanup
      - build
      - test
      - deploy
    
    job_cleanup:
      type: cleanup
      script:
      - cd /home/gitlab-runner/erecaho-build
      - echo "cleaning up existing bundle folder"
      - echo "cleaning up current server-running folder"
      - rm -fr ./server-alpha-running
      - mkdir ./server-alpha-running
      only:
      - master
      tags:
      - master
    
    job_build:
      type: build
      script:
      - pwd
      - meteor build /home/gitlab-runner/erecaho-build/server-alpha-running --directory --server=http://example.org:3000 --verbose
      only:
      - master
      tags:
      - master
    
    job_test:
      type: test
      script:
      - echo "testing ----"
      - cd /home/gitlab-runner/erecaho-build/server-alpha-running/bundle
      - ls -la main.js
      only:
      - master
      tags:
      - master
    
    job_deploy:
      type: deploy
      script:
      - echo "deploying ----"
      - cd /home/gitlab-runner/erecaho-build/server-alpha-running/bundle/programs/server/ && /home/gitlab-runner/.meteor/packages/meteor-tool/1.1.10/mt-os.linux.x86_64/dev_bundle/bin/npm install
      - cd ../..
      - sudo restart meteor-service
      - sudo status meteor-service
      only:
      - master
      tags:
      - master
    
  4. 在 gitlab 中签入上述文件。这应该触发 Gitlab CI 并且在构建过程完成后,新应用程序将可用 @ example.net:3000

注意: 第一次签入.gitlab-ci.yml后应用将无法使用,因为重启meteor-service会导致服务未找到。在 DO SSH 控制台上手动 运行 sudo start meteor-service 一次。 Post check-in 到 gitlab master 的任何新版本都将触发自动 CI/CD 并且应用程序的新版本将在构建后的 example.com:3000 可用已成功完成。

P.S.: gitlab ci yaml 文档可以在 http://doc.gitlab.com/ee/ci/yaml/README.html 找到,用于您的自定义和理解上面的示例 yaml 文件. docker specific 运行ner,请参考https://gitlab.com/gitlab-org/gitlab-ci-multi-runner