【Devops】【docker】【CI/CD】關於jenkins構建成功後一步,執行的shell命令詳解+jenkins容器運行宿主機shell命令的實現方法

 

1.展現這段shell命令 +詳解

#=====================================================================================
#=================================定義初始化變量======================================
#=====================================================================================

#操做/項目路徑(Dockerfile存放的路徑)
BASE_PATH=/apps/swapping


# jenkins構建好的源jar路徑,jenkins的workspace下,jenkins服務內地址爲:/var/jenkins_home/workspace
#由於docker啓動的jenkins,目錄進行了宿主機的目錄掛載,則使用宿主機目錄:  /apps/Devops/jenkins/workspace
#完整地址應爲:/apps/Devops/jenkins/workspace/項目名稱/target/  後面會進行拼接
SOURCE_PATH=/apps/Devops/jenkins/workspace


#【docker 鏡像】【docker容器】【Dockerfile同目錄下的jar名字[用它build生成image的jar]】【jenkins的workspace下的項目名稱】
#這裏都以這個命名[微服務的話,每一個服務都以ms-swapping這種格式命名]
#注意統一名稱!!!!!
SERVER_NAME=swapping

#容器id  [grep -w 全量匹配容器名] [awk 獲取信息行的第一列,即容器ID]  [不管容器啓動與否,都獲取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')

#鏡像id  [grep -w 全量匹配鏡像名] [awk 獲取信息行的第三列,即鏡像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')


#源jar完整地址  [jenkins構建成功後,會在本身的workspace/項目/target 下生成maven構建成功的jar包,獲取jar包名的完整路徑]
#例如:/apps/Devops/jenkins/workspace/swapping/target/swapping-0.0.1-SNAPSHOT.jar
SOURCE_JAR_PATH=$(find "$SOURCE_PATH/$SERVER_NAME/target/"  -name "*$SERVER_NAME*.jar" )

DATE=`date +%Y%m%d%H%M%S`


#=====================================================================================
#============================對本來已存在的jar進行備份================================
#=====================================================================================



# 備份
function backup(){
    if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
        echo "=========================>>>>>>>$SERVER_NAME.jar 備份..."
            mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
        echo "=========================>>>>>>>備份老的 $SERVER_NAME.jar 完成"

    else
        echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳過備份"
    fi
}



#=====================================================================================
#=========================移動最新源jar包到Dockerfile所在目錄=========================
#=====================================================================================


 
# 查找源jar文件名,進行重命名,最後將源文件移動到Dockerfile文件所在目錄
function transfer(){
       
         
    echo "=========================>>>>>>>源文件完整地址爲 $SOURCE_JAR_PATH"

        
    echo "=========================>>>>>>>重命名源文件"
        mv $SOURCE_JAR_PATH  $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar

    echo "=========================>>>>>>>最新構建代碼 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 遷移至 $BASE_PATH"
        cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH 

    echo "=========================>>>>>>>遷移完成Success"

}
 


#=====================================================================================
#==================================構建最新鏡像=======================================
#=====================================================================================


 
# 構建docker鏡像
function build(){
    
    #不管鏡像存在與否,都中止原容器服務,並移除原容器服務
    echo "=========================>>>>>>>中止$SERVER_NAME容器,CID=$CID"
    docker stop $CID

    echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
    docker rm $CID

    #不管如何,都去構建新的鏡像
    #構建新的鏡像以前,移除舊的鏡像
    if [ -n "$IID" ]; then
        echo "=========================>>>>>>>存在$SERVER_NAME鏡像,IID=$IID"


        echo "=========================>>>>>>>移除老的$SERVER_NAME鏡像,IID=$IID"
        docker rmi $IID

        echo "=========================>>>>>>>構建新的$SERVER_NAME鏡像,開始---->"
        cd $BASE_PATH
        docker build -t $SERVER_NAME .
        echo "=========================>>>>>>>構建新的$SERVER_NAME鏡像,完成---->"

    else
        echo "=========================>>>>>>>不存在$SERVER_NAME鏡像,構建新的鏡像,開始--->"


        cd $BASE_PATH
        docker build -t $SERVER_NAME .
        echo "=========================>>>>>>>構建新的$SERVER_NAME鏡像,結束--->"
    fi
}
 

#=====================================================================================
#==============================運行docker容器,啓動服務===============================
#=====================================================================================




# 運行docker容器
# 先備份老的jar包
# 再移動新的jar包到Dockerfile文件所在目錄
# 接着,構建新的鏡像
# 最後運行最新容器,啓動服務
function run(){
    backup
    transfer
    build

    docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro  -v /etc/timezone:/etc/timezone:ro  $SERVER_NAME 

}
 
#入口
run  

 

 

2.聲明

這段shell腳本是在宿主機/服務器上運行,不是在jenkins容器內運行的

 

3.實現方式

實現jenkins容器能夠運行宿主機上的shell命令,是經過給jenkins安裝Push Over SSH插件來完成的

具體步驟參見:http://www.javashuo.com/article/p-xsubxatg-bc.html最後一點!!html

相關文章
相關標籤/搜索