gitlab與jenkins結合構建持續集成


Jenkins是java編寫,需要安裝JDK,這里采用 yum 安裝,對版本有需求的,可以到 oracle 官網下載 JDK。

yum install -y java-1.8.0-openjdk

  

一、安裝 Jenkins

添加yum源

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

導入密鑰

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

安裝

yum install -y jenkins

新版本的 gitlab 服務端口為 8080,為了不和 gitlab 的服務端口沖突,修改 Jenkins 的默認端口為 8088。

查看端口

netstat -antup|grep :80

修改端口為8088

vi /etc/sysconfig/jenkins
JENKINS_PORT="8088"

數據目錄,可以自定義
JENKINS_HOME="/var/lib/jenkins"

 

二、啟動 Jenkins

systemctl start jenkins.service

設置開機啟動

systemctl enable jenkins.service

如果訪問8088端口,發現訪問不了,則先查看日志

cat /var/log/jenkins/jenkins.log

如果發現這種信息

java.io.IOException: permission denied

原因是 Jenkins 默認使用的是 Jenkins 用戶,因此日志中出現了權限問題,修改 Jenkins 默認用戶為 root。

vi /etc/sysconfig/jenkins
JENKINS_USER="root"

  

三、配置jenkins使用gitlab更新代碼

安裝插件
Credentials Plugin # 簽名證書管理
Gitlab Plugin # 安裝后從gitlab獲取代碼
Git Plugin 和 Git Client Plugin # 用於 jenkins 在 gitlab中拉取源碼
Gitlab Hook # gitlab觸發 jenkins 構建項目
Gitlab Authentication # gitlab和 jenkins 認證相關的插件
SSH Plugin # 遠程執行 shell 腳本
Publish Over SSH # 通過 ssh 部署應用

如果 jenkins 安裝插件超時,可以在 管理jenkins -> 插件管理 -> 高級 -> 升級站點 改為:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

如果換站點后,還是安裝超時,則到下面網站手動下載安裝

http://updates.jenkins-ci.org/download/plugins/

  

四、設置 gitlab 用戶 root 可以通過 ssh 公鑰直接下載代碼

生成的SSH密鑰, 一路回車,注意我這里生成的是 root 用戶,當然你也可以指定用戶

ssh-keygen

查看公鑰

cat ~/.ssh/id_rsa.pub

然后把公鑰添加到 gitlab 項目->設置->版本庫->部署密鑰
這樣我們通過root用戶拉取代碼,就不需要輸入用戶名和密碼了。

git clone git@192.168.1.222:develop/web.git

  

五、Jenkins 添加 gitlab 用戶 root 的 私鑰

cat ~/.ssh/id_rsa

在 憑據 -> 全局 -> 添加憑據 -> 選擇類型 SSH Username with private key
用戶名輸入 root,並添加私鑰

注意,root用戶的公鑰在 gitlab,私鑰在 jenkins,這樣 jenkins 就可以直接拉取 gitlab 上的代碼。

 

六、在 Jenkins 上添加項目

新建一個item -> 輸入任務名稱 -> 選擇構建一個自由風格的軟件項目,然后點確定。

然后 描述 根據需要自已填寫,源碼管理選擇 git,並添加倉庫URL為 git@192.168.1.222:develop/web.git。
然后選擇憑據為我們剛剛添加的 root,然后點保存。

 

七、自動部署 web 項目

可以通過執行命令或腳本方式進行代碼發布,這里演示使用 root 用戶在各服務器上發布代碼。
當然也可以建一些普通用戶,但需要保持所有服務器上的用戶ID一致,避免權限問題。

比如我想把222主機上的代碼自動部署到111主機上,我的222主機上安裝了 gitlab 和 jenkins。

1、首先要實現 root 用戶無密碼直接登陸111主機。

將公鑰復制到遠程主機

ssh-copy-id root@192.168.1.111
ssh 192.168.1.111

為了讓 jenkins 登陸本機,也免密碼,則在本機也復制一份

ssh-copy-id root@192.168.1.222

注意,你需要在哪台機器上自動發布代碼,就需要讓 jenkins 能使用root用戶免密碼登陸到那台機器上。

2、我們在 jenkins 的主機上,先 clone 一份代碼

cd /data
git clone git@192.168.1.222:develop/web.git

3、然后編寫 shell 執行命令,如 sync.sh

#!/bin/bash
echo $USER
cd /data/web
git pull
scp -r ./* root@192.168.1.111:/data/wwwroot/

4、在 jenkins 項目中點擊配置,選擇構建環境,增加構建步驟,選擇 Execute shell,填入如下命令,並保存。

sudo ssh root@192.168.1.222 /data/sync.sh

5、然后點擊 項目的 立即構建,看代碼是否同步到了111主機上。

 

八、實現 gitlab 觸發 jenkins 自動部署

1、安裝 gitlab hook plugin 和 Build Authorization Token Root 和 Build Token Trigger 插件。

2、生成身份驗證令牌

openssl rand -hex 16

3、在 jenkins 項目 -> 配置 -> 構建觸發器 -> 選中遠程構建,並填入上一步生成的令牌。

選中如下兩項,然后點保存。
Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.1.222:8088/project/web
GitHub hook trigger for GITScm polling

4、在 gitlab 項目 -> 設置 -> 集成 -> 增加web鈎子

鏈接URL格式:http://jenkins 地址/buildByToken/build?job=jenkins項目名&token=token值
如:

http://192.168.1.222:8088/buildByToken/build?job=web&token=46324e223bc203855552e62dd63b12c9

5、點擊測試,push events,如果返回 201 ,說明成功了。

6、我們通過 git 添加文件,提交到版本庫,看 jenkins 是否會觸發自動構建。

 

九、使用 Build Pipeline 插件以流程圖的形式展示各個 job 的順序

Build Pipeline 插件作用: 這個插件能夠以流程圖的形式展示各個 job 的順序,依賴關系等等。

安裝完插件后,我們添加一個視圖,並選中 Build Pipeline View。

在 Display Options 中

No Of Displayed Builds 選擇 3 ,

Refresh frequency (in seconds) 填入 3。

上面的選項表示顯示最近 3 次的構建結果,當然也可根據需要自已填寫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM