成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

CICD項(xiàng)目發(fā)版腳本

Wildcard / 1856人閱讀

摘要:本文主要介紹通過腳本完成線上發(fā)版,自動(dòng)打發(fā)版,方便線上功能回退。結(jié)合參數(shù)化構(gòu)建,可以實(shí)現(xiàn)自動(dòng)化發(fā)布。

本文主要介紹通過shell腳本完成線上發(fā)版,自動(dòng)打發(fā)版tag,方便線上功能回退。結(jié)合Jenkins參數(shù)化構(gòu)建,可以實(shí)現(xiàn)自動(dòng)化發(fā)布。

## 分支名
tag_name="dev"
IN_TAG=$tag_name
## git地址
GIT_DIR="git@github.com:****/paas-service-web.git"
## 項(xiàng)目名
GIT_PROJ_NAME=$(echo $GIT_DIR|awk -F/ "$0=$NF"|awk -F. "$0=$1")
## 工作目錄
WORKSPACE="/home/darren/data"
## 發(fā)版用戶
BUILD_USER="xiaozq"
## 線上服務(wù)器地址
HOST="192.144.172.239"
## 服務(wù)器部署目錄
DEPLOY_DIR="/data/xiaoyaospace"

這些參數(shù)需要改成自己對(duì)應(yīng)的參數(shù),需要配置ssh免密鑰登錄

執(zhí)行方式 sh -x paas_jenkins.sh 分支名

依賴環(huán)境

maven

git

jdk

流程圖

源碼
paas_jenkins.sh (接收的是jenkins傳過來的參數(shù),可以改成指定參數(shù),直接運(yùn)行)

#!/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
## 項(xiàng)目名
GIT_PROJ_NAME=$(echo $GIT_DIR|awk -F/ "$0=$NF"|awk -F. "$0=$1")
## 工作目錄
#WORKSPACE="/home/darren/data"
## 發(fā)版
BUILD_USER=$BUILD_USER_ID
## 線上服務(wù)器地址
HOST=$server_list
## 服務(wù)器部署目錄
DEPLOY_DIR=$deploy_dir
## 使用端口號(hào)
SERVER_PORT=$server_port
## 檢測(cè)項(xiàng)目啟動(dòng)地址
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

#進(jìn)入項(xiàng)目目錄
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 "請(qǐng)先合并master代碼到分支$IN_TAG!"
        exit 1;
    fi

    echo "代碼已經(jīng)合并! "

    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 "請(qǐng)解決代碼沖突后再發(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 "遠(yuǎn)程執(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 (放在部署的服務(wù)器上,遠(yuǎn)程調(diào)用)

#!/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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/74023.html

相關(guān)文章

  • 基于jenkins搭建CICD

    摘要:本文主要介紹通過參數(shù)化構(gòu)建搭建持續(xù)集成持續(xù)交付,主要介紹參數(shù)化構(gòu)建配置,本身搭建請(qǐng)查看官方文檔涉及到的插件一最終效果二參數(shù)化配置點(diǎn)擊配置,勾選參數(shù)化構(gòu)建點(diǎn)擊添加參數(shù),有下面這些參數(shù)主要用到字符參數(shù)文本參數(shù)選擇發(fā)版環(huán)境例如,多個(gè)空格分隔,示例 本文主要介紹通過jenkins參數(shù)化構(gòu)建搭建CICD(持續(xù)集成/持續(xù)交付),主要介紹jenkins參數(shù)化構(gòu)建配置,jenkins本身搭建請(qǐng)查看官方...

    gaomysion 評(píng)論0 收藏0
  • 【容器云 UK8S】最佳實(shí)踐:基于Jenkins的CI/CD實(shí)踐

    摘要:擴(kuò)展性好當(dāng)集群的資源嚴(yán)重不足而導(dǎo)致排隊(duì)等待時(shí),可以很容易的添加一個(gè)到集群中,從而實(shí)現(xiàn)擴(kuò)展。用法,選擇盡可能使用這個(gè)節(jié)點(diǎn)鏡像,填寫,這個(gè)容器鏡像是我們的運(yùn)行環(huán)境。更新文件,這里我們只是將中的鏡像更換成最新構(gòu)建出的鏡像?;贘enkins的CI/CD實(shí)踐[TOC]一、概要提到K8S環(huán)境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新興的drone等,考慮到大多公司...

    Tecode 評(píng)論0 收藏0
  • GitOps:Kubernetes多集群環(huán)境下的高效CICD實(shí)踐

    摘要:在容器領(lǐng)域內(nèi),已經(jīng)成為了容器編排和管理的社區(qū)標(biāo)準(zhǔn)。就是的邏輯擴(kuò)展,它的核心目標(biāo)是為了更加高效和安全的應(yīng)用發(fā)布。第二個(gè)問題就是,生產(chǎn)環(huán)境的發(fā)布權(quán)限一般都是需要嚴(yán)格控制的,通常只有應(yīng)用管理員或者運(yùn)維管理員才有生產(chǎn)發(fā)布權(quán)限。 為了解決傳統(tǒng)應(yīng)用升級(jí)緩慢、架構(gòu)臃腫、不能快速迭代、故障不能快速定位、問題無法快速解決等問題,云原生這一概念橫空出世。云原生可以改進(jìn)應(yīng)用開發(fā)的效率,改變企業(yè)的組織結(jié)構(gòu),甚...

    wdzgege 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<