CI/CD系列之阿里雲雲效2020應用篇


前言

前不久登錄阿里雲后台,看到雲效的介紹,出於好奇便點進去看了看,剛開始以為雲效是類似Jenkins的一套自動化部署方案,了解之后發現雲效的野心很大哦,從需求管理、業務開發、代碼管理、缺陷測試、部署上線全方位掌控,試圖提供一站式DevOps平台,將原先零散的管理平台整合成一個掌管項目全生命周期的綜合性管理平台,想法倒是蠻好的,目前東一個平台,西一個平台切換來切換去也頗有點麻煩,能整合起來還是要點贊的,另外目前也是免費使用,那就嘗試下吧。

實戰

在阿里雲后台點擊雲效后會有二個雲效,一個叫“雲效”,一個叫“雲效2020”,本文主要介紹雲效2020,以下簡稱雲效。雲效涉及功能較多,本章節以自動化部署展開說明。

涉及雲效中制品倉庫,代碼管理,流水線三大功能,示例已原有項目接入展開說明。

制品倉庫

制品倉庫其實就是Maven倉庫,雲效已為每個企業提供一個maven私庫,省去自己搭建maven私庫。

maven配置

點擊進入雲效中的制品倉庫后,會看到如下圖界面

點擊任意倉庫地址后,會跳轉至maven配置指南,詳細說明該如何配置,這點做得蠻友好的

如果原先本地對maven配置項沒有調整過的話,直接按照制品倉庫說明文檔中的方式一直接下載覆蓋本地文件即可。相信大多數應該都不是默認配置,那就按照方式二說明進行調整即可。
首先將倉庫憑證信息復制至本地maven配置項中servers節點,如下圖,可以發現憑證信息都是成對出現的,我這邊添加了3組憑證配置項

其次將倉庫地址信息復制至本地maven配置項中profiles節點下的repositories節點,如下圖

項目pom配置

本地maven配置項調整好后,我們需在項目中根目錄下的pom.xml增加相應配置,找到根節點pom.xml文件后,將雲效中制品上傳配置復制過來即可,如下圖

另外也需將制品倉庫中的settings.xml,復制項目根目錄下,該文件在后續構建過程中需使用,如下圖

到這里涉及maven的調整已經完成,有個注意點這邊配置項中的id屬性值需上下一一對應,且不可重復

代碼管理

雲效中目前支持的代碼源如下圖

如果原先項目已采用上述代碼源中的一種並且支持公網訪問的話,那恭喜你可直接跳過該步驟,直接進入流水線配置。如果項目未采用上述代碼源管理的話,那就趕緊選擇一項,這邊推薦使用雲效Codeup,畢竟是已整合在雲效中。關於Git的配置及使用本文不做介紹,可自行百度即可。

流水線

點擊雲效中的流水線模塊,進入流水線管理頁面,如下圖

點擊新建流水線后,選擇Java最基礎的構建模板

之后進入流程配置頁,如下圖

第一步:選擇項目源,在項目源選擇好上一步配置好的代碼源即可。
第二步:配置構建參數,在這步需進行二項操作,Java構建參數配置及構建物上傳配置,如下圖

在Java構建中選擇項目運行的Java版本,我這邊項目是基於jdk1.8開發,所以也選擇jdk1.8。
在構建命令中可根據自己項目實際情況,更改構建命令,我這邊使用如下命令

mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip -s settings.xml -P pro
命令參數 說明
-s 用戶maven配置文件的路徑
-P maven會激活項目中pom.xml配置的profiles標簽,如項目中有用到環境配置則需添加該配置


構建物上傳這邊需在打包路徑進行設置,根據項目情況進行調整,我這邊項目最終輸出為一個war包,則配置好構建后的路徑。這邊打包路徑為當前構建產生的構建產物在當前工作區下的相對路徑。如"target/"
第三步:主機部署配置,如下圖

在制品選項欄中點擊下拉選擇會自動選中選項,目前該選項不可自行配置,選擇默認的即可。
在主機組選項中對於首次使用流水線的,需新建主機組,目前支持阿里雲ECS及自有主機(只要能通過外網訪問都支持),如下圖

