前言
公司前端大佬因為某些原因離職了,走的比較匆忙,自己之前一直很少接觸這方面的東西,一直都是一知半解。這兩天我一邊學,一邊動手搭建,同時記錄整個搭建過程。
這是一系列文章,從搭建 Gitlab 到 安裝、註冊Gitlab-runner 再到二者結合去部署一個簡單的專案,通過這幾篇文章,你將學會如何在 Gitlab 上自動化打包部署自己的專案。
系列文章一共有四篇,包括:
- 如何在阿里雲上安裝Gitlab
- 安裝GITLAB-RUNNER
- LINUX的免密登入
- 使用GITLAB-RUNNER部署GITLAB的專案
由於自己一直做的是前端,對於Linux我不算熟練,如有錯誤的地方,請大家指出。
原文地址:安裝GITLAB-RUNNER
這篇是系列的第二篇,我們會安裝 Gitlab-runner 並編寫一個簡單的 .gitlab-ci.yml 檔案,看一下執行效果。
前置工作
兩臺伺服器,我的都是Linux CentOS 7.6 64位 一臺用需要安裝 Gitlab,關於如何安裝 Gitlab ,可檢視這篇文章 阿里雲安裝GITLAB筆記。 另一臺用於安裝 Gitlab-runner。
Step1:安裝Gitlab-runner
下載系統對應的Gitlab-runner(當前安裝版本為11.9.2):
# Linux x86-64
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# Linux x86
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386
# Linux arm
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm
複製程式碼
給Gitlab-runner新增執行許可權:
sudo chmod +x /usr/local/bin/gitlab-runner
複製程式碼
如果想使用 Docker 可以安裝 Docker(不使用可直接跳過)
curl -sSL https://get.docker.com/ | sh
複製程式碼
建立一個 GitLab CI 使用者
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
複製程式碼
安裝並啟動服務
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
複製程式碼
Step2:註冊Runner
執行以下命令開始註冊:
sudo gitlab-runner register
複製程式碼
填入Gitlab URL:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
# 沒有域名所以填的是IP
http://xx.xx.xxx.xx:8888
複製程式碼
輸入註冊Runner所需要的token:
這裡的token分為兩種
一種是 Shared Runner ,該 Runner 所有專案都可以使用
位置:頂部設定圖示? -> 左側欄Overview -> Runner
另一種是 Specific Runner ,該 Runner 指定具體某個專案才可使用
位置:進入某個專案 -> 左側欄Setting -> CI/CD -> 在內容區域找到Runners一項,點選展開
Please enter the gitlab-ci token for this runner
# 這裡我們使用 Shared Runner Token
xxxxxxx
複製程式碼
輸入一個Runner的description ,可以在稍後的GitLab的UI中更改這個描述:
Please enter the gitlab-ci description for this runner
test-gitlab-runner-description
複製程式碼
輸入Runner的tags(這個tags後面會用到)
Please enter the gitlab-ci tags for this runner (comma separated)
my-tag
複製程式碼
選擇Runner的執行者
這裡我使用 shell。
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
複製程式碼
如果一切正常的話我們會看到
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
複製程式碼
如果選擇了Docker則需要額外一步:
Please enter the Docker image (eg. ruby:2.1):
alpine:latest
複製程式碼
我們回到Share Runners 就可以看到我們新增的 runner 了
Step3 建立專案與 .gitlab-ci.yml 檔案
在專案根目錄下建立 .gitlab-ci.yml 檔案,然後用 git 提交。
# 定義 stages(階段,會依次執行)
stages:
- install_deps
- build_prod
- deploy_prod
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- node_modules/
- dist
# 安裝構建依賴
install_deps_job:
stage: install_deps
# 在哪個分支才會執行指令碼
only:
# - dev
# - release
- master
script:
- echo '模擬安裝構建依賴階段'
tags:
- my-tag
# 構建預prod環境src目錄下應用
build_prod_job:
stage: build_prod
only:
- master
script:
- echo '構建預prod環境src目錄下應用階段'
tags:
- my-tag
# 部署生產環境
deploy_prod_job:
stage: deploy_prod
only:
- master
script:
- echo '部署生產環境階段'
tags:
- my-tag
複製程式碼
然後你可能會看到報錯
Running with gitlab-runner 11.9.2 (fa86510e)
on desc Z1UPKJjn
Using Shell executor...
Running on iZwz98jvb8bcz40ko474qsZ...
bash: line 68: git: command not found
bash: line 66: cd: /home/gitlab-runner/builds/Z1UPKJjn/0/main-group/main-project: No such file or directory
ERROR: Job failed: exit status 1
複製程式碼
報錯的原因是我的伺服器是一臺只安裝了 Gitlab-runner 的伺服器,根據報錯提示,需要 git 來拉取 Gitlab 伺服器上的程式碼,所以我們安裝 git:
yum -y install git
複製程式碼
然後使用
git --version 檢視 git 是否安裝成功
複製程式碼
之後重新執行pipline或提交程式碼,可以看到一切執行正常:
注意點:
- Gitlab-runner 伺服器上需要安裝 Git。
- 全部配置好了,提交後卻一直處於 pending 狀態並且提示:
This build is stuck, because the project doesn't have any runners online assigned to it. Go to Runners page
,這是因為未找到對應的 runner,原因一:可能是gitlab-runner註冊失敗,原因二:可能是.gitlab-ci.yml配置檔案裡面 tags 沒有匹配到已註冊可用的 runner,在 stage 中加入對應 runner 註冊時輸入的 tags 即可。 - GitLab 最好不要與 GitLab Runner 裝在同一臺機器上。
參考:
Install GitLab Runner manually on GNU/Linux Registering Runners GitLab Runner commands GitLab CI/CD Pipeline Configuration Reference Docker搭建自己的Gitlab CI Runner