gitlab與jenkins結合構建持續集成

Jenkins是java編寫,須要安裝JDK,這裏採用 yum 安裝,對版本有需求的,能夠到 oracle 官網下載 JDK。php

yum install -y java-1.8.0-openjdk

  

1、安裝 Jenkinsjava

添加yum源git

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

導入密鑰web

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

安裝shell

yum install -y jenkins

新版本的 gitlab 服務端口爲 8080,爲了避免和 gitlab 的服務端口衝突,修改 Jenkins 的默認端口爲 8088。json

查看端口bash

netstat -antup|grep :80

修改端口爲8088服務器

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

數據目錄,能夠自定義
JENKINS_HOME="/var/lib/jenkins"oracle

 

2、啓動 Jenkinsssh

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"

  

3、配置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/

  

4、設置 gitlab 用戶 root 能夠經過 ssh 公鑰直接下載代碼

生成的SSH密鑰, 一路回車,注意我這裏生成的是 root 用戶,固然你也能夠指定用戶

ssh-keygen

查看公鑰

cat ~/.ssh/id_rsa.pub

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

git clone git@192.168.1.222:develop/web.git

  

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

cat ~/.ssh/id_rsa

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

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

 

6、在 Jenkins 上添加項目

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

而後 描述 根據須要自已填寫,源碼管理選擇 git,並添加倉庫URL爲 git@192.168.1.222:develop/web.git。
而後選擇憑據爲咱們剛剛添加的 root,而後點保存。

 

7、自動部署 web 項目

能夠經過執行命令或腳本方式進行代碼發佈,這裏演示使用 root 用戶在各服務器上發佈代碼。
固然也能夠建一些普通用戶,但須要保持全部服務器上的用戶ID一致,避免權限問題。

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

一、首先要實現 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用戶免密碼登錄到那臺機器上。

二、咱們在 jenkins 的主機上,先 clone 一份代碼

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

三、而後編寫 shell 執行命令,如 sync.sh

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

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

sudo ssh root@192.168.1.222 /data/sync.sh

五、而後點擊 項目的 當即構建,看代碼是否同步到了111主機上。

 

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

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

二、生成身份驗證令牌

openssl rand -hex 16

三、在 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

四、在 gitlab 項目 -> 設置 -> 集成 -> 增長web鉤子

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

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

五、點擊測試,push events,若是返回 201 ,說明成功了。

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

 

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

Build Pipeline 插件做用: 這個插件可以以流程圖的形式展現各個 job 的順序,依賴關係等等。

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

在 Display Options 中

No Of Displayed Builds 選擇 3 ,

Refresh frequency (in seconds) 填入 3。

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

相關文章
相關標籤/搜索