iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0
Modern Web

Next + Ant + Apollo Graphql + Mongo 後台系統 製作與發佈系列 第 9

Gitlab部署 docker

在前兩章介紹 初探Gitlab部署 yml 設定 與 Docker化 docker-compose 後 這個章節要介紹的時如何透過
gitlab runner 與 gitlab Registry讓 他可以 ci/cd 部署到 自己的主機

介紹
gitlab runner
可以跑在任何機器上面幫你完成 .gitlab-ci.yml 上面交代的事情 例如運行test

image: node:8.9.1

cache:
  paths:
    - node_modules/
    - client/node_modules/
    - server/node_modules/

services:
  - mongo

variables:
  NODE_ENV: test
  PORT: 3000

stages:
  - test
  - build
  - deploy

test:
  stage: test
  before_script:
    - apt-get update
    - npm install
    - npm run install-dev

  script:
    - npm run ci &
    - sleep 30
    - npm run test

之後再跑部署

deployJob:
  allow_failure: true
  stage: deploy
  script:
    - id
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker-compose down
    - docker rmi registry.gitlab.com/xxx/erp-system/server
    - docker rmi registry.gitlab.com/xxx/erp-system/client
    - docker pull registry.gitlab.com/xxx/erp-system/server
    - docker pull registry.gitlab.com/xxx/erp-system/client
    - rm -rf ./data/db
    - docker-compose build
    - docker-compose up -d
  only:
    - master
  tags:
    - server

gitlab runner 是我們在安裝的時候會指定他的標籤是什麼 對應上面yml檔中的 tags ,tags是設定的主機名稱則就會在該主機運行 , only master 則是指定的 git branch 支線 CI/CD只有在master的時候再動作

gitlab runner 安裝 官方都有詳細的步驟
https://docs.gitlab.com/runner/install/

上面的部署的部分有用到
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
這些變數是官方指定的 可以參考gitlab Registry

Registry 可以讓你有build的時候每一個專案都有自己的docker空間可以推上去 但是在CI/CD中要先登入自己的gitlab帳號密碼 這邊使用 gitlab提供的變數 就可以了
https://gitlab.com/polo13999/erp-system/container_registry

之後的docker script就看專案的需求去制定,這邊是先把遠端的主機docker-compose down 先停用
在刪除之前的docker images後在下載新的 下載的路徑 Registry 中有提供路徑

總結

gitlab 提供了一個完善的免費CI/CD部署環境 透過docker 讓遠端環境不需要在校調可以說這樣的部署是很方便的一開始不太知道這幾個關係的對應,模索了一陣子現在都用這樣的方式在部署,小專案很方便跟大家分享一下 謝謝


上一篇
Docker 化
下一篇
綁定Dns
系列文
Next + Ant + Apollo Graphql + Mongo 後台系統 製作與發佈10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言