jenkins配置記錄(2)--程式碼釋出流程

散盡浮華發表於2016-11-02

 

在我們的日常運維工作中,使用jenkins來完成業務程式碼發版上線是至關重要的一環。
前面已經提到在jenkins上新增使用者許可權的操作,今天重點說下如何在jenkins下構建專案工程進行程式碼釋出?

在此簡單介紹下jenkins進行程式碼釋出的流程(根據本人的經歷而述)。
1)程式碼上線要經歷四個場景:Dev開發環境-->Test測試環境-->Beta驗收環境-->Online線上環境
Dev開發環境:開發人員在開發機上自行開發,開發後將程式碼上傳到svn/git版本控制系統裡。
Test測試環境:將程式碼從svn下載並同步到測試機(Test環境發版),通知測試同事進行上線前的業務測試。
Beta驗收環境:測試同事測試ok後,將程式碼同步到Beta機上(Beta環境發版),然後通知產品/運營同事進行上線前的驗收。
Online線上環境:待Beta驗收ok後,再將程式碼同步到線上機器上,最終完成Online發版。

2)Test測試環境下的發版,沒有放到jenkins上操作(當然也是可以放到kenins上構建測試專案工程的),直接是在伺服器上寫的發版指令碼進行的。

3)Beta驗收環境和Online線上環境的發版是放在jenkins上構建專案工程完成的,上線發版分為全量發版(全部同步)和增量發版(個別檔案同步)
發版是根據svn的tag標記,由release區分版本號進行的。具體情況如下:


   

 

全量釋出流程:
第一步:構建FH_Diff_Release專案,構建時會提示選擇一個release版本號。根據上線人員要求的release版本號(一般是最新的release號)進行構建。將程式碼從svn下載到jenkins本地(即放到對應專案的workspace目錄下,也就是放在/usr/local/tomcat7/webapps/jenkins/jobs/FH_Diff_Release下)。構建後
釋出日誌裡會留有一個版本號(比如20161028183745)
第二步:構建FH_Beta專案,構建時會提示輸入VERSION版本號。使用FH_Diff_Release最近一次構建後的版本號(如上面的20161028183745)構建FH_Beta。構建後釋出日誌裡同樣也會留有一個版本號(也是20161028183745)。到這裡完成Beta環境的驗收工作,驗收完成後
才可以進行程式碼上線工作。
第三步:構建FH_Online專案,構建時會提示輸入VERSION版本號。使用FH_Beta最近一次構建後的版本號(也就是上面的20161028183745)構建FH_Online。至此完成程式碼全量上線。

增量釋出流程:
重複上面的第一步和第二部,將程式碼釋出到Beta環境進行驗收,驗收通過後,就可以進行程式碼上線了。
第三步:構建FH_Diff_Beta,構建時會提示輸入FILE_LIST(一般不會是檔案的全路徑,是檔案的部分路徑,具體參考shell指令碼里對此引數的引用設定)。輸入要同步的個別檔案進行構建即可。構建後釋出日誌裡也會留有一個版本號(比如20161014371145).
第四部:構建FH_Online專案,構建時會提示輸入VERSION版本號。使用FH_Diff_Beta最近一次構建後的版本號(也就是上面的20161014371145)構建FH_Online。至此完成程式碼增量上線。

 

另外:
上面在構建工程專案時要求輸入的引數VERSION和FILE_LIST都是在專案配置裡定義的(具體下面會提到),並且這兩個引數在對應專案配置裡的shell指令碼里都會被引用

同時,針對FH_Online專案,還可以建立FH_Rollback(使用ROLLBACK_VERSION引數),即Online環境的回滾方案(當然Test和Beta環境也可以建立回滾專案。一般會寫一個回滾指令碼,同步前都會做一次備份,回滾指令碼可依據自己的情況而定義)

 

-------------------------------------------------------------------------------
廢話不多說,下面記錄下jenkins建立工程,構建專案發版的具體流程:

首先新建一個工程任務:

按照上面總結的上線發版流程,這裡舉出一個業務線的程式碼發版的專案,依次列出全量、增量發版的工程:
FF_Diff_Release
FF_Beta
FF_Diff_Beta
FF_Online
FF_Rollback 

1)FF_Diff_Release專案配置

接下來對這個專案進行配置

首選”啟用專案安全“,選擇對該專案具有操作許可權的使用者。一般而言,除了運維人員(管理員)具有所有專案操作的許可權外,一般只給開發人員(通常是專案組的負責人)Beta環境下的專案操作許可權。如下,只給caogaokui和yuxiaogang這兩個使用者(提前在“管理使用者”裡建立好的使用者)設定下面三個許可權,說明他們對該專案由構建的許可權。

 

在“引數化構建過程”中選擇“List Subversion tags(and more)”,填寫相應業務svn的url;這裡在對應專案的svn(如下面的svn://192.168.9.120/fangfull_new)下特意建立了一個release目錄,在該目錄下建立易於區分的版本號目錄(如rel_20161031,裡面存放業務程式碼)用於jenkins釋出版本。這樣在構建此工程的時候,就會出現提示選擇一個release版本號(下面會演示到);
下面填寫的svn://192.168.9.120/fangfull_new/releases最好提前在jenkins本機用svn co測試執行一下(用對應的的svn賬號和密碼,執行一會兒就ctrl+c結束就行),看看能否正常通過svn下載,不然可能會有報錯。  如下:即將svn://192.168.9.120/fangfull_new/releases下的版本目錄作為引數SVN_releases,用於構建工程時的提示

 

下面的提示不用在意,不影響。 

 

最後,呼叫shell同步的指令碼(指令碼在jenkins本機上定義的,這裡填寫指令碼的執行命令就行)

 

 

-----------------------------------------------------------------------------------------------------------
這裡列舉下jenkins內建的環境變數可以在jenkins構建的專案配置中直接引用,如上圖Shell指令碼中引用的${JOB_NAME}
BUILD_NUMBER, 唯一標識一次build,例如23;
BUILD_ID,基本上等同於BUILD_NUMBER,但是是字串,例如2011-11-15_16-06-21;
JOB_NAME, job的名字,例如JavaHelloWorld;
BUILD_TAG, 作用同BUILD_ID,BUILD_NUMBER,用來全域性地唯一標識一此build,例如jenkins-JavaHelloWorld-23;
EXECUTOR_NUMBER, 例如0;
NODE_NAME,slave的名字,例如MyServer01;
NODE_LABELS,slave的label,標識slave的用處,例如JavaHelloWorld MyServer01;
JAVA_HOME, java的home目錄
WORKSPACE,job的當前工作目錄
HUDSON_URL = JENKINS_URL, jenkins的url,例如http://localhost:8000/ ;
BUILD_URL,build的url 例如http://localhost:8000/job/JavaHelloWorld/23/;
JOB_URL, job的url,例如http://localhost:8000/job/JavaHelloWorld/;
SVN_REVISION,svn 的revison
-----------------------------------------------------------------------------------------------------------

下面貼出該專案配置中呼叫的shell指令碼(指令碼中的192.168.1.106是其中的一臺線上伺服器):
先從線上機器拷貝一份程式碼下來,放到指令碼中的${CODE_DIR}目錄下
接著將程式碼從svn下載到指令碼中的${WORKSPACE}中,然後再同步到指令碼中的${FILE_DIR}/${VERSION}目錄下,已等待後續發往beta環境中。

[root@jenkins-server Shell]# pwd
/usr/local/tomcat7/webapps/jenkins/scripts/Shell
[root@redmine Shell]# cat FF_Diff_Release.sh
#!/bin/bash
CODE_DIR="/var/lib/jenkins/code_online/www.wangshibo.com"
FILE_DIR="/var/lib/jenkins/file_list/www.wangshibo.com"
ONLINE_SERVER="192.168.1.106"
EXCLUDE_FILE="/var/lib/jenkins/code_online/www.wangshibo.com.exclude"
VERSION=`/bin/date +%Y%m%d%H%M%S`
LOCK_FILE="/var/lib/jenkins/file_list/www.wangshibo.com/diff.lock"
 
check_return()
{
        if [[ $? != "0" ]]; then
                /bin/echo $1
                exit 255
        fi
}
 
### check lock file ###
while [ -f ${LOCK_FILE} ]; do
        sleep 2
    /bin/echo "Other diff project is running,please wait for a moment,thanks."
done
 
### update code ###
/usr/bin/rsync -a -e ssh --exclude-from ${EXCLUDE_FILE} root@${ONLINE_SERVER}:/var/www/vhosts/www.wangshibo.com/ ${CODE_DIR}/
check_return "update code failed"
 
### rsync svn code to version directory ###
/bin/mkdir -p ${FILE_DIR}/${VERSION}
/usr/bin/rsync -a --exclude-from ${EXCLUDE_FILE} ${WORKSPACE}/ ${FILE_DIR}/${VERSION}/
 
### diff file ###
/bin/find ${FILE_DIR}/${VERSION}/ -type f -regex ".*/.*\.\(php\|tpl\|js\|css\|html\)" | while read line; do
    ONLINE_FILE=`/bin/echo ${line} | /bin/cut -d"/" -f8- | /bin/sed 's/^/\/var\/lib\/jenkins\/code_online\/www.wangshibo.com\//g'`
    FILE_NAME=`/bin/echo ${line} | /bin/cut -d"/" -f8-`
    if [[ -f ${ONLINE_FILE} ]]; then
        if [[ "$(/usr/bin/md5sum "${line}" | /bin/awk '{print $1}')" != "$(/usr/bin/md5sum "${ONLINE_FILE}" | /bin/awk '{print $1}')" ]]; then
            /bin/echo "=============${FILE_NAME}============="
            /usr/bin/diff -bu ${ONLINE_FILE} ${line}
        fi
    else
        /bin/echo "=============${FILE_NAME}============="
        /bin/echo "...這是一個新檔案..."
    fi
done
 
/bin/echo "==================================Diff Completed=================================="
/bin/echo ""
/bin/echo ""
/bin/echo ""
/bin/echo "Version : ${VERSION}"
/bin/rm -f ${LOCK_FILE}

然後執行這個工程的構建,如下,構建時會提示你選擇一個SVN_release的版本號。

上面的rel_*版本目錄作為SVN_releases引數,是開發人員上傳到svn://192.168.9.120/fangfull_new/releases下的,通過svn能看到:

 

 

----------------------------------------------------------------------------------------------------------------------------------------
另一種形式:
上面的FF_Diff_Release專案配置中採用了“發版時選擇release版本號”的配置(如上截圖中)

也可以不採用上面這種方式:
直接配置一個svn的url(分支或主幹)就行,不啟動上面的“引數化構建過程”
這樣,點選“構建”的時候就直接執行專案構建了,沒有上面的選擇版本號的提示了

如下的一個專案,就跟上面的FF_Diff_Release專案配置不一樣,具體採用哪種方式,根據自己的情況而定。

 

最簡單的做法還可以是:在jenkins本機提前編寫好程式碼同步的指令碼(svn操作在指令碼中定義),然後在jenkins介面裡的專案構建配置中只引用shell指令碼構建即可。

----------------------------------------------------------------------------------------------------------------------------------------

2)FF_Beta專案配置

啟用“引數化構建過程”,選擇“String Parameter”,裡面填寫“VERSION”。這樣構建這個工程時就會出現提示你輸入版本號,也就是輸入上面的FF_Diff_Release專案構建後列印的版本號(在Consloe Output日誌裡最底部可以看到)構建。

接下來不需要再設定“原始碼管理”了,直接引用shell指令碼即可。

 下面貼出該專案配置中呼叫的shell指令碼(指令碼中的192.168.1.25是beta伺服器),可以看出,上面設定的VERSION引數,在指令碼里已經被引用到了。

[root@jenkins-server Shell]# cat FF_Beta.sh
#!/bin/bash
FILE_DIR="/var/lib/jenkins/file_list/www.wangshibo.com"
BETA_SERVER="192.168.1.25"
BETA_DIR="/var/www/vhosts/www.wangshibo.com"

### define check_return ###
check_return()
{
        if [[ $? != "0" ]]; then
                /bin/echo $1
                exit 255
        fi
}

### check syntax errors ###
/bin/echo "check syntax errors"
for line in `/bin/find ${FILE_DIR}/${VERSION} -type f -name "*.php"`; do
	/Data/app/php5.5.1/bin/php -l "${line}" >/dev/null 2>&1
	check_return "syntax errors,please check ${line}"
done

### release to beta server ###
/usr/bin/rsync -av -e "ssh -p25791"  ${FILE_DIR}/${VERSION}/ root@${BETA_SERVER}:${BETA_DIR}/
check_return "release to beta server failed"

### change directory permission ###
/usr/bin/ssh -p25791 -t -q -o 'StrictHostKeyChecking no' root@${BETA_SERVER} "/bin/chown -R nobody:nobody /var/www/vhosts/www.wangshibo.com; /bin/chmod -R 755 /var/www/vhosts/www.wangshibo.com/main/protected/runtime /var/www/vhosts/www.wangshibo.com/main/protected/themes /Data/logs/www/fangfull.com"
### purge memcache ###
#/usr/bin/ssh -t -q -o 'StrictHostKeyChecking no' root@${BETA_SERVER} "echo flush_all | nc 127.0.0.1 11221 ; echo flush_all | nc 127.0.0.1 11222" >/dev/null 2>&1

### print version ###
/bin/echo "Version : ${VERSION}"

點選構建指令碼,就會出現輸入版本號的提示(注意上面Beta的shell指令碼中有/Data/app/php5.5.1/bin/php程式,把這個php服務啟動起來;按照以上指令碼中的意思是在程式碼釋出前,將程式碼中的php檔案搜尋出來,然後用php執行下這些php指令碼檔案,如果有報錯,則終止這次構建,如果沒有報錯,則繼續進行程式碼釋出;具體按照自己的實際情況對指令碼進行除錯

3)FF_Diff_Beta專案配置

 如下:引數名填寫為FILE_LIST,在構建該專案的時候會有這個引數的提示,即輸入要釋出的檔案,這是增量發版用到的(具體上面已經總結)。

 

接著直接引用shell指令碼即可:

下面貼出該專案配置中呼叫的shell指令碼(指令碼中的192.168.1.25是beta伺服器):
從指令碼中可以看出:
上面“引數化構建”中定義的FILE_LIST在指令碼中被引用到了。
同步前先從beta機器上將程式碼備份一份到本機,然後再根據FILE_LIST進行增量同步。

[root@jenkins-server Shell]# cat FF_Diff_Beta.sh 
#!/bin/bash
CODE_DIR="/var/lib/jenkins/code_online/www.wangshibo.com"
FILE_DIR="/var/lib/jenkins/file_list/www.wangshibo.com"
BETA_SERVER="192.168.1.25" 
BETA_DIR="/var/www/vhosts/www.wangshibo.com"
ONLINE_SERVER="192.168.1.25"
EXCLUDE_FILE="/var/lib/jenkins/code_online/www.wangshibo.com.exclude"
VERSION=`/bin/date +%Y%m%d%H%M%S`
LOCK_FILE="/var/lib/jenkins/file_list/www.wangshibo.com/diff.lock"

check_return()
{
        if [[ $? != "0" ]]; then
                /bin/echo $1
                exit 255
        fi
}

### check lock file ###
while [ -f ${LOCK_FILE} ]; do
        sleep 2
	/bin/echo "Other diff project is running,please wait for a moment,thanks."
done

### update code ###
/usr/bin/rsync -av -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} root@${ONLINE_SERVER}:/var/www/vhosts/www.wangshibo.com/ ${CODE_DIR}/
check_return "update code failed"

### rsync file from beta server ###
/bin/mkdir -p ${FILE_DIR}/${VERSION}
for FILE in ${FILE_LIST}; do
	DIR_NAME=`/usr/bin/dirname ${FILE}`
	/bin/mkdir -p ${FILE_DIR}/${VERSION}/${DIR_NAME}
	/usr/bin/rsync -av -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} root@${BETA_SERVER}:${BETA_DIR}/${FILE} ${FILE_DIR}/${VERSION}/${FILE}
	check_return "${FILE} 檔案不存在!"
done

### diff file ###
/bin/find ${FILE_DIR}/${VERSION}/ -type f -regex ".*/.*\.\(php\|tpl\|js\|css\|html\)" | while read line; do
	ONLINE_FILE=`/bin/echo ${line} | /bin/cut -d"/" -f8- | /bin/sed 's/^/\/var\/lib\/jenkins\/code_online\/www.wangshibo.com\//g'`
	FILE_NAME=`/bin/echo ${line} | /bin/cut -d"/" -f8-`
	if [[ -f ${ONLINE_FILE} ]]; then
		if [[ "$(/usr/bin/md5sum "${line}" | /bin/awk '{print $1}')" != "$(/usr/bin/md5sum "${ONLINE_FILE}" | /bin/awk '{print $1}')" ]]; then
			/bin/echo "=============${FILE_NAME}============="
			/usr/bin/diff -bu ${ONLINE_FILE} ${line}
		fi
	else
		/bin/echo "=============${FILE_NAME}============="
		/bin/echo "...這是一個新檔案..."
	fi
done

/bin/echo "==================================Diff Completed=================================="
/bin/echo ""
/bin/echo ""
/bin/echo ""
/bin/echo "Version : ${VERSION}"
/bin/rm -f ${LOCK_FILE}

點選構建指令碼,就會出現輸入檔案的提示(多個檔案之間用空格隔開),如下,輸入檔案的格式路徑可以根據shell指令碼中(注意上面指令碼中的dirname命令,即取一個路徑的目錄部分(即去掉一個路徑最後一級後的部分路徑))

 

4)FF_Online專案配置

下面貼出該專案構建配置中引用的指令碼(指令碼中的192.168.1.106和192.168.1.220是線上伺服器):

[root@jenkins-server Shell]# cat FF_Online.sh
#!/bin/bash
FILE_DIR="/var/lib/jenkins/file_list/www.wangshibo.com"
CODE_DIR="/var/lib/jenkins/code_online/www.wangshibo.com"
EXCLUDE_FILE="/var/lib/jenkins/code_online/www.wangshibo.com.exclude"
ROLLBACK_DIR="/var/lib/jenkins/rollback/www.wangshibo.com"
ONLINE_SERVER="192.168.1.106 192.168.1.220"
REMOTE_SERVER="192.168.1.106"
ONLINE_DIR="/var/www/vhosts/www.wangshibo.com"

### define check_return ###
check_return()
{
        if [[ $? != "0" ]]; then
                /bin/echo $1
                exit 255
        fi
}

### check version ###
if [[ ! -d ${FILE_DIR}/${VERSION} ]]; then
        /bin/echo "版本無效,請確認."
        exit 255
fi


### update code ###
/bin/echo "update online code"
/usr/bin/rsync -a -e ssh --exclude-from ${EXCLUDE_FILE} root@${REMOTE_SERVER}:/var/www/vhosts/www.wangshibo.com/ ${CODE_DIR}/
check_return "update code failed"

### backup code ###
/bin/echo "backup online code"
cd ${CODE_DIR} && /usr/bin/rsync -aR * ${ROLLBACK_DIR}/${VERSION}/ 
check_return "backup code failed"

### release to online server ###
for SERVER in ${ONLINE_SERVER}; do
	/bin/echo "release to ${SERVER}"
	/usr/bin/rsync -av -e "ssh -o 'StrictHostKeyChecking no'" ${FILE_DIR}/${VERSION}/ root@${SERVER}:${ONLINE_DIR}/
	/usr/bin/ssh -t -q -o 'StrictHostKeyChecking no' root@${SERVER} "/bin/chown -R nobody:nobody /var/www/vhosts/www.wangshibo.com ; /bin/chmod -R 755 /var/www/vhosts/www.wangshibo.com/main/protected/runtime /var/www/vhosts/www.wangshibo.com/main/protected/themes /Data/logs/www/fangfull.com" >/dev/null 2>&1
done


### print rollback version ###
/bin/echo "Rollback Version : ${VERSION}"

點選構建指令碼,就會出現輸入版本號的提示

5)FF_Rollback專案配置,即FF_Online的回滾方案,就是說上線如若出現問題,構建這個FF_Rollback工程就會自動回滾到上線前的狀態

 

 

 

下面是該回滾專案的shell指令碼

[root@jenkins-server Shell]# cat FF_Rollback.sh
#!/bin/bash
FILE_DIR="/var/lib/jenkins/file_list/www.wangshibo.com"
CODE_DIR="/var/lib/jenkins/code_online/www.wangshibo.com"
EXCLUDE_FILE="/var/lib/jenkins/code_online/www.wangshibo.com.exclude"
ROLLBACK_DIR="/var/lib/jenkins/rollback/www.wangshibo.com"
ROLLBACK_VERSION=`/bin/ls -l /var/lib/jenkins/rollback/www.wangshibo.com|tail -1|awk '{print $9}'`
ONLINE_SERVER="192.168.1.106 192.168.1.220"
ONLINE_DIR="/var/www/vhosts/www.wangshibo.com"


### define check_return ###
check_return()
{
        if [[ $? != "0" ]]; then
                /bin/echo $1
                exit 255
        fi
}

### release to online server ###
for SERVER in ${ONLINE_SERVER}; do
    /bin/echo "release to ${SERVER}"
    /usr/bin/rsync -av -e "ssh -o 'StrictHostKeyChecking no'" ${ROLLBACK_DIR}/${ROLLBACK_VERSION}/ root@${SERVER}:${ONLINE_DIR}/
    /usr/bin/ssh -t -q -o 'StrictHostKeyChecking no' root@${SERVER} "/bin/chown -R nobody:nobody /var/www/vhosts/www.wangshibo.com ; /bin/chmod -R 755 /var/www/vhosts/www.wangshibo.com/main/protected/runtime /var/www/vhosts/www.wangshibo.com/main/protected/themes /Data/logs/www/fangfull.com ; cd /var/www/vhosts/www.wangshibo.com/main/qmjjrwap/themes/ntpl; /bin/rm -rf /var/www/vhosts/www.wangshibo.com/main/qmjjrwap/themes/ntpl/*; /bin/ln -s /var/www/vhosts/www.wangshibo.com/main/qmjjrwap/dist/themes/ntpl/qmjjrwap ./; /bin/chown -R nobody:nobody /var/www/vhosts/www.wangshibo.com/main/qmjjrwap/themes/ntpl/qmjjrwap" >/dev/null 2>&1
done


### print rollback version ###
/bin/echo "Rollback Version : ${VERSION}"

回滾即是用最近一次的備份覆蓋到線上,指令碼中的“ROLLBACK_VERSION”引數實際上取的就是最近一次的備份