我這邊已經配置過阿里雲ECS,這邊就不重復操作了,選擇相應的主機組即可,大家可根據自身實際情況添加主機。
在下載路徑配置中選擇存放上一步構建物構建后上傳至該服務器的文件路徑,我這邊選擇默認配置。
在執行用戶中選擇部署腳本執行用戶,我這邊是root用戶。
在部署腳本中主要做的任務就是將上傳至該服務器的構建物進行解壓,然后根據項目部署方式進行部署。我這邊主要做了如下操作:
1.將構建物進行解壓,解壓出的war包保存至指定目錄

tar zxvf /home/admin/app/package.tgz -C /home/admin/fms/

2.執行部署腳本

sh /home/admin/deploy.sh restart

3.在命令中先執行tomcat停止命令

stop_application() {
  echo "stoping java process"
  service tomcat stop
  echo "stoped java process"
}

4.將原先項目老版本進行備份,備份后刪除老版本,將新版本解壓至tomcat運行目錄

start_init() {
	# 創建項目備份路徑
	mkdir -p ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
	cp -r ${TOMCAT_APP_HOME} ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
	rm -rf ${TOMCAT_APP_HOME}*
	#cp -r ${APP_HOME} /opt/tomcat8/webapps/
 	unzip ${WAR_NAME} -d ${TOMCAT_APP_HOME}
}

5.執行tomcat啟動命令

start_application() {
    echo "starting java process"
    #nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
    service tomcat start
    echo "started java process"
}

根據雲效給的部署腳本示例,結合自身項目實際部署情況進行調整,完整部署腳本如下
官方部署實例腳本
https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5e86a416546fd9001aee81b9

#APP_NAME為雲效上的應用名
APP_NAME=fms


PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20    # 等待應用啟動的時間
APP_PORT=8080          # 應用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}  # 應用健康檢查URL
APP_HOME=/home/admin/${APP_NAME} # 從package.tgz中解壓出來的jar包放到這個目錄下
WAR_NAME=${APP_HOME}/${APP_NAME}.war # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log  #應用的啟動日志
TOMCAT_HOME=/opt/tomcat8
TOMCAT_APP_HOME=${TOMCAT_HOME}/webapps/fms/
SERVICE_DAY_STR=`date --date='0 days ago' +%Y-%m-%d`
SERVICE_DAY_STR2=`date --date='0 days ago' +%Y%m%d%H%M%S`
# 創建出相關目錄
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
    echo "Usage: $PROG_NAME {start|stop|restart}"
    exit 2
}

health_check() {
    exptime=0
    echo "checking ${HEALTH_CHECK_URL}"
    while true
        do
            status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code}  ${HEALTH_CHECK_URL}`
            if [ "$?" != "0" ]; then
               echo -n -e "\rapplication not started"
            else
                echo "code is $status_code"
                if [ "$status_code" == "200" ];then
                    break
                fi
            fi
            sleep 1
            ((exptime++))

            echo -e "\rWait app to pass health check: $exptime..."

            if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
                echo 'app start failed'
               exit 1
            fi
        done
    echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
    echo "starting java process"
    #nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
    service tomcat start
    echo "started java process"
}

stop_application() {
  echo "stoping java process"
  service tomcat stop
  echo "stoped java process"
}
start_init() {
	# 創建項目備份路徑
	mkdir -p ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
	cp -r ${TOMCAT_APP_HOME} ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
	rm -rf ${TOMCAT_APP_HOME}*
	#cp -r ${APP_HOME} /opt/tomcat8/webapps/
 	unzip ${WAR_NAME} -d ${TOMCAT_APP_HOME}
}
start() {
    start_init
    start_application
    health_check
}
stop() {
    stop_application
}
case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        usage
    ;;
esac

流程配置完后還有二項配置,觸發設置和變量和緩存配置,這二項配置是最近出來的,原先是沒有的(阿里的迭代還是蠻快的)我這邊主要說明部署過程,如有需要可自行體驗,點擊保存即可完成流水線的配置工作。
配置完后點擊配置的流水線,點擊運行即可體驗自動化部署下帶來的便捷了,部署過程中可時刻關注日志輸出,便於剛開始部署調試,后續就一勞永逸了。

參考資料

https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5e86a414546fd9001aee8195

在這里插入圖片描述



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM