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