持續集成Gitlab CICD Runner&Jenkins

使用Gitlab Runner實現

再要部署的服務器上安裝 gitlab runner

下載可執行文件

# 按照架構自行選擇 本文選擇的是  Linux x86-64
# Linux x86-64
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# Linux x86
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386

# Linux arm
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm

設置可執行權限權限

chmod +x /usr/local/bin/gitlab-runner

建立用戶

useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

運行服務

gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start

註冊 Runner

gitlab上找到須要用的URL與token

  • 路徑是:Project-> Settings -> CI/CD -> Runners -> Expand

在瀏覽器中下載gitlab的ssl證書

  1. 點擊瀏覽器連接的左邊鎖頭能夠下載證書。本文下載的格式是cerjava

  2. 將下載好的證書上傳到要部署的服務器上。linux

註冊runner

gitlab-runner register --tls-ca-file=/home/gitlab-runner/test.cer
# 根據提示 依次輸入以下內容
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://example.com/
Please enter the gitlab-ci token for this runner:
2312132dfa2fdafeafdafewaf
Please enter the gitlab-ci description for this runner:
[centos.localdomain]: test
Please enter the gitlab-ci tags for this runner (comma separated):
test
Registering runner... succeeded                     runner=nZsc7EsF
Please enter the executor: docker-ssh+machine, parallels, shell, ssh, virtualbox, docker+machine, kubernetes, custom, docker, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
#——————————————————————————注——————————————————————————
本文的executor選擇的是shell
# 註冊成功後再次run一下gitlab-runner
[root@centos target]# gitlab-runner start
# 註冊成功後生成 /etc/gitlab-runner/config.toml
[root@centos target]# cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "test"
  url = "https://example.com/"
  token = "adsfasfdsafdsafdafdsfdafa"
  tls-ca-file = "/home/gitlab-runner/11111.cer"
  executor = "shell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

在項目中配置.gitlab-ci.yml文件

本文的.gitlab-ci.yml

注: 只作了本次部署的配置,具體其餘配置能夠查看官網https://docs.gitlab.com/ee/ci/yaml/README.htmlgit

stages:
  - build
before_script:
  - export MVN_HOME  # export Envionment Variable
  - export JAVA_HOME
  - java -version
  - sh /home/gitlab-runner/kill.sh
# 定義 job
test:
  stage: build      # stage
  tags:
    - first         # runner tag you configured
  only:        
    - test          # branch support regex
  script:           #command
    - mvn clean
    - mvn package
    - cd ./target
    - nohup java -Xms3g -Xmx3g -jar  test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &

驗證 .gitlab-ci.yml的正確性

能夠在gitlab上使用CI Lint驗證上面yml文件的正確行。CI LintCI/CD裏面。下面是個人驗證結果。web

Status: syntax is correct
Parameter   Value
Build Job - test    

export MVN_HOME
export JAVA_HOME
java -version
sh /home/gitlab-runner/kill.sh
mvn clean
mvn package
cd ./target
nohup java -Xms3g -Xmx3g -jar  test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &


Tag list: first
Only policy: refs, test
Except policy:
Environment:
When: on_success

注意事項

  1. .gitlab-ci.yml文化中指定的 runner tag必定要存在[不然找不到runner會一直pending]
  2. 出現報錯fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.x.com/root/cmop.git/': Peer's Certificate issuer is not recognized.
# 關閉ssl校驗
[root@gitlab-runner ~]# su - gitlab-runner
[gitlab-runner@gitlab-runner ~]$ git config --global http."sslVerify" false
# 查看
[gitlab-runner@gitlab-runner ~]$ cat /home/gitlab-runner/.gitconfig 
[http]
    sslVerify = false

使用 Jenkins 實現

下載/使用jenkins

1. 訪問 : https://jenkins.io/download/。本文采用的使用是`war`包安裝

2. 下載: `wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.190.2/jenkins.war`

3. 運行 :`nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8888 > jenkins.log 2>&1 &`
注: `-Dhudson.util.ProcessTree.disable=true`參數很重要,爲了避免讓jenkins殺掉job建立的進程。若是不加的話,即使是`nohup`執行的命令也會在job執行以後殺掉。

訪問 ip:8888進行初始化設置

注:若是以前安裝過jenkins,會自動升級,並保留以前的數據docker

使用初始密碼登陸

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
# 使用下面的密碼進入,實際是一個md5的串
1111111111111111111111111

選擇plugins

本文直接選擇了 suggestions plugins,部分插件安裝失敗能夠直接跳過。shell

配置密碼

從新設置一個密碼centos

# 忘記祕密:
到`/root/.jenkins/users` `admin`用戶下找到config.xml,修改下面的內容
<passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>
這個密碼是`123456`

jenkins中配置Gitlab實現自動部署

安裝gitlab插件

1. 依次訪問:`Manage Jenkins`->`Manage Plugins`
2. 在:`Available`中搜索`Gitlab`,安裝`Gitlab`插件
3. 等待安裝。

配置gitlab鏈接[可不作]

1. 依次訪問:`Manage Jenkins`->`Configure System`
2. 找到 Gitlab 標籤頁
3. 依次填入`Connection name`,`Gitlab host URL`
4. 添加一個`Credntials`,選擇`Gitlab API token`
5. 填入在gitlab上設置的`Personal Access Tokens`
6. 點開`Advanced`,勾上`Ignore SSL Certificate Errors`
注:若是不勾上步驟6的話,gitlab是https的將會不成功。
7. 點擊`Test Connnection`
8. 保存

建立一個Freestyle project的Jobtest

此時能夠先不作任何配置,直接保存。瀏覽器

配置testjob gitlab倉庫

1. 在job`test`頁面點擊`Configure`
2. 找到`Source Code Management`選擇`Git`
3. 配置`Repository URL`並添加一個`Credentials`
注:此處想使用`Personal Access Tokens`添加不上,最後使用的帳號密碼
4. 保存

配置test job Triggers

1. 在job`test`頁面點擊`Configure`
2. 找到`Build Triggers`選擇`Build when a change is pushed to GitLab`其餘默認就行
3. 保存

配置webhook

1. 到`Gitlab`項目頁面->`Settings`->`Integrations`
2. 輸入上一步配置後面的`url`
3. 返回錯誤`Url is blocked: Requests to the local network are not allowed`
4. 上面的解決辦法:
管理員帳號登陸gitlab,在Admin area中,左側Settings -> Network -> Outbound requests,勾選Allow requests to the local network from hooks and services
可是沒有gitlab管理員權限,咱們將採起別的辦法

從新配置testjob Triggers改成Poll SCM

1. 配置每分鐘刷新一次
*/1 * * * *

配置bulid執行命令

export MVN_HOME # export Envionment Variable
export JAVA_HOME
java -version
sh /home/gitlab-runner/kill.sh
cd /root/.jenkins/workspace/test
mvn clean
mvn package
cd ./target
nohup java -Xms3g -Xmx3g -jar  test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &
# 這些也能夠寫到一個shell腳本中,jenkins調用腳本

對比

  • gitlab-ci
  1. 上手簡單
  2. gitlab完美兼容
  3. 沒有web頁面,可是gitlab有提供
  4. 須要本身配置編譯環境
  • jenkins
  1. 上手簡單
  2. 須要配置webhook,或者像本文同樣輪詢
  3. 有本身的web頁面
  4. 有豐富的插件,功能強大
  5. 編譯環境例如jdk mvn能夠在設置中配置,不須要構建
相關文章
相關標籤/搜索