一栖博、概述
1.1 什么是Jenkins
- Jenkins 是一個開源持續(xù)集成的工具捷泞,是由JAVA 開發(fā)而成。
- Jenkins 是一個調(diào)度平臺,本身不處理任何事情假瞬,調(diào)用插件來完成所有的工作践磅。
1.2 Jenkins作用圖
二蛉艾、Jenkins快速部署
Jenkins部署可參考Jenkins官方安裝文檔
2.1 安裝JDK環(huán)境
[root@jenkins ~]# yum -y install java
[root@jenkins ~]# rpm -qa java-1.8.0-openjdk
java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
2.2 部署Jenkins(LTS版)
#下載jenkins源
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#安裝jenkins
[root@jenkins ~]# yum install jenkins -y
[root@jenkins ~]# rpm -qa jenkins
jenkins-2.319.3-1.1.noarch
#啟動jenkins并設(shè)置開機自啟
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on #這里并沒有報錯照棋,只是說明jenkins通過chkconfig設(shè)置開機自啟
2.3 jenkins目錄結(jié)構(gòu)
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins #jenkins啟動與停止腳本
/etc/logrotate.d/jenkins #jenkins日志切割配置文件
/etc/sysconfig/jenkins #jenkins配置文件
/usr/lib/jenkins #jenkins的war包目錄
/usr/lib/jenkins/jenkins.war #war包(升級jenkins替換war包即可)
/usr/sbin/rcjenkins #jenkins啟動與停止腳本(軟鏈接)
/var/cache/jenkins #jenkins緩存目錄
/var/lib/jenkins #jenkins主要配置,插件目錄
/var/log/jenkins #日志文件目錄
2.4 Jenkins主配置文件
[root@jenkins ~]# egrep -v "^$|^#" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins"
#jenkins配置泳梆、插件目錄
JENKINS_JAVA_CMD=""
#運行Jenkins的JAVA可執(zhí)行文件
JENKINS_USER="jenkins"
#運行jenkins的用戶
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
#運行Jenkins時傳遞給java的選項
JENKINS_PORT="8080"
#jenkins監(jiān)聽的端口
JENKINS_LISTEN_ADDRESS=""
#jenkins監(jiān)聽的ip鳖悠,默認(rèn)0.0.0.0
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
#這四項都是https的配置
JENKINS_HTTP2_PORT=""
JENKINS_HTTP2_LISTEN_ADDRESS=""
#http2的配置
JENKINS_DEBUG_LEVEL="5"
#日志運行級別,越大顯示與詳細(xì)
JENKINS_ENABLE_ACCESS_LOG="no"
#訪問日志
JENKINS_HANDLER_MAX="100"
#HTTP工作線程的最大數(shù)量
JENKINS_HANDLER_IDLE="20"
#最大空閑HTTP工作線程數(shù)
JENKINS_EXTRA_LIB_FOLDER=""
#將jar文件添加到Jetty類加載器的文件夾优妙,默認(rèn)關(guān)閉
JENKINS_ARGS=""
#添加任意的參數(shù)到j(luò)enkins
2.5 解鎖jenkins
瀏覽器訪問10.0.0.76:8080
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
d0648f37d6324b118484ad5ca1c50313 #將次內(nèi)容復(fù)制到上圖的管理員密碼中繼續(xù)
開始使用時先修改以下密碼
用戶名:admin
密碼:12345678
2.6 安裝插件
三種安裝方式:
1. 聯(lián)網(wǎng)安裝 通過互聯(lián)網(wǎng)下載插件
1) 需要知道插件名稱 ( 需要知道要集成哪些軟件或服務(wù); )
2) 在哪個位置進行插件安裝 Manage Jenkins --> Mange Plugins
注意:
1) 安裝會比較的慢;需要等很久;
2) 如果出現(xiàn)警告,要看提示; 不要盲目升級,很容易造成 Jenkins連帶升級, 會出現(xiàn)其他很多插件無法使用;
2. 下載 .hpi 文件安裝
https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/git.hpi
3. 導(dǎo)入插件
將此前已經(jīng)安裝好的插件; 備份下來; 然后恢復(fù);
問題: 插件存儲在哪個路徑下: /var/lib/jenkins/plugins/
三乘综、jenkins與shell集成
通過運行jenkins選擇
dev #開發(fā)環(huán)境
prod #生產(chǎn)環(huán)境
jenkins執(zhí)行腳本
case "$env" in
dev) echo "部署到測試環(huán)境" ;;
prod) echo "部署到生產(chǎn)環(huán)境" ;;
esac
四、jenkins與gitlab集成
4.1 與gitlab集成全流程
- 書寫并提交代碼:開發(fā)提交代碼至Gitlab
- 插件(gitlab) Jenkins安裝gitlab所需插件
- 創(chuàng)建任務(wù):Jenkins創(chuàng)建freestyle項目套硼,然后配置gitlab倉庫項目對應(yīng)地址卡辰。
3.1 在Jenkins服務(wù)器上解析gitlab地址
3.2 在jenkins上面創(chuàng)建 密鑰對 : 公鑰發(fā)gitlab項目對應(yīng)的用戶, 私鑰jenkins web頁面添加保存
3.3 配置gitlab地址和分支 - web:jenkins構(gòu)建
4.2 全流程實施
這里使用gitlab上的zhibo.html代碼
安裝插件
Git client plugin #git 客戶端插件為 Jenkins 插件提供了 git 應(yīng)用程序編程接口 (API)
Git plugin #git 插件為 Jenkins 項目提供了基本的 git 操作
GitLab Authentication plugin #GitLab OAuth 插件提供了一種通過將身份驗證和授權(quán)卸載到 GitLab 來保護 Jenkins 實例的方法
GitLab Plugin #此插件允許 GitLab 在提交代碼或打開/更新合并請求時觸發(fā) Jenkins 中的構(gòu)建。
Credentials Plugin #在jenkins中存儲認(rèn)證的憑證
Generic Webhook Trigger #允許gitlab自動觸發(fā)jenkins構(gòu)建項目
在jenkins上配置gitlab的域名解析
[root@jenkins ~]# echo "10.0.0.75 gitlab.xiaoyu.com" >> /etc/hosts
jenkins與gitlab密鑰驗證
#在jenkins上生成密鑰對
[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1TKJUJ0JIjyF0DAJzYdMAdm01S4khByDxJNfmFDFZ50 root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
|B^&XB=+.+o.o |
|+=X*B+.= E+o |
| ++.oo . = . |
| .. . . o |
| . S |
| |
| |
| |
| |
+----[SHA256]-----+
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub #這個是公鑰
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCVxy+TIG7OqUiPSXsoxrQD/A7awoVx7vta5eepZO8BdRjsVsws1JbLCJ7wvGZro+vhLikNkAMlcs7YFpvLYr9T3IfIr4tk7BP1BzMu+umuhGDoB5HF3orBDgcDIwyqVkGlg7pAP89fnwCrYAcQ9Q9/hGRpLeKFCAma6br3UTVQXg84zZAkv4fAamtL88/chiAGcLdRAxNbghHXsRbuUpALNXMC7xfBjDbcrn499hClKFfzM5PRST/ZYgncaLvDLiBNSykZb6mXUwMdwgh0ZCcfv2Ab2uGz2ITOvuV7vs9QIis9SBZ+zutlyTqhNJz/oyFkx98Jgdtcl7eyy/f4zsIH root@jenkins
[root@jenkins ~]# cat /root/.ssh/id_rsa #這個是私鑰
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAlccvkyBuzqlIj0l7KMa0A/wO2sKFce77WuXnqWTvAXUY7FbM
LNSWywie8Lxma6Pr4S4pDZADJXLO2Baby2K/U9yHyK+LZOwT9QczLvrproRg6AeR
xd6KwQ4HAyMMqlZBpYO6QD/PX58Aq2AHEPUPf4RkaS3ihQgJmum691E1UF4POM2Q
JL+HwGprS/PP3IYgBnC3UQMTW4IR17EW7lKQCzVzAu8XwYw23K5+PfYQpShX8zOT
0Uk/2WIJ3Gi7wy4gTUspGW+pl1MDHcIIdGQnH79gG9rhs9iEzr7le77PUCIrPUgW
fs7rZck6oTSc/6MhZMffCYHbXJe3ssv3+M7CBwIDAQABAoIBAFh3vJwUjh63Usp/
xqVBKNcprMR+HUA8vm7kWT9vBNVBiyUd55+bOi5WuzrKrVxrCEqLb2g5ZgJam957
DC7H9ubb3cAmIBnOb8NNK2hWgGy6eFrVDb9oQWDinjW2ICcEp+XRttN4XU7HpieT
otjbRvo1AvI1ThTxuGquH+cxKmJ7JQJCcVK2fT7U2O2abdXurOmZt2eMZWxpv26B
U2MNo9RTfRL9/TovXoy6PCXelaeUwG+mNIbvzqbp0P/QJIbUl71eLvC2NF3eMQG3
y1dCKJ5pqpVJRqE4dQPtfAdQebXCb79Tx7OYPrnADYKWi3EzZBnfLDqHxyglGNHI
0Sn0V0ECgYEAxVub7c2yGzS8sYjOn5pRrFXQ2rOlDBvpe+b568rczfs2dnKK/8CD
e/YRQitmOSkvvFfddB+m7/rMsomC40RYfAgEGbfMaR5t2cDlSoU3KcZ7vyNflee8
LFiTtCx43lAutM8UAF6iZsOxmzvEy16efQA9055V8ZkcjN4lpUeZd1ECgYEAwkhV
JnPVrKH9v3W/afNRfemIv5L1lcJb+CwZBPAOB5F5rhnVluKfTz/PFGspZ7tjyFK3
6BT2mCXYTsgrj4SiMyhJFOrbDCyI2P+waakyhOdlFdxSvnfgd6Wzn/UvDXz+caTf
N9Fe1G3UOZm1MSO+cLHrXWzdT03r+8PGZ4TZfdcCgYA+3zZHhbXtsNlD/X9FnRXT
vurwITa9Ks8w555Kna/F9vecuFTLsPqyLOvGlqjUIOjSKXOlIMg/vzgi0GfgGs/N
g4g64TC/dDAupKLnIJU4O8EEXTKAQPjTb8xuI5TFzelzNFz82SkHb+ROvbWtzBDV
ZZRMrC5Y7xwHTGXVx39+YQKBgDk0lSXyW4suU4npgMgQpgEeH27RNdC33t6vFVrX
2DmwQxTZdIOuDNyH3FCV0SZDDflxKceDTKy2D//6fqEOm7fWd9ZZ5M+r2UuT1fz2
nfJ2M9SBADgnEggI2WATEJy3HjCWLEfCNVr1T9T6BlkGvk9ug/AJWwy70+1Y0vWu
L2AXAoGAIIg3j3awtS/JT4G745isOFEjgh6p3IvyiGRyQ7rh5BOwfcsUuk5rXWig
JL8PU6Ih4026n+TI8ZNDDj0tQmGF/3xzBPqF1K2nze/TsnR0cY0UXOhHFSuAEd3b
O/MBiaXa/0ezRYU2h4uqPT3tn6DQ/1D5ZDUoQ/Mzem95RJNFzl0=
-----END RSA PRIVATE KEY-----
將公鑰放到gitlab上
私鑰配置在jenkins上
注意這里有一些報錯熟菲,有一個報錯沒記下來看政,原因是jenkins服務(wù)端我沒有安裝git造成的
進行構(gòu)建,查看控制臺輸出