Gitlab自動部署之二:安裝GITLAB-RUNNER

大猹子發表於2019-04-19

前言

公司前端大佬因為某些原因離職了,走的比較匆忙,自己之前一直很少接觸這方面的東西,一直都是一知半解。這兩天我一邊學,一邊動手搭建,同時記錄整個搭建過程。

這是一系列文章,從搭建 Gitlab 到 安裝、註冊Gitlab-runner 再到二者結合去部署一個簡單的專案,通過這幾篇文章,你將學會如何在 Gitlab 上自動化打包部署自己的專案。

系列文章一共有四篇,包括:

  1. 如何在阿里雲上安裝Gitlab
  2. 安裝GITLAB-RUNNER
  3. LINUX的免密登入
  4. 使用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

share-runners
另一種是 Specific Runner ,該 Runner 指定具體某個專案才可使用 位置:進入某個專案 -> 左側欄Setting -> CI/CD -> 在內容區域找到Runners一項,點選展開
specific-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 了

runner-success

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或提交程式碼,可以看到一切執行正常:

deploy-success

注意點:

  1. Gitlab-runner 伺服器上需要安裝 Git。
  2. 全部配置好了,提交後卻一直處於 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 即可。
  3. 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

相關文章