摘要:本文主要介紹通過腳本完成線上發(fā)版,自動打發(fā)版,方便線上功能回退。結合參數(shù)化構建,可以實現(xiàn)自動化發(fā)布。
本文主要介紹通過shell腳本完成線上發(fā)版,自動打發(fā)版tag,方便線上功能回退。結合Jenkins參數(shù)化構建,可以實現(xiàn)自動化發(fā)布。
## 分支名 tag_name="dev" IN_TAG=$tag_name ## git地址 GIT_DIR="[email protected]:****/paas-service-web.git" ## 項目名 GIT_PROJ_NAME=$(echo $GIT_DIR|awk -F/ "$0=$NF"|awk -F. "$0=$1") ## 工作目錄 WORKSPACE="/home/darren/data" ## 發(fā)版用戶 BUILD_USER="xiaozq" ## 線上服務器地址 HOST="192.144.172.239" ## 服務器部署目錄 DEPLOY_DIR="/data/xiaoyaospace"
這些參數(shù)需要改成自己對應的參數(shù),需要配置ssh免密鑰登錄
執(zhí)行方式 sh -x paas_jenkins.sh 分支名
依賴環(huán)境
maven
git
jdk
流程圖
源碼
paas_jenkins.sh (接收的是jenkins傳過來的參數(shù),可以改成指定參數(shù),直接運行)
#!/bin/bash export LANG="en_US.UTF-8" #export PS4="[+] $(date +%H:%M:%S) info (@$LINENO): " ## 分支名 #tag_name=$1 IN_TAG=$tag_name ## git地址 GIT_DIR=$git ## 項目名 GIT_PROJ_NAME=$(echo $GIT_DIR|awk -F/ "$0=$NF"|awk -F. "$0=$1") ## 工作目錄 #WORKSPACE="/home/darren/data" ## 發(fā)版 BUILD_USER=$BUILD_USER_ID ## 線上服務器地址 HOST=$server_list ## 服務器部署目錄 DEPLOY_DIR=$deploy_dir ## 使用端口號 SERVER_PORT=$server_port ## 檢測項目啟動地址 HEALTH_CHECK_FILE=$health_check_file echo "接收參數(shù)--》build_type:$build_type ; tag_name:$tag_name ;git:$git ;server_list:$server_list ;deploy_dir:$deploy_dir ; server_port:$server_port;health_check_file:$health_check_file; BUILD_USER_ID:$BUILD_USER_ID " #切換到工作目錄 cd $WORKSPACE test ! -d "$WORKSPACE/$GIT_PROJ_NAME" && echo "git clone $GIT_DIR" && git clone $GIT_DIR #進入項目目錄 pushd $GIT_PROJ_NAME >/dev/null echo $IN_TAG|egrep -q "^d-|^b-|^r-" if [ $? -ne 0 ];then git fetch origin if [ $? -ne 0 ];then echo "無法連接gitlab!" exit 1; fi git rev-list origin/$IN_TAG >/dev/null if [ $? -ne 0 ];then echo "$tag_name 分支不存在!" exit 1; fi echo "檢查代碼是否合并..." diff=$(git log origin/master ^origin/$IN_TAG| wc -l) if [ $diff -ne 0 ];then echo "請先合并master代碼到分支$IN_TAG!" exit 1; fi echo "代碼已經合并! " git pull git fetch --tags git checkout $IN_TAG if [ $? -ne 0 ];then exit 1; fi git pull git checkout master if [ $? -ne 0 ];then exit 1; fi git reset --hard origin/master if [ $? -ne 0 ];then exit 1; fi ## git status git merge $IN_TAG if [ $? -ne 0 ];then echo "合并到master失??!" exit 1 fi # git status timestamp=$(date +%y%m%d%H%M) IN_TAG=r-$timestamp-$BUILD_USER git fetch --tags num=$(git tag -l $IN_TAG|wc -l) if [ $num -eq 1 ];then echo "Tag沖突,一分鐘后重新打Tag" sleep 60 timestamp=$(date +%y%m%d%H%M) IN_TAG=r-$timestamp-$BUILD_USER fi git tag -a -m "$tag_name" $IN_TAG master git push origin master if [ $? -ne 0 ];then echo "推送代碼到origin失敗" exit 1 fi git push origin --tags if [ $? -ne 0 ];then echo "推送rtag到origin失敗" exit 1 fi fi git fetch --tags git reset --hard $IN_TAG if [ $? -ne 0 ];then echo "$IN_TAG 分支不存在!" exit 1 fi merge_count=$(find . -regex ".*.js|.*.html|.*.htm|.*.css|.*.xml|.*.jsp|.*.properties" |xargs grep "<<<<<<< HEAD" 2>/dev/null |wc -l) if [ $merge_count -ne 0 ]; then find . -regex ".*.js|.*.html|.*.htm|.*.css|.*.xml|.*.jsp|.*.properties" |xargs grep "<<<<<<< HEAD" 2>/dev/null echo "請解決代碼沖突后再發(fā)布!" exit 1 fi echo "mvn clean package -DskipTests=true" mvn clean package -DskipTests=true if [ $? -ne 0 ];then exit 1 fi popd JAR_NAME=$(ls -al "$WORKSPACE/$GIT_PROJ_NAME/target" | grep "jar$" | awk "{print $9}") echo "$JAR_NAME" ssh root@$HOST "test -d $DEPLOY_DIR/$GIT_PROJ_NAME || mkdir -p $DEPLOY_DIR/$GIT_PROJ_NAME" if [ $? -ne 0 ];then echo "遠程執(zhí)行命令失敗!" exit 1 #continue fi echo "scp -p "$WORKSPACE/$GIT_PROJ_NAME/target/$JAR_NAME" root@$HOST:/tmp/ " scp -p "$WORKSPACE/$GIT_PROJ_NAME/target/$JAR_NAME" root@$HOST:/tmp/ if [ $? -ne 0 ];then echo "同步文件失??!" exit 1 #continue fi echo "ssh root@$HOST "rm -f $DEPLOY_DIR/$GIT_PROJ_NAME/$JAR_NAME && cp -rf /tmp/$JAR_NAME $DEPLOY_DIR/$GIT_PROJ_NAME/" " ssh root@$HOST "rm -f $DEPLOY_DIR/$GIT_PROJ_NAME/$JAR_NAME && cp -rf /tmp/$JAR_NAME $DEPLOY_DIR/$GIT_PROJ_NAME/" echo "ssh root@$HOST "sh $DEPLOY_DIR/$GIT_PROJ_NAME/start.sh $JAR_NAME $SERVER_PORT $HEALTH_CHECK_FILE $DEPLOY_DIR" || exit 1 " ssh root@$HOST "sh $DEPLOY_DIR/$GIT_PROJ_NAME/start.sh $JAR_NAME $SERVER_PORT $HEALTH_CHECK_FILE $DEPLOY_DIR" || exit 1 echo "ssh root@$HOST "echo $IN_TAG > $DEPLOY_DIR/$GIT_PROJ_NAME/git_version"" ssh root@$HOST "echo $IN_TAG > $DEPLOY_DIR/$GIT_PROJ_NAME/git_version" echo "[DESC]IN=$tag_name
OUT=$IN_TAG"
start.sh (放在部署的服務器上,遠程調用)
#!/bin/sh echo "接收到的參數(shù) $#" PROJ_NAME=$1 SERVER_PORT=$2 HEALTH_CHECK_FILE=$3 DEPLOY_DIR=$4 HEALTCHECKURL="http://127.0.0.1:$SERVER_PORT/$HEALTH_CHECK_FILE" #ps -ef | grep "$PROJ_NAME" |grep -v grep ps -ef | grep "$PROJ_NAME" |grep -v grep|grep -v "start.sh" |awk "NR==1{print $2}"|xargs kill -9 >/dev/null 2>&1 java -server -Xmx256m -jar -Dspring.profiles.active=prod "$DEPLOY_DIR/$PROJ_NAME" >/tmp/paas.log & flag=0 for i in $(seq 30);do sleep 1 httpcode=$(curl -o /dev/null -s -m 1 --connect-timeout 1 -w %{http_code} "$HEALTCHECKURL") echo "Http check $HEALTCHECKURL httpcode is $httpcode" if [ "X$httpcode" == "X200" ];then echo -e " Start $PROJ_NAME is OK . " flag=1 break fi done if [ $flag -eq 0 ];then echo -e " Start $PROJ_NAME is FAIL . " exit 1 fi
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/74023.html
摘要:本文主要介紹通過參數(shù)化構建搭建持續(xù)集成持續(xù)交付,主要介紹參數(shù)化構建配置,本身搭建請查看官方文檔涉及到的插件一最終效果二參數(shù)化配置點擊配置,勾選參數(shù)化構建點擊添加參數(shù),有下面這些參數(shù)主要用到字符參數(shù)文本參數(shù)選擇發(fā)版環(huán)境例如,多個空格分隔,示例 本文主要介紹通過jenkins參數(shù)化構建搭建CICD(持續(xù)集成/持續(xù)交付),主要介紹jenkins參數(shù)化構建配置,jenkins本身搭建請查看官方...
摘要:擴展性好當集群的資源嚴重不足而導致排隊等待時,可以很容易的添加一個到集群中,從而實現(xiàn)擴展。用法,選擇盡可能使用這個節(jié)點鏡像,填寫,這個容器鏡像是我們的運行環(huán)境。更新文件,這里我們只是將中的鏡像更換成最新構建出的鏡像?;贘enkins的CI/CD實踐[TOC]一、概要提到K8S環(huán)境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新興的drone等,考慮到大多公司...
摘要:在容器領域內,已經成為了容器編排和管理的社區(qū)標準。就是的邏輯擴展,它的核心目標是為了更加高效和安全的應用發(fā)布。第二個問題就是,生產環(huán)境的發(fā)布權限一般都是需要嚴格控制的,通常只有應用管理員或者運維管理員才有生產發(fā)布權限。 為了解決傳統(tǒng)應用升級緩慢、架構臃腫、不能快速迭代、故障不能快速定位、問題無法快速解決等問題,云原生這一概念橫空出世。云原生可以改進應用開發(fā)的效率,改變企業(yè)的組織結構,甚...
閱讀 1604·2021-09-30 09:47
閱讀 3609·2021-09-22 15:05
閱讀 2842·2021-08-30 09:44
閱讀 3626·2019-08-30 15:55
閱讀 1377·2019-08-30 13:08
閱讀 1332·2019-08-29 16:40
閱讀 557·2019-08-29 12:45
閱讀 1393·2019-08-29 11:25