20141119 chenxin
20180726 chenxin updatecss
四個環境,開發/測試/預發佈/生產.
文中涉及的最新腳本,請查看西部戰紀部署文檔腳本備份文件.
涉及的腳本,如CI,CD等,除本文檔外,其餘部分參考備份文檔.
安裝Jenkins
docker 鏡像方式(不推薦)
To use the latest LTS: docker pull jenkins/jenkins:lts (LTS爲長期支持版,每12周發佈1次)
To use the latest weekly: docker pull jenkins/jenkins (每週發佈)
docker search jenkins
docker pull jenkins
docker run -d -p 10080:8080 jenkins 啓動容器(會自動啓動Jenkins服務)
docker container exec -it 7b5cb169167c /bin/bash 進入容器
目錄結構docker方式
/usr/local/bin/jenkins.sh #啓動腳本
/usr/local/bin/jenkins-support
/usr/share/jenkins/jenkins.war #war包存放位置
/var/jenkins_home/ #Jenkins的主目錄
yum方式(推薦)
JDK的安裝方式,請參考對應筆記/文檔內容.
cd /etc/yum.repos.d/
wget http://pkg.jenkins.io/redhat/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
systemctl start jenkins
目錄說明
/etc/sysconfig/jenkins #主文件(默認端口8080->13972)運行用戶,端口,HTTPS端口,綁定IP,AJP端口,HTTP最大併發數,HTTP最大等待數,JENKINS_HOME路徑配置JENKINS_HOME="/var/lib/jenkins"
/etc/rc.d/init.d/jenkins #啓停腳本,jenkins把java路徑遍歷寫死在這裏了,須要修改(將java路徑註釋掉,添加本身的),candidates=處,增長一行 /usr/local/jvm/bin/java
/etc/logrotate.d/jenkins #日誌翻滾配置
/var/log/jenkins 日誌
/var/lib/jenkins #yum後爲空,以後會做爲數據存放目錄.是jenkins的HOME目錄
/var/lib/jenkins/jobs 任務
/usr/lib/jenkins #war包,/usr/lib/jenkins/jenkins.war WAR存放路徑
/var/cache/jenkins/war (圖片,css,js等) 其餘數據存放路徑
/var/lib/yum/repos/x86_64/latest/jenkins
/var/cache/yum/x86_64/latest/jenkins
頁面進行插件和基本配置的安裝
http://192.168.31.129:13972/ 根據頁面提示,到對應的文件目錄下去找pw,進行認證,以後開始安裝
在安裝過程當中,若是有沒法處理的報錯(好比安裝過程當中,人都開了,鏈接中斷後,報錯.在url後添加"restart",從新啓動Jenkins並安裝)
安裝選擇默認安裝(大多數用戶的選擇)
默認8080端口:
vim /etc/sysconfig/jenkins #主配置文件(須要經過頁面方式安裝完成纔會生成該文件)
JENKINS_PORT="13972"
用戶配置與登錄 權限重置
配置用戶
http://13.251.138.240:13972/ 或域名方式: http://xbzj-taihe-bei-jks.soomigame.com:13972/
admin user: chenxin
pw: jks123....
chenxin@soomigame.com
LDAP認證
FreeIPA LDAP 用戶認證請參考FreeIPA筆記
jenkins配置權限不對致使沒法登錄的重置方法
一旦因爲用戶配置錯誤,致使用戶沒法登錄,或者登錄後權限不對,沒法切回管理員權限,則只能經過這種重置的方式了.
找到/var/lib/jenkins/config.xml 文件
替換:
一、
這個權限對應「任何用戶能夠作任何事(沒有任何限制)」
二、
這個權限對應「登陸用戶能夠作任何事」
三、
這個權限對應 test用戶能夠是管理員、打標籤權限。
安全矩陣
Overall是全局權限,slave是集羣權限,job,run,view,scm是業務權限。overall中的read要勾選,不然用戶登錄後什麼也看不到。
最大的權限是Overall的Administer,擁有該權限能夠幹任何事情。
憑據: 這裏保存這在Jenkins中配置的git svn或其它的用戶名密碼之類的都在這個裏面,這裏能夠設置對應角色的權限.
Agent: 這個是配置Jenkins結點的權限,反正如今用不到, 我也不會。
Job: 任務的,對應權限
Run: 這個不知道,反正問度娘無果
View: 這個是視圖權限,就是把某個項目關聯到類於瀏覽器的選項卡上面的,項目多用的上,項目少基本就不用去分類
SCM: 這個貌似是對git svn等部署設置定時部署任務的,也用不到,也沒測試過
ps:若是有個用戶被賦予了Overall的Read,並無被賦予Job的Read權限,那麼該用戶就沒法訪問job。緣由:沒有權限。
其餘說明
啓用矩陣認證方式後,保存時,提示:
Builds in Jenkins run as the virtual Jenkins SYSTEM user with full Jenkins permissions by default. This can be a problem if some users have restricted or no access to some jobs, but can configure others. If that is the case, it is recommended to install a plugin implementing build authentication, and to override this default.
No implementation of access control for builds is present. It is recommended that you install Authorize Project Plugin or another plugin implementing the QueueItemAuthenticator extension point.
備份,遷移,升級
遷移/備份
首先找到JENKINS_HOME,由於Jenkins的全部的數據都是以文件的形式存放在JENKINS_HOME目錄 (從/etc/sysconfig/jenkins的配置文件中可知,通常配置的是/var/lib/jenkins/xxx)中。因此不論是遷移仍是備份,只須要操做JENKINS_HOME就好了.壓縮打包,存放.
遷移:建議將JENKINS_HOME打包後在拷貝.
能夠作個jenkins的定時計劃任務本地備份與遠程備份,防止誤刪除掉jenkins的job或者是project等.
注意:/var/cache/jenkins/war/這個文件夾下是否有須要備份的內容.包括images,css等本身在服務器上直接修改的文件.
備份Jenkins案例
這裏使用rsync,主要是爲了保持備份的屬性,若是使用scp或cp有時會致使文件屬性的改變而致使jenkins異常。
建立備份目錄
[root@linux-node2 ~]# mkdir /data/backup/jenkins -p
備份/var/lib/jenkins目錄
[root@linux-node2 ~]# rsync -raz --delete --progress /var/lib/jenkins /bak/jenkins/
刪除/var/lib/jenkins/
[root@linux-node2 ~]# rm -rf /var/lib/jenkins/
[root@linux-node2 ~]# service jenkins restart
Restarting jenkins (via systemctl): Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details. [FAILED]
[root@linux-node2 ~]# service jenkins status
JENKINS_HOME directory does not exist: /var/lib/jenkins
恢復備份
[root@linux-node2 ~]# rsync -raz --delete /bak/jenkins/jenkins /var/lib/
[root@linux-node2 ~]# service jenkins restart
備份腳本
[root@ip-10-0-0-200 ~]# cat jenkins_bak.shhtml
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
umask=022
BACKUPDIR="/bak" ; [ ! -d $BACKUPDIR ] && mkdir $BACKUPDIR -p
Datadate=date +%Y%m%d%H%M
File=jenkinsjava
cd $BACKUPDIR
find $BACKUPDIR -mtime +7 -name "*.gz" -exec rm -rf {} ;
rsync -raz --delete --progress /var/lib/jenkins /bak/jenkins/ && tar czf "$File"_"$Datadate".tar.gz $File
升級版本
推薦: 直接在控制檯點按升級按鈕(升級前作好備份工做).
若是當前版本並不是最新版本的話,在jenkins的全局配置中,會有相應的版本升級提示信息,直接點擊也能夠完成升級.
升級前,請測試該版本和你本地數據的兼容性。如何測試:將JENKINS_HOME拷貝一份到新的機器,用新版的程序啓動。測試對應的插件和配置。
升級Jenkins的war包
Jenkins的開發迭代很是快,每週發佈一個開發版本,長期支持版每半年更新一次(ps:大版本更新)。如此頻繁的更新,怎麼升級呢?war:下載新版的war文件,替換舊版本war文件。重啓便可.(WAR存放路徑 /usr/lib/jenkins/jenkins.war)
二進制:卸載舊版本,安裝新版本便可.yum install jenkins.Jenkins程序下載地址:http://mirrors.jenkins-ci.org/
其餘方式升級Jenkins版本
下載Jenkins的最新war包
docker container cp ./jenkins.war container_id:/usr/share/jenkins/jenkins.war_2.121.2 #將war包拷貝到docker對應目錄
docker container exec -it --user root 7b5cb169167c /bin/bash #以root身份進入docker容器
/usr/share/jenkins/jenkins.war #將最新的war包替換原有包
http://192.168.31.129:10080/restart #從控制檯進行重啓Jenkins
控制檯->系統管理->關於Jenkins2.121.2 #確認版本號node
CD過程當中用到過的腳本案例
發佈上傳好的程序文件到生產服
在Jenkins上,以xbzj用戶名義(sudo)調用數據管理機的rsync腳本(rsync是用ssh的密鑰認證)
sudo -u xbzj /home/xbzj/server-bin/server-ip/rsync-codex.fight.sh
Jenkins的機器須要配置好私鑰,生產服配置好公鑰.以便Jenkins機器將文件上傳過去(rsync).
腳本文件例如:
cat rsync-codex.fight.shlinux
dir=codex.fight
cd /home/xbzj/server-bin/server-ip
cat rsync-ip.txt |grep "$dir\ "|awk '{print $3,$2}' > ./$dir.txt
cat ./$dir.txt |while read line
do
ip=echo "${line}"|awk '{print $1}'
#class=echo "${line}"|awk '{print $2}'
echo "++++++++++++++ 開始同步服務器 $ip 上的目錄 $dir +++++++++++++++++ "
#echo $class
rsync -vzrtopg -e "ssh -p 4399" --delete --progress --exclude "logs/" /home/xbzj/server-bin/game-func/game-classes/$dir xbzj@$ip:/home/xbzj/game-func/game-classes/
if [ $? == 0 ];then
echo " 😃 😃 😃 成功 😃 😃 😃"
else
echo " 😦 😦 😦 失敗 😦 😦 😦"
fi
done
發佈資源文件到S3
S3資源文件的同步:
cat sync-local-to-s3.shgit
/usr/bin/aws s3 sync /home/xbzj/s3-cloudfront/xbzj-taihe-s3-01-cdn/test s3://xbzj-taihe-s3-01-cdn/test --delete --acl public-read
if [ $? == 0 ];then
echo " 😃 😃 😃 成功 😃 😃 😃"
else
echo " 😦 😦 😦 失敗 😦 😦 😦"
fi
/usr/bin/aws s3 sync /home/xbzj/s3-cloudfront/xbzj-taihe-s3-01-cdn/xbzj-taihe-bei s3://xbzj-taihe-s3-01-cdn/xbzj-taihe-bei --delete --acl public-read
if [ $? == 0 ];then
echo " 😃 😃 😃 成功 😃 😃 😃"
else
echo " 😦 😦 😦 失敗 😦 😦 😦"
fi
產品啓動和中止
如下是遠程調用遊戲進程啓動和中止.
步驟:
在Jenkins上,以xbzj用戶名義(sudo)調用數據管理機的腳本,腳本內容是經過xbzj用戶ssh密鑰認證遠程執行各遊戲服上的啓停腳本文件.
任務名稱 構建執行的shell命令
start-01-xbzj-taihe-codex.log.receiver sudo -u xbzj /home/xbzj/server-bin/server-ip/manage-codex.log.receiver.sh --start
start-02-xbzj-taihe-codex.payments sudo -u xbzj /home/xbzj/server-bin/server-ip/manage-codex.payments.sh --start
...
stop-01-xbzj-taihe-codex.login sudo -u xbzj /home/xbzj/server-bin/server-ip/manage-codex.login.sh --stop
stop-02-xbzj-taihe-codex.gateway sudo -u xbzj /home/xbzj/server-bin/server-ip/manage-codex.gateway.sh --stop
...
cat manage-codex.fight.shweb
cd /home/xbzj/server-bin/server-ip
dir=codex.fight
action=$1
if [ "$action" == "--start" ];then
action1="啓動"
else
action1="中止"
fi
exe_path=$(echo $dir|awk -F '.' '{print $2}')sql
cat rsync-ip.txt |grep "$dir\ "|awk '{print $3,$2}' > ./${dir}_manage.txt
cat ./${dir}_manage.txt |while read line
do
ip=echo "${line}"|awk '{print $1}'
#class=echo "${line}"|awk '{print $2}'
echo "++++++++++++++ 開始 $ip 上的 $dir $action1 操做 +++++++++++++++++ "
/usr/bin/ssh $ip -p 4399 -n "cd /home/xbzj/game-func/game-script/$exe_path && ./Manage.sh $action;sleep 3;tail nohup.out";
pwd
#echo $class
if [ $? == 0 ];then
echo " 😃 😃 😃 成功 😃 😃 😃 請檢查控制檯輸出信息,肯定成功"
else
echo " 😦 😦 😦 失敗 😦 😦 😦 "
fi
donedocker
CI案例 (maven,nexus私有倉庫) - 採用腳本編譯的方式(非Jenkins插件)
參考
maven全局配置文件settings.xml詳解
http://www.cnblogs.com/jingmoxukong/p/6050172.html
maven指令介紹(Maven學習:經常使用mvn命令)
https://blog.csdn.net/lfsfxy9/article/details/12200915
nexus搭建私有倉庫
http://www.javashuo.com/article/p-azwwcwin-kx.html
目錄
cd /home/jenkins/build-dir/svn-download/
svn co svn://192.168.31.31/project_a/server
svn co svn://192.168.31.31/project_a/tools
maven配置
/usr/local/maven/conf/settings.xml
配置文件解析
settings.xml是maven的全局配置文件。而pom.xml文件是所在項目的局部配置。
Settings.xml中包含相似本地倉儲位置、修改遠程倉儲服務器、認證信息等配置。
配置優先級
須要注意的是:局部配置優先於全局配置。
配置優先級從高到低:pom.xml> user settings > global settings
若是這些文件同時存在,在應用配置時,會合並它們的內容,若是有重複的配置,優先級高的配置會覆蓋優先級低的。
配置maven加載庫後放置的本地路徑
在最後,mvn install項目的時候,會下載很是多的文件(有pom,有jar),默認放到用戶的根目錄.m2/下,相似/home/coinw/.m2/repository/.而若是採用的是Jenkins的mvn構建項目,則爲Jenkins本身權限,因此默認放置位置就變成了 /var/lib/jenkins/.m2/.
鏡像地址
倉庫
包的輸出路徑能夠加在mvn xxx 後面-DoutputDirectory="$OUT_DIR/$3/lib"
如下爲一個示例setting.xmlshell
編譯腳本-示例
[xbzj@local-test build-dir]$ cat package.sh
source /etc/profile
export JAVA_HOME="/usr/local/jvm"
export MAVEN_HOME="/usr/local/maven"
export OUT_DIR="/home/jenkins/build-dir/package"
export GAME_CONFIG_PATH="/home/jenkins/build-dir/svn-download/tools/轉表工具/csv"
export MAP_CONFIG_PATH="/home/jenkins/build-dir/svn-download/tools/轉表工具/mapConfig"
export CFG_CONFIG_PATH="/home/jenkins/build-dir/svn-download/tools/轉表工具/cfg"
export MVN="/usr/local/maven/bin/mvn"
export AGENT_LIB="/home/jenkins/build-dir/extra-jar/agent.jar"
export SERVER_CODEX="/home/jenkins/build-dir/svn-download/server/codex"
cd /home/jenkins/build-dir
rm $OUT_DIR -rf
mkdir $OUT_DIR
cd $SERVER_CODEX
rm -rf $SERVER_CODEX/codex.proto/src/main/java
svn up $SERVER_CODEX
svn up $GAME_CONFIG_PATH
svn up $CFG_CONFIG_PATH
for i in ls ./*.sh
;do
echo "當前目錄:"
pwd .
cp -aprf $i $OUT_DIR
done
$MVN -f=pom.xml clean install -q -P product -U -Dmaven.test.skip=true
$MVN -f=codex.proto/pom.xml clean protobuf:compile install -q -P product -U -Dmaven.test.skip=true
echo "公共包 完成"
function COPY_CFG_CONFIG()
{
cp -aprf "$CFG_CONFIG_PATH" "$OUT_DIR/$1/config"
echo "$1 策劃配置 完成"
}
function SVN_UP()
{
rm -rf $1
svn up $1
}
function COPY_GAME_CONFIG()
{
if [ "$2" != "" ];then
COPY_GAME_CONFIG2 $1 $2
else
COPY_GAME_CONFIG2 $1 $1
fi
}
function COPY_GAME_CONFIG2()
{
cp -aprf "$GAME_CONFIG_PATH" "$OUT_DIR/$2/gameConfig"
echo "$1 遊戲配置 完成"
}
function COPY_MAP_CONFIG()
{
SVN_UP $MAP_CONFIG_PATH
cp -aprf "$MAP_CONFIG_PATH" "$OUT_DIR/$1/mapConfig"
echo "$1 地圖配置 完成"
}
function COPY_LIB()
{
if [ "$3" != "" ];then
COPY_LIB2 $1 $2 $3
else
COPY_LIB2 $1 $2 $1
fi
}
function COPY_LIB2()
{
$MVN -f=$1/pom.xml assembly:assembly dependency:copy-dependencies -DoutputDirectory="$OUT_DIR/$3/lib" -DincludeScope=runtime -q -P product -U -Dmaven.test.skip=true
cp -aprf "$1/target/bin.zip" "$OUT_DIR/$3/"
mkdir -p $OUT_DIR/$3/ref
cp -aprf $1/target/classes/.properties $OUT_DIR/$3/ref
cp -aprf $AGENT_LIB "$OUT_DIR/$3/lib"
for i in ls $OUT_DIR/$3/lib/*.jar
;do
echo lib/$i>> $OUT_DIR/$3/jarlist.txt
done
if [ "$2" != "" ];then
echo $2 >> $OUT_DIR/$3/Main
fi
echo "$1 編譯拷貝 完成"
}
COPY_LIB codex.gameCenter com.aly.codex.gcenter.Boot
COPY_GAME_CONFIG codex.gameCenter
echo "中心服務器 完成"
COPY_LIB codex.fight com.aly.codex.fight.Boot
COPY_GAME_CONFIG codex.fight
COPY_MAP_CONFIG codex.fight
echo "戰鬥服 完成"
COPY_LIB codex.game com.aly.codex.game.Boot
COPY_GAME_CONFIG codex.game
COPY_CFG_CONFIG codex.game
echo "遊戲服 完成"
COPY_LIB codex.match2 com.aly.codex.match2.Boot codex.match
COPY_GAME_CONFIG codex.match2 codex.match
echo "匹配服務器 完成"
COPY_LIB codex.login com.aly.codex.login.Boot
echo "登錄服務 完成"
COPY_LIB codex.gateway com.aly.codex.gateway.Boot
echo "登錄服務 完成"
echo "所有完成 請檢查"
echo "生成文件:"
ls $OUT_DIR
echo "文件大小:"
du -sh $OUT_DIR
du -sh $OUT_DIR/
echo "修改Start.sh,BuildOpts.sh文件權限"
chmod 755 $OUT_DIR/*.sh && echo "權限修改爲功"
echo
echo "所有編譯和操做完成"
加入Jenkins
visudo:
jenkins ALL=(xbzj) NOPASSWD: /home/jenkins/build-dir/package.sh,/home/xbzj/server-bin/server-ip/rsync-codex-*.sh
文件權限:
[root@MiWiFi-R3P-srv ~]# ll /home/jenkins/build-dir/
total 12
drwxrwxr-x 5 xbzj xbzj 103 Aug 23 15:42 package
-rwxr-xr-x 1 xbzj xbzj 3121 Aug 23 15:40 package.sh
drwxr-xr-x 29 xbzj xbzj 4096 Aug 22 19:32 repository
drwxr-xr-x 4 xbzj xbzj 33 Aug 22 18:48 svn-download
Jenkins任務(西部戰紀-遊戲服-CI)
sudo -u xbzj /home/jenkins/build-dir/package.sh
CICD 採用插件方式 (採用Jenkins插件 JDK GIT MAVEN 的方式)
2013 Chenxin
2019/08/22 update Chenxin
參考
jenkins插件方式CICD http://blog.51cto.com/zero01/2074341
maven經常使用命令 mvn -s /usr/local/maven/conf/settings.xml clean install
插件CICD涉及的步驟
安裝JDK(略)
安裝/配置tomcat(略)
安裝maven
Jenkins裏配置JDK(供編譯用)
Jenkins裏配置maven
安裝Maven Integration插件(Jenkins對mvn項目支持的插件,構建Job的時候第一步選擇)
構建job(構建maven項目.最重要的步驟)
配置Git項目的拉取URL和憑證(用戶名+密碼)
發佈war包
涉及的知識
maven: 構建java項目時,解決衆多依賴性問題的管理器,提升編譯打包便利性
settings.xml: maven的setting配置文件,裏面能夠配置nexus倉庫路徑(在線依賴包倉庫),默認是使用的本地環境.
pom.xml: 構建java項目的配置文件(由開發人員提交到git或給出)
安裝maven
編譯和打包都是用maven完成.
官網下載地址:https://maven.apache.org/download.cgi 截止2019/08/22,最新版本3.6.1 wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven...tar.gz
cd /opt/; tar -zxvf apache-maven-3.5.4-bin.tar.gz; mv apache-maven-3.5.4 /usr/local/maven;
檢查maven版本 /usr/local/maven/bin/mvn -version
在build那步,mvn install項目的時候,會下載很是多的文件(有pom,有jar),默認放置到 /var/lib/jenkins/.m2/.若是是腳本調用方式,則相似/home/coinw/.m2/目錄.
配置JDK
系統管理 -> 全局工具配置->別名 JDK_1.8.0_221 , 取消"Install automatically"的鉤,JAVA_HOME爲/usr/local/jvm .點擊"保存".
配置maven
系統管理 -> 全局工具配置->先配置maven的setting.xml文件的路徑. -> /usr/local/maven/conf/settings.xml
而後往下拉,找到Maven,配置maven的安裝路徑:maven安裝->新增maven->Name: Apache Maven 3.6.1;將"Install automatically"的鉤去掉,填入"MAVEN_HOME"的路徑: /usr/local/maven .點擊保存.
安裝Maven Integration插件
系統管理 -> 管理插件,安裝 Maven Integration和 Deploy to container().
安裝Maven Integration:若是沒有的話,構建任務時是沒有Maven項目的選項的.
安裝Deploy to container:非必須.發佈到tomcat的8080端口時用.須要tomcat管理admin權限.是用於發佈遠程war包的.
安裝完成,重啓Jenkins.
構建job
1.構建一個maven項目的job類型
名稱 test-201908
1.1General
->參數化構建(這裏給出以後須要用到的git項目的分支參數,好比名稱 "branch",選項"release/otc1.2"(能夠添加多個分支選項).以後在Git那步,就能夠調用這個$branch變量.
1.2源碼管理
->SVN/GIT.這裏選擇Git.
->Repositories->Repository URL爲http://47.75.218.30/gitlab/coinw/coinw-web.git ->Credentials 添加git對應的用戶名和密碼,好比用戶名gitlab+deploy-token-2,密碼xxx.
->Branches to build(分支)->Branch Specifier (blank for 'any')這裏填入"$branch"(參數化構建裏指定的分支變量名).
1.3構建觸發器
默認
1.4構建環境
默認
1.5Pre Steps(構建前執行)
因git拉取到的配置文件,是內網或開發者的本地配置.因此須要將配置文件從新導入,以便構建測試/生產環境的war包.選擇執行shell腳本,
cp -aprf /home/coinw/yure_server/project_coinw_web/deploy_webroot/config/* src/main/resources/ #配置文件
cp -aprf /home/coinw/yure_server/project_coinw_web/project_build/pom.xml . #指定的pom.xml文件(git也會拉取到該文件).
1.6Build(構建)編譯源碼並打包
->Root POM爲 pom.xml #就是Jenkins這個job的workspace的根目錄/var/lib/jenkins/workspace/test-201908/.
->Goals and options 爲 install (直接輸入mvn的參數選項)
->高級選項默認
1.7Post Steps(構建後執行)
默認
1.8構建設置
默認(能夠mail通知)
保存後嘗試構建,測試,查看控制檯輸出.
2.構建的目錄和數聽說明
構建job的時候,全部數據都會放入到/var/lib/jenkins/下(主目錄).
job/ 存放每次做業的log和xml信息.
workspace/ 存放每一個job對應的工做目錄.好比 /var/lib/jenkins/workspace/test-201908/ 爲test-201908 job的主目錄.
構建後的目錄結構
[coinw@localhost test-201908]$ pwd
/var/lib/jenkins/workspace/test-201908
[coinw@localhost test-201908]$ tree -L 2
.
├── pom.xml # 默認git拉取的時候,會有這個文件.因該文件裏的Mysql配置錯誤,因此Jenkins裏在構建前,有經過shell方式拷貝一個過來.
├── README.md
├── sql
│ └── update.sql
├── src
│ ├── main
│ └── test
└── target
├── classes
├── coinw-web-1.0.0
├── coinw-web-1.0.0.war # 構建完成後,獲得的war包.用於後面的發佈.
├── generated-sources
├── maven-archiver
├── maven-status
└── test-classes
發佈war包方式一(不推薦)
這一步最好使用自建腳本方式,若使用Jenkins的"發佈到容器"插件,須要tomcat的admin管理頁面權限.
回到Job的配置,在構建後操做那一欄點擊 「增長構建後操做步驟」 選擇 「Deploy war/ear to a container」(tomcat).
WAR/EAR files 輸入 **/*.war ,匹配全部war包->"Add Container"裏,Containers選擇Tomcat 8.x->Credentials這裏點擊"Add",輸入tomcat的用戶名和密碼.而後,Tomcat URL填寫要把war包發佈到的那臺機器的url,如 http://192.168.3.227:8080 . # 發佈到多個容器的話,這裏屢次選擇就能夠了.
這樣就能夠將war包發佈到tomcat容器裏了.
發佈war包方式二(推薦)
經過外掛腳本的方式來處理.具體略.
job的構建(2013採用過的方式)-不推薦
選擇通用型自由風格的軟件.
1.給出項目名稱,描述信息,選擇基本項等.
2.從SVN上揀出文件,jenkins會自動將揀出的文件放入/var/lib/jenkins/jobs/test02/workspace/(配置路徑).
給出svn地址的後,會報須要用戶密碼認證,給出正確的用戶名和密碼完成SVN的認證.
3.構建過程當中使用的shell腳本.rsync從jenkins主機的對應目錄下(根據本身的腳本定義)取文件上傳到生產服問題.
rsync的祕鑰配置(祕鑰直接放置到jenkins帳號的.ssh/下:/var/lib/jenkins/.ssh/).jenkins在root權限下,啓動後,java進程屬組就是jenkins的(ps axfu).
使用rsync將已經從svn上down下來的文件放入生產服的時候,務必作好ssh的認證.
/usr/bin/rsync -avz -e "ssh -p 4399" --del --exclude-from=/var/lib/jenkins/exclude.list "${WORKSPACE}/" xbadmin@103.17.41.68:/home/xbadmin/update/test02;
方法一:
jenkins帳號下的/var/lib/jenkins/.ssh/known_hosts文件內容,能夠經過其餘帳號認證後,將其餘帳號的條目手動拷貝到該文件下予以解決.不然在"構建"過程當中,會報Host key verification failed錯誤,沒法成功.
方法二:
默認jenkins帳號的shell配置以下:
jenkins❌498:498:Jenkins Continuous Build server:/var/lib/jenkins:/bin/false
在作主機認證時,能夠手動指定bash,而後接收訪問對端的主機key,完成認證,以下:
su -s /bin/bash jenkins
ssp -p 103.17.41.68 手動輸入yes.
rsync能夠排除的同步文件語法:
$ cat /var/lib/jenkins/exclude.list
admin_20120610_shijingshanruijiangkeji.*
.svn
test.*
4.構建完成後,發送郵件問題.
方法一:能夠直接在本機安裝postfix(默認通常都裝了的),service postfix start便可.郵件配置(本機啓動postfix,啓動25端口,默認就會從本機發出去.同時本地安裝個mail,以便用命令發送郵件.mail -s "subject" chenxin@xindong100.com < ./test_mail.txt)
方法二:經過jenkins的全局配置裏,配置smtp的認證,經過外網發送相關郵件.
5.正確構建部署後的控制檯輸出
Success控制檯輸出
Started by user chenxin
Building in workspace /var/lib/jenkins/jobs/test02/workspace
Updating http://192.168.2.60:8080/svn/yunweibu/06網絡相關/機房選擇/原始數據 at revision '2014-11-20T15:39:26.195 +0800'
At revision 1288
no change for http://192.168.2.60:8080/svn/yunweibu/06網絡相關/機房選擇/原始數據 since the previous build
[workspace] $ /bin/sh -xe /tmp/hudson3246779838898506564.sh
H * * * * #表示小時內的任意時間執行,具體由jenkins隨機選擇.H讀做:一次
舉例:
H/15 * * * * #(perhaps at :07, :22, :37, :52)每十五分鐘知悉一次.
H(0-29)/10 * * * * #(three times, perhaps at :04, :14, :24).在每小時的前30分鐘內,每10分鐘執行一次.
H 9-16/2 * * 1-5 #(perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)工做時間內,每2小時執行一次.
H H 1,15 1-11 * #1-11月內,每個月的1-15號,天天執行一次.
視圖 (必用)
當任務很是多,在"全部"裏看着繁雜,能夠點擊"+",創建新的視圖(列表視圖).
而後將對應的任務選進來.好比"啓動遊戲"視圖,就把啓動相關的任務勾選進來.
jenkins 多個項目之間串並聯執行(將多個任務合併爲1個) (經常使用)
MultiJob https://blog.csdn.net/sunsgne_AC/article/details/80098231
到系統管理裏安裝 Multijob plugin 插件.
建立任務,選擇建立Multijob project->構建->增長構建步驟->MultiJob phase.
而後將對應的以前建立的Job一個一個填進去(並行仍是串行本身選擇).
解決控制檯提示信息(經常使用)
JNLP ->取消掉啓用項目
但要注意的是Jenkins平常的一些關於安全的提示信息,有些插件的升級是爲了解決安全問題.
jenkins自身變量說明
The following variables are available to shell scripts
BUILD_NUMBER
The current build number, such as "153"
BUILD_ID
The current build id, such as "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss)
BUILD_DISPLAY_NAME
The display name of the current build, which is something like "#153" by default.
JOB_NAME
Name of the project of this build, such as "foo" or "foo/bar". (To strip off folder paths from a Bourne shell script, try: ${JOB_NAME##*/})
BUILD_TAG
String of "jenkins-${JOB_NAME}-${BUILD_NUMBER}". Convenient to put into a resource file, a jar file, etc for easier identification.
EXECUTOR_NUMBER
The unique number that identifies the current executor (among executors of the same machine) that’s carrying out this build. This is the number you see in the "build executor status", except that the number starts from 0, not 1.
NODE_NAME
Name of the slave if the build is on a slave, or "master" if run on master
NODE_LABELS
Whitespace-separated list of labels that the node is assigned.
WORKSPACE
The absolute path of the directory assigned to the build as a workspace.
JENKINS_HOME
The absolute path of the directory assigned on the master node for Jenkins to store data.
JENKINS_URL
Full URL of Jenkins, like http://server:port/jenkins/ (note: only available if Jenkins URL set in system configuration)
BUILD_URL
Full URL of this build, like http://server:port/jenkins/job/foo/15/ (Jenkins URL must be set)
JOB_URL
Full URL of this job, like http://server:port/jenkins/job/foo/ (Jenkins URL must be set)
SVN_REVISION
Subversion revision number that's currently checked out to the workspace, such as "12345"
SVN_URL
Subversion URL that's currently checked out to the workspace.
Jenkins對操做系統的環境變量管理( PATH 變量 )
2019/09/17 Chenxin
Jenkins默認讀取到的系統的PATH變量,通常爲:
/usr/local/jvm/bin:/usr/local/jvm/bin:/sbin:/usr/sbin:/bin:/usr/bin
若是想要修改,則在Jenkins裏配置:
Manage Jenkins – >Configure System – >全局屬性 –>Environment variables->新增,以下:
鍵 PATH 值 /usr/local/jvm/bin:/usr/local/sonar-scanner/bin:.../usr/bin:/root/bin:$PATH
鍵 NODE_PATH 值 /usr/local/nodejs/lib/node_modules
這樣,能夠經過job裏shell輸出 echo $PATH 檢查正確性(已驗證).
修改Jenkins圖標文件(生產環境不建議,公司的Logo標誌太明顯)
路徑
/var/cache/jenkins/war/images/
Jenkins控制檯管理-關閉,重啓,重載配置
關閉Jenkins
http://192.168.3.227:13972/exit
以後,控制檯會有個post請求的提示按鈕,肯定後,就關閉了.
重啓Jenkies
http://192.168.3.227:13972/restart
從新加載配置信息
http://192.168.3.227:13972/reload Job重命名 將job 名爲 test-201908 重命名爲 maven-git-test-201908 後. workspace裏會從新生成新的文件夾.本質上至關於建立了一個新的job.原先的test-201908文件夾沒有改變(只是控制檯上看不到了). jobs文件夾裏則至關於 mv test-201908 maven-git-test-201908 了. Jenkins控制檯輸出插件(字體顏色) 控制檯輸出顯示顏色. jenkins輸出變色插件:AnsiColor(在系統管理--->插件管理---->可選插件 搜索AnsiColor下載安裝便可) Job裏,構建環境->Color ANSI Console Output->ANSI color map 選擇 xterm. 執行的shell裏須要給出如下,以後控制檯輸出纔會有對應效果. echo -e "\033[41;30m紅底黑字\033[0m" #經常使用 echo -e "\033[30m 黑色字 \033[0m" echo -e "\033[31m 紅色字 \033[0m" echo -e "\033[32m 綠色字 \033[0m" #經常使用 echo -e "\033[33m 黃色字 \033[0m" echo -e "\033[46;30m 藍底黑字 \033[0m" echo -e "\033[4;31m 下劃線紅字 \033[0m" echo -e "\033[5;34m 紅字在閃爍 \033[0m" # 天藍 Jenkins與git 標籤(版本回滾) 回滾思路: 根據tag拉取代碼(以後再進行編譯打包發佈). 插件方式 Jenkins在發佈版本的時候,能夠自動打一個tag,並push到遠端. 若發佈須要回滾,那麼就能夠從這個tag處,直接checkout代碼,從新編譯打包.實現版本回滾功能. 具體操做方式和版本,請查網絡資料. 腳本方式 非插件方式,能夠參考coinw的回滾腳本調用(備份文檔).