Gitlab-CI 初級篇 - Gitlab Runner
阿新 • • 發佈:2018-12-27
Gitlab Runner
在專案根目錄下新增 .gitlab-ci.yml 檔案,整個持續整合系統是 Gitlab 自帶的,要做的就是新增一個 Runner 到系統裡來解析檔案中的 script 部分。
安裝 Gitlab Runner
官方提供了安裝方法,個人選擇的是 install on macOS,按順序安裝:
- 下載:
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
複製程式碼
- 開啟許可權:
sudo chmod +x /usr/local/bin/gitlab-runner
- 註冊 Runner
- 安裝並啟動 Runner:
cd ~
gitlab-runner install
gitlab-runner start
複製程式碼
在註冊 Runner 前需要做一些準備:
- 安裝 Docker,並啟動
- 通過 Gitlab 介面獲取 Token。獲取流程如下所示:
- 登入 Gitlab,依次進入 Settings -> CI/CD -> Runners
- 獲取到的 Token 如圖所示:
註冊 Gitlab Runner:
- 執行下面的命令:
sudo gitlab-runner register
複製程式碼
- 輸入 Gitlab 例項的 URL:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
複製程式碼
- 輸入用來註冊 Runner 的 token:
Please enter the gitlab-ci token for this runner
xxx
複製程式碼
- 輸入 Runner 的描述,隨後可在 GitLab 介面中修改:
Please enter the gitlab-ci description for this runner
[hostame] my-runner
複製程式碼
- 輸入與 Runner 繫結的標籤(可修改):
Please enter the gitlab-ci tags for this runner (comma separated):
runner
複製程式碼
- 選擇 Runner 的執行方式:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
複製程式碼
- 如果選擇的執行方式是 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
,啟動成功後如下截圖:
構建成功後如下截圖: