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 次的構建結果,固然也可根據須要自已填寫。