1. 程式人生 > >Gitlab-CI 初級篇 - Gitlab Runner

Gitlab-CI 初級篇 - Gitlab Runner

Gitlab Runner

在專案根目錄下新增 .gitlab-ci.yml 檔案,整個持續整合系統是 Gitlab 自帶的,要做的就是新增一個 Runner 到系統裡來解析檔案中的 script 部分。

安裝 Gitlab Runner

官方提供了安裝方法,個人選擇的是 install on macOS,按順序安裝:

  1. 下載:
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
複製程式碼
  1. 開啟許可權: sudo chmod +x /usr/local/bin/gitlab-runner
  2. 註冊 Runner
  3. 安裝並啟動 Runner:
 cd ~
 gitlab-runner install
 gitlab-runner start
複製程式碼

在註冊 Runner 前需要做一些準備:

  1. 安裝 Docker,並啟動
  2. 通過 Gitlab 介面獲取 Token。獲取流程如下所示:
  • 登入 Gitlab,依次進入 Settings -> CI/CD -> Runners
  • 獲取到的 Token 如圖所示:
    獲取到的 Token 如圖

註冊 Gitlab Runner:

  1. 執行下面的命令:
sudo gitlab-runner register
複製程式碼
  1. 輸入 Gitlab 例項的 URL:
 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
 https://gitlab.com
複製程式碼
  1. 輸入用來註冊 Runner 的 token:
Please enter the gitlab-ci token for this runner
xxx
複製程式碼
  1. 輸入 Runner 的描述,隨後可在 GitLab 介面中修改:
 Please enter the gitlab-ci description for
this runner [hostame] my-runner 複製程式碼
  1. 輸入與 Runner 繫結的標籤(可修改):
 Please enter the gitlab-ci tags for this runner (comma separated):
 runner
複製程式碼
  1. 選擇 Runner 的執行方式:
 Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
 docker
複製程式碼
  1. 如果選擇的執行方式是 Docker,會要求填寫預設的映象,這個映象也可以在 .gitlab-ci.yml 中定義:
 Please enter the Docker image (eg. ruby:2.1):
 alpine:latest
複製程式碼

Gitlab 同時提供非互動式的註冊,一行命令就可以:

sudo gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.com/" \
  --registration-token "獲取的 token " \
  --executor "docker" \
  --docker-image alpine:latest \
  --description "runner" \
  --tag-list "docker,aws" \
  --run-untagged \
  --locked="false" \
複製程式碼

註冊流程走完會在 ~/etc/gitlab-runner/ 目錄下生成 config.toml 配置檔案,這時候就可以在 Gitlab 的設定中看到啟用的 Runner:

配置 .gitlab-ci.yml 檔案

在這裡只貼上個人配置,詳細的資料都可以查到,在這裡就不贅述了:

stages:
  - build
  - deploy

build:
  image: node:alpine
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    expire_in: 1 week
    paths:
      - dist/
  only:
    - master

deploy_staging:
  image: alpine:latest
  stage: deploy
  before_script:
    - apk update
    - apk add --no-cache rsync openssh
  script:
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_dsa
    - chmod 600 ~/.ssh/id_dsa
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - rsync -rav --delete dist/ "$SERVER_USER_HOST:$SERVER_MASTER_PATH"
  only:
    - master


複製程式碼

配置檔案中建立了兩個工程,分別是 build 和 deploy,需要補充的幾點:

  • build 工程中通過 artifacts 標記新建的 dist 檔案,以便在其它工程中能夠複用這個檔案;
  • 使用 ssh 登入伺服器;
  • 使用 rsync 進行遠端檔案同步;
  • 考慮到安全性,配置檔案中類似 $SERVER_USER_HOST 這樣的變數在 Settings -> CI/CD -> Variables 中設定;
  • 在 Gitlab 設定中移除 tags 檢測:

使用命令列執行 Runner,sudo gitlab-runner run ,啟動成功後如下截圖:

構建成功後如下截圖: