根據jenkins任務名成進行編譯,打包,部署項目到指定的環境


根據jenkins任務名成進行編譯,打包,部署項目到指定的環境

  • 以下是根據項目進行編寫的歸檔部署腳本,后續添加其他項目時可以靈活擴展;
  • 美中不足的是,ansilbe執行語句調用變量還沒寫出來.用腳本了,就不想再寫個playbook(這個暫時寫不出來);
  • 那么就麻煩一點,ansible部署的部分,暫時很不靈活.只能固定格式了.
[root@localhost ~]# cat auto_archive_project_and_deploy.sh
#!/bin/bash
# by author HsLM_Z
# Tue Mar 10 09:43:33 CST 2020
# 根據jenkins任務名稱,判斷分支選擇歸檔方式並部署到指定分支
# jenkins任務名稱規則:liwanjia+項目名+分支名
######################################################################
# Step1: [參數1,為項目名稱(項目名成包含項目類型,項目發布環境)]
# Step2: [菜單]
# Step3: [創建臨時目錄],[打包備份],[刪除冗余文件]
# Step4: [對beta項目歸檔],[對manage項目歸檔],[對store-app項目歸檔]
# Step5: [對beta分支進行推送],[對manage分支進行推送],[對store-app分支進行推送]
######################################################################
######################################################################
######################################################################
# Step3
# 函數:創建臨時目錄;用途:存放臨時編譯后的代碼文件以及備份文件
function ArchiveBeforeMkdir(){
    echo "開始創建臨時目錄"
    [ ! -d $Jenkins_Dest ] && mkdir -p $Jenkins_Dest
    [ ! -d ${Jenkins_Dest}/backup ] && mkdir -p ${Jenkins_Dest}/backup
    [ ! -d ${Jenkins_Dest}/${ProjectName}/${Time_Now} ] && mkdir -p ${Jenkins_Dest}/${ProjectName}/${Time_Now}
}

# 函數:打包此次項目文件
#    cd 切換到臨時目錄
#    將目錄名改為 項目文件所在目錄
#    tar 打包項目文件所在目錄 打包名格式為 當前時間_任務名_tar.gz (此為備份文件)
#    tar 打包項目文件所在目錄 打包名格式為 項目文件所在目錄.tar.gz (此為用ansible批量部署使用名稱,固定名稱,方便管理)	
#    mv 將備份文件 copy至 備份目錄
function TarProject(){
    echo "開始打包並備份本次部署項目代碼"
    cd ${Jenkins_Dest}/${ProjectName}
    \mv ${Time_Now} $BeforeName
    tar -czPf ${ProjectName}_${Time_Now}_tar.gz $BeforeName
    tar -czPf ${BeforeName}.tar.gz $BeforeName
    \mv ${Jenkins_Dest}/${ProjectName}/${ProjectName}_${Time_Now}_tar.gz ${Jenkins_Dest}/backup
}

# 函數:刪除臨時打包文件
#    刪除項目文件所在目錄
#    刪除項目文件所在目錄.tar.gz
function Del_TarProject(){
    rm -rf ${Jenkins_Dest}/${ProjectName}/${BeforeName}
    rm -rf ${Jenkins_Dest}/${ProjectName}/${BeforeName}.tar.gz
}


