如何使用Gitlab CI/CD部署Meteor项目?

17

据GitLab网站所述,可以在将代码推送到存储库后使用其进行自动部署,但我无法弄清楚如何操作。虽然有很多Ruby教程,但没有Meteor或Node的相关内容。

基本上,我只需要在将代码推送到主分支后重建我的服务器上的Docker容器。有人知道如何实现吗?我对.gitlab-ci.yml不熟悉,非常感谢帮助。


目前也在努力解决这个问题。尝试使用DigitalOcean作为runner。正在使用Meteor 1.3版本。 - demiters
1个回答

25
Brief: 我正在运行一个Meteor 1.3.2应用程序,托管在Digital Ocean(Ubuntu 14.04)上已经4个月了。我正在使用与Meteor应用程序相同的Digital Ocean droplet上运行的Gitlab v.8.3.4。这是一个2 GB / 2 CPU droplet(每月20美元)。使用内置的Gitlab CI进行CI/CD。直到现在,这个设置一直运行良好。(我们目前不使用Docker,但这不应该有影响。)
Our CI/CD strategy:
1.我们在本地电脑上检出主分支。该分支包含整个Meteor项目,如下所示:

enter image description here

我们在Windows上使用git CLI工具连接到Gitlab服务器,进行常规的拉取、推送等活动。
在Atom编辑器中打开已检出的项目。我们还将Atom与Gitlab集成。这有助于在Atom编辑器本身内快速执行git状态/pull/push等操作,并进行常规的Meteor工作,如修复错误等。
在本地笔记本电脑上测试后,我们会在主分支上进行git push和commit,从而触发Gitlab CI的自动构建。可以在Gitlab本身中查看结果(包括构建日志),如下所示:

enter image description here

下面的图片显示了所有先前的构建日志:

enter image description here

请按照以下步骤操作:
  1. 在 DO droplet 上安装 Meteor。

  2. 在 DO 上安装 Gitlab(如果可能,请使用一键部署),或手动安装。确保您正在安装 Gitlab v.8.3.4 或更高版本。我已经在我的 droplet 上进行了一键部署。 启动 gitlab 服务器,并从浏览器登录 gitlab。打开您的项目,然后转到左侧菜单中的项目设置 -> Runners。

enter image description here

  1. SSH to your DO server & configure a new upstart service on the droplet as root:

    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. Install gitlab-ci-multi-runner from here: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md as per the instructions Cheatsheet:

    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
    

    Enter details from step 2

  2. Now the new runner should be green or activate the runner if required

  3. Create .gitlab-ci.yml within the meteor project directory

    Sample file:

    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. Check in above file in gitlab. This should trigger Gitlab CI and after the build process is complete, the new app will be available @ example.net:3000

注意:自第一次在 .gitlab-ci.yml 中检查后,应用程序将不可用,因为重新启动 meteor-service 将导致服务无法找到。请在 DO SSH 控制台上手动运行 sudo start meteor-service 一次。在 gitlab 主分支上任何新的检入将触发自动 CI/CD,并且在构建成功后,应用程序的新版本将在 example.com:3000 上可用。
P.S.:您可以在 http://doc.gitlab.com/ee/ci/yaml/README.html 找到 gitlab ci yaml 文档,以进行自定义并了解上面的示例 yaml 文件。对于特定于 Docker 的 runner,请参考 https://gitlab.com/gitlab-org/gitlab-ci-multi-runner

另外,我需要nginx能够在同一台droplet上拥有多个Meteor环境,并且能够在不停止生产应用程序的情况下更新SSL证书。 - demiters
没有不使用mup的特殊原因。我认为Meteor的构建过程非常简单和直接,因此ci yaml文件中的简单命令即可完成工作。我们已经设置了Nginx作为Web服务器和代理,端口80和https(443)在Meteor(node)服务器面前运行的3000端口。Https是使用Let's Encrypt实现的。不过我认为这应该提出一个新问题 :) - roray

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