[root@jenkins-server Shell]# ll /var/lib/jenkins/rollback/www.wangshibo.com
total 72
drwxr-xr-x 9 root root 4096 Aug 10 12:24 20160810122352
drwxr-xr-x 9 root root 4096 Aug 12 18:05 20160812180522
drwxr-xr-x 9 root root 4096 Aug 19 17:59 20160819175910
drwxr-xr-x 9 root root 4096 Aug 29 10:41 20160826170848
drwxr-xr-x 9 root root 4096 Sep  8 19:52 20160908195214
drwxr-xr-x 9 root root 4096 Sep 14 19:40 20160914193917
drwxr-xr-x 9 root root 4096 Sep 20 18:33 20160920171701
drwxr-xr-x 9 root root 4096 Sep 22 13:41 20160922110959
drwxr-xr-x 9 root root 4096 Sep 22 16:19 20160922161415
drwxr-xr-x 9 root root 4096 Sep 23 20:30 20160923201543
drwxr-xr-x 9 root root 4096 Sep 23 21:57 20160923213311
drwxr-xr-x 9 root root 4096 Sep 23 22:12 20160923220941
drwxr-xr-x 9 root root 4096 Sep 29 21:24 20160929210300
drwxr-xr-x 9 root root 4096 Oct 17 16:13 20161017161120
drwxr-xr-x 9 root root 4096 Oct 17 19:51 20161017192718
drwxr-xr-x 9 root root 4096 Oct 26 17:17 20161025173337
drwxr-xr-x 9 root root 4096 Oct 28 18:58 20161028185753
drwxr-xr-x 9 root root 4096 Nov  2 17:03 20161102145159
[root@jenkins-server Shell]# /bin/ls -l /var/lib/jenkins/rollback/www.wangshibo.com|tail -1|awk '{print $9}'
20161102145159

點選這個回滾專案的構建,同樣會出現讓你輸入版本號的提示

 

 

******************************************************************************************************

擴充套件小提示:

擷取目錄的方法,有以下兩種:
1)dirname命令:用於取給定路徑的目錄部分。這個命令很少直接在shell命令列中使用,一般把它用在shell指令碼中,用於取得指令碼檔案所在目錄,然後將當前目錄切換過去。
其實就是取所給路徑的倒數第二級及其之前的路徑部分,如下:
[root@jenkins-server Shell]# dirname main/protected/xqsjmob/themes/tpl2/common/page_statistics.tpl
main/protected/xqsjmob/themes/tpl2/common
[root@jenkins-server Shell]# dirname /usr/local/tomcat7/webapps/jenkins/scripts/Shell
/usr/local/tomcat7/webapps/jenkins/scripts
[root@jenkins-server Shell]# dirname FF_Online.sh            #取的結果既是當前路徑目錄下

.

2)可以用${pathname%/*}擷取掉pathname後面的檔案部分
下面比較下這兩種方法的效果:即dirname取的是倒數第二級及其以上級的路徑,而${pathname%/*}取的是"刪除最後一個/符號後的路徑部分"
[root@jenkins-server Shell]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/*}
/usr/bin /usr/bin
You have new mail in /var/spool/mail/root
[root@jenkins-server Shell]# pathname=/usr/bin/sort/; echo $(dirname $pathname) ${pathname%/*}
/usr/bin /usr/bin/sort
[root@jenkins-server Shell]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/*}
/ /usr
[root@jenkins-server Shell]# pathname=/usr; echo $(dirname $pathname) ${pathname%/*}
/

---------------------------------------------------------------------------------------------------

以上的專案在構建後,可以通過構建日誌檢視程式碼釋出情況:

如下:點選“Console Output"檢視日誌

 

 通過檢視Parameter引數得到本次構建動作所用到的VERSION版本號或FILE_LIST檔案

 

 

 

 

 

待專案構建完成後,還可以建立檢視,將相關業務(應用)構建的工程放到同一個檢視下,有多少個應用就建立多少個檢視。如下建立檢視:

 

然後將相應的構建工程拉到這個檢視下進行管理

 

至此,一個完整專案的jenkins發版流程已經配置完成,後續上線發版只需要在這裡一鍵構建執行即可。這僅僅是依據本人使用jenkins的經歷而梳理的,如有誤述,敬請指出,以待改正!

 

相關文章