######################################################################
# Step4
# 函數:歸檔java項目
#    定義變量,此變量定義java項目名稱
#    調用函數:創建臨時目錄
#    創建/lib目錄,用於存放java項目運行所需的jar包
#    使用for循環
#        調用java項目名稱變量,依次將jar包和項目運行依賴的jar包拷貝至指定目錄
#    如果找不到java項目名,輸出提示:找不到項目名稱
function Project_Beta_Archive(){
    echo "開始歸檔beta項目代碼"
    Jar_Name="lwjwlkj-service-product lwjwlkj-service-order lwjwlkj-service-user lwjwlkj-service-payment lwjwlkj-web"
    [ ! -d ${Jenkins_Dest}/${ProjectName}/${Time_Now}/lib ] && mkdir -p ${Jenkins_Dest}/${ProjectName}/${Time_Now}/lib
    for i in $Jar_Name;
    do
        Jar_Wrap=${i}-1.0-SNAPSHOT.jar
        if [ -f ${Jenkins_Source}/$i/target/${Jar_Wrap} -a -d ${Jenkins_Source}/$i/target/lib ];then
            \cp ${Jenkins_Source}/$i/target/${Jar_Wrap} ${Jenkins_Dest}/${ProjectName}/${Time_Now}
            \cp ${Jenkins_Source}/$i/target/lib/* ${Jenkins_Dest}/${ProjectName}/${Time_Now}/lib
        else
            echo -e "\-33[31mFile $Jar_Wrap cannot be found, please check.\033[0m";exit
        fi
    done
}

# 函數:歸檔manage項目
#    進入項目任務目錄
#    用npm命令編譯
#    判斷編譯成功后,將項目移動至臨時目錄
## yum install npm -y
## npm install
## npm run build
function Project_Manage_Archive(){
    echo "開始歸檔manage項目"
    cd ${Jenkins_Source}
    npm run build
    if [ $? -eq 0 ];then
        \cp -r ${Jenkins_Source}/dist/* ${Jenkins_Dest}/${ProjectName}/${Time_Now}/
    else
        echo -e "\-33[31merror: npm run build exec error.\033[0m";exit
    fi
    # /bin/chown -R www.root /usr/local/nginx/html/
}

# 函數:歸檔store_app項目;[liwanjia/store-app]

function Project_StoreApp_Archive(){
    echo "開始歸檔store-app項目"
    \cp -r ${Jenkins_Source}/* ${Jenkins_Dest}/${ProjectName}/${Time_Now}/
}


######################################################################
# Step5
#### 根據項目分支選擇部署操作 ####
## [root@localhost ~]# cat /etc/ansible/hosts
## [preprod]
##
## [master]
## 
## [frontpreprod]
##
## [frontmaster]
##

# beta項目
function Select_Beta_Master_Branch(){
    ansible master -m copy -a 'src=/data/jenknins_arichive/liwanjia-beta-master/lwjwlkj_jar.tar.gz dest=/data/'
    ansible master -m shell -a 'ls -lh /data/lwjwlkj_jar.tar.gz'
    ansible master -m shell -a 'tar xf /data/lwjwlkj_jar.tar.gz -C /data/'
    ansible master -m shell -a 'ls -lh /data/lwjwlkj_jar'
    ansible master -m script -a '/data/sh/liwanjia/auto_kill_and_start_java_project.sh'
}

function Select_Beta_Preprod_Branch(){
    ansible preprod -m copy -a 'src=/data/jenknins_arichive/liwanjia-beta-preprod/lwjwlkj_jar.tar.gz dest=/data/'
    ansible preprod -m shell -a 'ls -lh /data/lwjwlkj_jar.tar.gz'
    ansible preprod -m shell -a 'tar xf /data/lwjwlkj_jar.tar.gz -C /data/'
    ansible preprod -m shell -a 'ls -lh /data/lwjwlkj_jar'
    ansible preprod -m script -a '/data/sh/liwanjia/auto_kill_and_start_java_project.sh'
}

# manage項目
function Select_Manage_Master_Branch(){
    ansible frontmaster -m copy -a 'src=/data/jenknins_arichive/liwanjia-manage-master/admin.lwjwlkj.com.tar.gz dest=/data/'
    ansible frontmaster -m shell -a 'ls -lh /data/admin.lwjwlkj.com.tar.gz'
    ansible frontmaster -m shell -a 'tar xf /data/admin.lwjwlkj.com.tar.gz -C /usr/local/nginx/html/'
    ansible frontmaster -m shell -a '/bin/chmod -R 755 /usr/local/nginx/html/'
    ansible frontmaster -m shell -a 'ls -lh /usr/local/nginx/html/admin.lwjwlkj.com'
}

function Select_Manage_Dev_Branch(){
    ansible frontpreprod -m copy -a 'src=/data/jenknins_arichive/liwanjia-manage-dev/preadmin.lwjwlkj.com.tar.gz dest=/data/'
    ansible frontpreprod -m shell -a 'ls -lh /data/preadmin.lwjwlkj.com.tar.gz'
    ansible frontpreprod -m shell -a 'tar xf /data/preadmin.lwjwlkj.com.tar.gz -C /usr/local/nginx/html/'
    ansible frontpreprod -m shell -a '/bin/chmod -R 755 /usr/local/nginx/html/'
    ansible frontpreprod -m shell -a 'ls -lh /usr/local/nginx/html/preadmin.lwjwlkj.com'
}

# store-app項目
function Select_StoreApp_Master_Branch(){
    ansible frontmaster -m copy -a 'src=/data/jenknins_arichive/liwanjia-store-app-master/onlinestore.lwjwlkj.com.tar.gz dest=/data/'
    ansible frontmaster -m shell -a 'ls -lh /data/onlinestore.lwjwlkj.com.tar.gz'
    ansible frontmaster -m shell -a 'tar xf /data/onlinestore.lwjwlkj.com.tar.gz -C /usr/local/nginx/html/'
    ansible frontmaster -m shell -a '/bin/chmod -R 755 /usr/local/nginx/html/'
    ansible frontmaster -m shell -a 'ls -lh /usr/local/nginx/html/onlinestore.lwjwlkj.com'
    ansible frontmaster -m shell -a 'ls -lh /usr/local/nginx/html'
}
function Select_StoreApp_Dev_Branch(){
    ansible frontpreprod -m copy -a 'src=/data/jenknins_arichive/liwanjia-store-app-dev/preonlinestore.lwjwlkj.com.tar.gz dest=/data/'
    ansible frontpreprod -m shell -a 'ls -lh /data/preonlinestore.lwjwlkj.com.tar.gz'
    ansible frontpreprod -m shell -a 'tar xf /data/preonlinestore.lwjwlkj.com.tar.gz -C /usr/local/nginx/html/'
    ansible frontpreprod -m shell -a '/bin/chmod -R 755 /usr/local/nginx/html/'
    ansible frontpreprod -m shell -a 'ls -lh /usr/local/nginx/html/preonlinestore.lwjwlkj.com'
    ansible frontpreprod -m shell -a 'ls -lh /usr/local/nginx/html'
}

######################################################################
# Step2
#### 根據項目分支選擇部署操作 ####
# 函數:菜單
#    輸出:項目開始執行
#    判斷:jenkins任務目錄是否存在
#        不存在:輸出找不到項目
#    匹配任務名稱
#        定義變量路徑
#        定義變量目錄
#        調用函數:創建臨時目錄
#        調用函數:根據項目進行歸檔
#        調用函數:進行打包備份
#        調用函數:選擇分支進行推送
#        調用函數:刪除冗余文件
function menu(){
    echo -e "\033[32m##### $0 Begin $Time_Now\033[0m"
    if [ ! -d $Jenkins_Source ];then
        echo -e "\033[31mNot found Project $ProjectName\033[0m"
        exit
# [liwanjia/beta] java項目
    elif [ $ProjectName == "liwanjia-beta-master" ];then
        Project_Path="/data"
        BeforeName="lwjwlkj_jar"
	ArchiveBeforeMkdir
        Project_Beta_Archive
        TarProject
        Select_Beta_Master_Branch
        Del_TarProject
    elif [ $ProjectName == "liwanjia-beta-preprod" ];then
        Project_Path="/data"
        BeforeName="lwjwlkj_jar"
        ArchiveBeforeMkdir
        Project_Beta_Archive
        TarProject
        Select_Beta_Preprod_Branch
        Del_TarProject
    
# [liwanjia/manage] 后台管理系統項目
    elif [ $ProjectName == "liwanjia-manage-master" ];then
        Project_Path="/usr/local/nginx/html"
        BeforeName="admin.lwjwlkj.com"
        ArchiveBeforeMkdir
        Project_Manage_Archive
        TarProject
        Select_Manage_Master_Branch
        Del_TarProject
    elif [ $ProjectName == "liwanjia-manage-dev" ];then
        Project_Path="/usr/local/nginx/html"
        BeforeName="preadmin.lwjwlkj.com"
        ArchiveBeforeMkdir
        Project_Manage_Archive
        TarProject
        Select_Manage_Dev_Branch
        Del_TarProject

# [liwanjia/store-app] 商城系統
    elif [ $ProjectName == "liwanjia-store-app-master" ];then
        Project_Path="/usr/local/nginx/html"
        BeforeName="onlinestore.lwjwlkj.com"
        ArchiveBeforeMkdir
        Project_StoreApp_Archive
        TarProject
        Select_StoreApp_Master_Branch
        Del_TarProject
    elif [ $ProjectName == "liwanjia-store-app-dev" ];then
        Project_Path="/usr/local/nginx/html"
        BeforeName="preonlinestore.lwjwlkj.com"
        ArchiveBeforeMkdir
        Project_StoreApp_Archive
        TarProject
        Select_StoreApp_Dev_Branch
        Del_TarProject
    fi
}


######################################################################
# Step1
ProjectName=$1
# jenkins項目家目錄
Jenkins_Source="/root/.jenkins/workspace/${ProjectName}"
# jenkins臨時存放文件目錄
Jenkins_Dest="/data/jenknins_arichive"
# 當前時間
Time_Now=`date +%Y%m%d-%H%M`

menu $*
[root@localhost ~]# cat /data/sh/liwanjia/auto_kill_and_start_java_project.sh
#!/bin/bash
source /etc/profile
echo "ps -ef|grep lwjwlkj|grep -v grep"
ps -ef|grep lwjwlkj|grep -v grep

echo "kill -9 `ps -ef|grep lwjwlkj|grep -v grep|awk '{print $2}'`"
kill -9 `ps -ef|grep lwjwlkj|grep -v grep|awk '{print $2}'`
sleep 3

cd /data/lwjwlkj_jar
echo "start java project"
nohup java -jar lwjwlkj-service-user-1.0-SNAPSHOT.jar >/tmp/log/lwjwlkj_jar/lwjwlkj-service-user.log 2>&1 &
sleep 1
nohup java -jar lwjwlkj-service-product-1.0-SNAPSHOT.jar > /tmp/log/lwjwlkj_jar/lwjwlkj-service-product.log 2>&1 &
sleep 1
nohup java -jar lwjwlkj-service-order-1.0-SNAPSHOT.jar > /tmp/log/lwjwlkj_jar/lwjwlkj-service-order.log 2>&1 &
sleep 1
nohup java -jar lwjwlkj-service-payment-1.0-SNAPSHOT.jar >/tmp/log/lwjwlkj_jar/lwjwlkj-service-payment.log 2>&1 &
sleep 1
nohup java -jar lwjwlkj-web-1.0-SNAPSHOT.jar > /tmp/log/lwjwlkj_jar/lwjwlkj-web.log 2>&1 &
sleep 1
echo "ps -ef|grep lwjwlkj|grep -v grep"
ps -ef|grep lwjwlkj|grep -v grep


免責聲明!

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



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