環境准備
安裝JDK
安裝 JDK 之前寫過一篇文章,本文就不具體講了:
注意:Java版本不能是gcj
,會導致Jenkins有問題,centos7搭建jenkins小記文章中提到的java版本問題導致CentOS下的Jenkins有問題。
安裝Git
yum install git
規避磁盤過滿問題
1.方法1:創建軟連接,准備較大空間
/data
掛在了較大空間,然后在其中創建相關目錄:
mkdir -p /data/jenkins
ln -s /data/jenkins/ /var/lib/jenkins
chown -R root:root /data/jenkins
2.方法2:丟棄構建
設置構建最大保留天數或者保留個數,實現自動刪除構建結果。
參考:
CentOS
離線安裝-推薦
## http://pkg.jenkins-ci.org/redhat-stable/
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm ## 下載(也可以Windows下載再轉過來)
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key ## 導入公鑰,發現離線安裝,不需要導入公鑰就能安裝
rpm -ih jenkins-2.7.2-1.1.noarch.rpm
自動安裝完成之后:
/usr/lib/jenkins/jenkins.war
WAR包/etc/sysconfig/jenkins
配置文件/var/lib/jenkins/
默認的JENKINS_HOME目錄/var/log/jenkins/jenkins.log
Jenkins日志文件
在線安裝
# 添加Jenkins源
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 repolist # Update your package manager list to get the latest packages
# 安裝
yum install java-1.8.0-openjdk jenkins
service jenkins start # 啟動
基於Tomcat安裝
- 在Tomcat官網下載tar包
- 將tar包拷貝至
/usr/local
目錄並解壓:cd /usr/local/ && tar zxvf apache-tomcat-9.0.12.tar.gz
- 訪問jenkins官網下載長期維護版本的
jenkins.war
拷貝至/usr/local/apache-tomcat-9.0.12/webapps
,啟動tomcat:`cd /usr/local/apache-tomcat-9.0.12 - 訪問:
http://IP:8080/jenkins
管理員密碼訪問:
cat /root/.jenkins/secrets/initialAdminPassword
基於這種方式安裝的Jenkins位置處於/root/.jenkins
,因此,為了避免Job占用空間過大,需要執行如下命令創建軟連接:
ln -s /data/jenkins_jobs/ /root/.jenkins/jobs
Jenkins設置
為了不因為權限出現各種問題,這里直接使用root
## sudo vim /etc/sysconfig/jenkins
JENKINS_USER="root" ## 原值 "jenkins" 必須修改,否則權限不足
JENKINS_PORT="8080" ## 原值 "8080" 可以不修改
修改目錄權限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
Jenkins 啟動
啟動Jenkins:
sudo systemctl enable jenkins # 開機自啟動Jenkins
sudo systemctl start jenkins # 啟動Jenkins
查看服務細節:
systemctl status jenkins.service
驗證Jenkins Server訪問鏈接:
telnet IP 8080
如果訪問有問題,需要把防火牆關了:
systemctl stop firewalld
systemctl disable firewalld.service #重啟不自動開啟
通過如下兩個命令查看防火牆是否關閉:
systemctl list-unit-files|grep firewalld.service
iptables -t nat -S
Centos安裝參考:
- How to install Jenkins on CentOS 7
- Jenkins 持續集成綜合實戰
- CentOS 7 安裝 Jenkins-提到配置權限
- 以root用戶運行jenkins中shell命令
- CentOS 安裝 Jenkins
Ubuntu
- 下載
https://pkg.jenkins.io/debian/jenkins.io.key
apt-key add jenkins.io.key
以上兩步,可以合二為一:
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
apt-get update
apt-get install jenkins
/etc/init.d/jenkins start
。或者service start jenkins
。啟動Jenkins。- 通過:
http://{ip}:8080
訪問jenkins。
cat /var/lib/jenkins/secrets/initialAdminPassword
得到默認密碼填入下面的密碼框中
安裝好之后,可以修改相關配置改變默認端口:
/etc/default/jenkins
Ubuntu安裝參考:
- how to change port number for Jenkins installation In Ubuntu 12.04
- How to install Jenkins on Ubuntu 16.04
Jenkins master優化
增加同時打開文件句柄數
增加同時打開文件句柄數,linux默認一個進程能同時打開的文件句柄是1024個,在jenkins master肯定是不夠的,需要調整成65535
CentOS系統,修改/etc/security/limits.conf
,在文件最后增加一行:
root - nofile 65535
重啟后生效,可以通過命令ulimit -a
查看
設置tomcat 日志循環,限制日志的大小
Jenkisn配置
Jenkins用戶
admin賬號初始密碼:
cat /var/lib/jenkins/secrets/initialAdminPassword
Jenkins使用
Jenkins關閉、重啟、重載
http://localhost:8080/[exit/restart/reload]
參考:
Jenkins Job指定執行節點
- 關聯job,進入job的配置頁面,勾選
Restrict where this project can be run
利用了標簽的功能
參考:
Jenkins升級
可以通過系統管理(System management)--> 系統信息(System Info)查找.war
的文件
executable-war /usr/lib/jenkins/jenkins.war
先列出官網地址:https://jenkins.io/download/
升級之前,停止Jenkins服務(記得備份原來的jenkins.war,以防萬一)
http://jenkinsIP:port/exit
從官網下載最新的war包,然后替換掉上面路徑下的war。
替換完成后,重啟:
systecmctl start jenkins # centos
service jenkins start # ubunutu
參考:
Jenkins插件
- dashboard view:Dashboard-view自定義jenkins任務集視圖
- Workspace Cleanup:這個插件可以再每次build之前清空workspace
- Monitoring:監控一些機器的狀態信息了
- Folders:新建任務時,支持創建文件夾,可嵌套地定義文件夾來級別 views / jobs
- SSH Slaves:添加節點時,可以采用SSH方式鏈接;
- PostBuildScript:根據 Build 狀態執行腳本
- Post Build Task
- Pipeline:必須 【請勾選】
- Build Pipeline:用於創建pipline視圖
- Configuration Slicing:主要功能是可以批量設置job的屬性,比如設置保留多少天的構建記錄,神器之一,有效解決Jenkins磁盤過滿的問題
- Multijob:配置Multijob必備的插件;
- Timestamper
- Build Timeout plugin:構建超時插件
- Custom Tools
- Git:Git插件 【請勾選】
- Git Parameter
- GitLab
- Gitlab Hook
- Gitlab Authentication
- Parameterized Trigger plugin:插件可以讓你在構建完成時觸發新的Job構建,並以各種方式為新Job構建指定參數。
- Node and Label parameter
- Publish Over SSH
- Groovy plugins:並發任務解決
- Windows Slaves Plugin:連接Windows Slaves,默認安裝了
- Matrix Authorization Strategy Plugin:矩陣形式認證策略插件,默認安裝了
插件使用參考:
- jenkins常用一些插件
- thoughtworks-第二話:Jenkins必備插件安裝
- Jenkins常用插件介紹
- 小團隊持續集成之實踐【6】 - Jenkins - 安裝與插件篇
- Jenkins持續集成平台搭建
Jenkins Slave
Slave機器上需要安裝好git、配置好Java環境(尤其是一些類似JAVA_HOME的變量)。
通過SSH連接node--推薦
- 先安裝
SSH Slaves
插件,這樣在新增節點時,ssh配置將更加友好。 - 點擊
Credentials
, 點擊Jenkins
->Global credentials
->Add Credentials
,Username
和Password
表示執行機的賬號和密碼。 - 新建節點,「啟動方式」 選擇
Launch slave agents via SSH
。Credentials
選擇剛剛新建的鑰匙,Host Key Verification Strategy
選擇Manually trusted Key Verification Stragegy
。
最后Launch agent
即可;
通過JNLP連接node
該方法比較麻煩,不詳細介紹了。
注意:需要下載兩個文件到agent機器上:
agent.jar
slave-agent.jnlp
參考:
Jenkins FAQ
Q1: 忽略Jenkins升級提醒
對於輕微強迫症的我來說,看着升級提醒,還不能叉掉,實在忍不了,Google之后,有解決方法:
Manage Jenkins => Configure System => Administrative monitors configuration
系統管理-》系統設置-》管理監控配置
去掉“Jenkins更新通知”
UnCheck "Jenkins Update Notification" and apply
Q2: Cannot run program "java": error=2, No such file or directory
雖然登錄到master機器或者執行機上,java
都配置好了,但是仍然遇到了錯誤,后來看到一篇博客中提到的方法,在usr/bin
下創建了一個Java的軟連接,就解決了。
ln -s /usr/java/jdk1.8.0_171/bin/java /usr/bin
Q3: jenkins.JenkinsException: Error in request. Possibly authentication failed [500]: Internal Server Error
在JJB項目中,發生了上面的錯誤,定位問題了半天,發現可能是Jenkins本身出問題了,而不是項目出問題。以前運行OK的Jenkins怎么突然發生這個問題了呢?可能是如下原因造成:
var/lib/jenkins/jobs
:目錄下Job占據過多空間。在Jenkins中的節點管理里查看master機器的
剩余磁盤空間`也可以觀察到。
du -ah --max-depth=1
/etc/rc.local
是啥?
參考:
Q4: starting jenkins bash /usr/bin/java permission denied
解決辦法主要分了兩步:
- 將原本位於
/root/buildbox/javaxxx/
下的目錄移到了/usr/java/
下,重新配置java環境; - 在
vim /etc/init.d/jenkins
中的candidates
字段補充上java路徑/usr/java/jdk1.8.0_151/bin/java
。
參考:
Q5: 執行Jenkins服務器界面運行一段時間后就會卡死,界面顯示空白
原因:tomcat的日志(/home/apache-tomcat-8.0.30/logs)查看catalina.out日志,得知是java虛擬機內存空間溢出。
解決:到后台tomcat的bin目錄下,修改 tomcat的啟動腳本:startup.sh,在最上面添加 export JAVA_OPTS=“-XX:MaxPermSize=1024m -Xms1024m -Xmx3096m”
Q6: 構建完成后需要清除workspace
需要安裝“Workspace Cleanup Plugin插件”,在構建任務配置時,可以在“增加構建后操作步驟”中選擇Delete workspace when build is done
Q7: Linux環境變量問題,沒有加載/etc/profile文件,獲取不到需要的環境變量。
添加節點時,Prefix Start Slave Command
選擇輸入 source /etc/profile &&
加一個前置動作。注意&&
之后要有空格!!!
Q8:Jenkins定時構建用法
Q9:Error 403 No valid crumb was included in the request
- jenkins 出現“Error 403 No valid crumb was included in the request ”的解決方案https://blog.csdn.net/wanglin_lin/article/details/73849146
Q10:Jenkins Master-Slave: Key exchange was not finished, connection is closed
掛載執行機時,報錯,通過編輯 /etc/sshd_config
文件,注釋 MACs 和 Kex 所在的行,解決了問題,記得注釋之后,systemctl restart sshd
。
Q11:清理過期的 Jobs
#clear jenkins jobs logs
@hourly find /var/lib/jenkins/jobs/ -mindepth 1 -maxdepth 1 -mtime +30 -type d -exec rm -rf {} \; -o -type f -exec rm -rf {} \;
參考:
說明
博客原文:CICD-Jenkins搭建筆記一