使用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證書
-
點擊瀏覽器鏈接的左邊
鎖頭
可以下載證書。本文下載的格式是cer
-
將下載好的證書上傳到要部署的服務器上。
注冊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.html
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 Lint
在 CI/CD
里面。下面是我的驗證結果。
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
注意事項
.gitlab-ci.yml
文化中指定的 runner tag一定要存在[否則找不到runner會一直pending]- 出現報錯
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
,會自動升級,並保留之前的數據
使用初始密碼登錄
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
,部分插件安裝失敗可以直接跳過。
配置密碼
重新設置一個密碼
# 忘記秘密:
到`/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
此時可以先不做任何配置,直接保存。
配置test
job 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管理員權限,我們將采取別的辦法
重新配置test
job 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
- 上手簡單
- 與
gitlab
完美兼容 - 沒有web頁面,但是
gitlab
有提供 - 需要自己配置編譯環境
jenkins
- 上手簡單
- 需要配置
webhook
,或者像本文一樣輪詢 - 有自己的web頁面
- 有豐富的插件,功能強大
- 編譯環境例如
jdk
mvn
可以在設置中配置,不需要構建