在centos下通過shell腳本拉取git代碼並部署

 

目錄

1.安裝maven

2.安裝git 

3.進入指定目錄初始化拉去代碼 

4.編寫自動化腳本 


前言:該項目使用的是微服務,jenkins拉取git代碼打包上傳至其他服務器併發布,但是由於企業配置的服務器帶寬太小,scp指定上傳包特別慢,所以只能考慮在其他各服務器上都拉取代碼並各自打包。

1.安裝maven

(1)下載安裝包

cd /usr/local
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz

(2)解壓安裝包

tar -zxvf  apache-maven-3.1.1-bin.tar.gz

 (3)配置環境變量

編輯配置

vim /etc/profile

 在文件末尾追加

export M2_HOME=/usr/local/apache-maven-3.1.1
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

重新加載配置

source /etc/profile 

(4)檢查安裝是否成功

mvn -v

(5)建立軟鏈接

cd /usr/bin
ln -s -f /usr/local/apache-maven-3.1.1/bin/mvn

(6)配置阿里倉庫

vim /usr/local/apache-maven-3.1.1/conf/settings.xml

2.安裝git 

yum install git -y

3.進入指定目錄初始化拉去代碼 

進入代碼目錄(隨意指定)

cd /root/home/code

 拉取代碼

git clone http://gitee.com/xxx.git

注:提示輸入用戶名和密碼

需要記住密碼,輸入以下指令

git config --global credential.helper store

查看配置

cat ~/.gitconfig

注:也可在服務器上創建公鑰在git上配置公鑰避免輸入用戶名和密碼

4.編寫自動化腳本 

由於項目是微服務架構,使用的是jenkins自動化拉取代碼在scp到各臺服務器上部署,但是由於企業提供的服務器帶寬太小,服務器之間scp指令傳輸太慢,所以使用shell在各臺服務器上自行拉取代碼。代碼配置如下,僅供大家參考,項目不一樣,配置信息各異。在jenkins構建選項中選擇執行shell,輸入如下:

#!/bin/bash 
BUILD_ID=dontKillMe
echo "********************部署開始********************"
if $repackage; then
		for  SER_PORT_IP in $(echo $tar_server_port) ; do
            SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
            SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
            SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
            JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
            if [[ "$TJAIR_SERVICE" == "$SERVICE_NAME" || "$TJAIR_SERVICE" == "all" ]]; then
            	echo "********************$SERVICE_NAME部署打包開始********************"
                mvn clean package -Dmaven.test.skip=true -pl "${SERVICE_NAME}" -am
                scp -P22 $SERVICE_NAME/target/$JAR_NAME.jar [email protected]:/root/home/deployer/projects
                echo "********************$SERVICE_NAME部署打包結束********************"
            fi
        done
fi
if $restart; then
        for  SER_PORT_IP in $(echo $tar_server_port) ; do
            SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
            SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
            SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
            JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
            if [[ "$TJAIR_SERVICE" == "$SERVICE_NAME" || "$TJAIR_SERVICE" == "all" ]]; then
            	echo "********************$SERVICE_NAME部署服務開始********************"
                echo "scp /root/home/deployer/projects/${JAR_NAME}.jar root@${SERVER_IP}:/root/home/deployer/projects";
                scp /root/home/deployer/projects/${JAR_NAME}.jar root@${SERVER_IP}:/root/home/deployer/projects
                echo "scp complete!"
                ssh root@${SERVER_IP} "mkdir -p /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT} && cp /root/home/deployer/projects/${JAR_NAME}.jar /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar && curl -fsSL http://www.ip.com/deployJar.sh | bash -s -- -t/root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar -p${SERVICE_PORT} -a-Dspring.profiles.active=test -l -f/var/log/deployer/service/${SERVICE_NAME}.log"
                echo "********************$SERVICE_NAME部署服務結束********************"
            fi
            if [ "$TJAIR_SERVICE" == "all" ]; then
                sleep 5
            fi
        done
fi
if $restart; then
        for  SER_PORT_IP in $(echo $other_sercer_port) ; do
            SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
            SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
            SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
            JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
            if [[ "$TJAIR_SERVICE" == "$SERVICE_NAME" || "$TJAIR_SERVICE" == "all" ]]; then
            	echo "********************$SERVICE_NAME部署服務開始********************"
                ssh root@${SERVER_IP} "cd /root/home/code/tjairsys && git pull origin master && cd /root/home/code/tjairsys/tjair-common-service && mvn clean install -Dmaven.test.skip=true && cd /root/home/code/tjairsys/${SERVICE_NAME} && mvn clean install -Dmaven.test.skip=true && cd target/ && cp ${JAR_NAME}.jar /root/home/deployer/projects/ && mkdir -p /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT} && cp /root/home/deployer/projects/${JAR_NAME}.jar /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar && curl -fsSL http://www.ip.com/deployJar.sh | bash -s -- -t/root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar -p${SERVICE_PORT} -a-Dspring.profiles.active=test -l -f/var/log/deployer/service/${SERVICE_NAME}.log"
                echo "********************$SERVICE_NAME部署服務結束********************"
            fi
            if [ "$TJAIR_SERVICE" == "all" ]; then
                sleep 5
            fi
        done
fi
echo "********************部署結束********************"

 jenkins上的變量配置:

1.branch 類型:字符串 默認:master 備註:分支

2.repackage 類型:布爾 默認:true 備註:重新打包

3.restart 類型:布爾 默認:true 備註:重新啓動

4.TJAIR_SERVICE 類型:選項 參數:tjair-base-service  備註:需要啓動的服務

5.tar_server_port 類型:文本 參數:tjair-admin-service:9002:127.0.0.1:tjair-admin-service-0.0.1 備註:jenkins本機上要部署的服務

6.other_server_port 類型 文本 參數:tjair-base-service:9020:外網ip:base-0.0.1 備註:其他服務器上要部署的服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章