元のアドレスwww.freesion.com
環境の説明:
- テクノロジースタック: svn + maven + jdk1.8 + springboot + Jenkins + linux シェル
- Jenkins の要素:Subversion + Maven 統合プラグイン+ SSH 経由で公開
- Jenkins が存在するホスト: 192.168.122.5
- プロジェクト展開サーバー: 192.168.122.4
準備条件:
- Jenkins シリーズ チュートリアル 1: Linux への Jenkins のデプロイ
- Jenkins シリーズ チュートリアル 4: jdk と maven の構成
- Jenkins シリーズ チュートリアル 5: Jenkins は Maven プロジェクト プラグインをインストールします: Maven 統合プラグイン
- Jenkins シリーズ チュートリアル 6: Jenkins での Publish over SSH プラグインのインストールと構成
- Jenkins シリーズ チュートリアル 7: Jenkins の svn プラグインをインストールして構成する
1. 新しいフリースタイルプロジェクトを作成する
新しいタスク: tes-rollback
2. 廃棄戦略
3. パラメータ化されたビルドプロセスを構成する
3-1. オプションパラメータの追加
このプロジェクトがパラメータ化されていることを確認します->パラメータを追加->パラメータを選択
以下に示すようにパラメータを設定します。
3-2. キャラクターパラメータの追加
パラメータを追加->文字列パラメータを選択
以下に示すようにパラメータを設定します。
4. ソースコード管理
4-1. プロジェクトのsvnアドレスを入力
ソースコード管理 -> Subversion を選択 -> プロジェクトの svn アドレスを入力 注
: svn アドレスの後に @HEAD を追加すると、毎回最新のコードがプルされます
4-2. svnのユーザー名とパスワードを入力
4-3. 設定したユーザーを選択します
5-1. Mavenのパッケージ化設定
最上位の Maven ゴールを呼び出すことを選択します
ターゲットにパッケージ化コマンドを入力します: clean install -Dmaven.test.skip=true -Pdev
注: -Pdev は、プロジェクトが環境を区別するためのものなので、追加する必要はありません。
5-2. シェル設定の実行(バックアップ)
ビルドにビルドステップを追加 -> シェルを実行
次のスクリプトを入力します。
case $Status in
Deploy)
echo "Status:$Status"
path="${WORKSPACE}/bak/${BUILD_NUMBER}"
if [ -d $path ];
then
echo "The files is aready exists "
else
mkdir -p $path
fi
\cp -f ${WORKSPACE}/target/*.jar $path
echo "Completing"
;;
Rollback)
echo "Status:$Status"
echo "Version:$Version"
cd ${WORKSPACE}/bak/$Version
\cp -f *.jar $path ${WORKSPACE}/target
;;
;;
*)
exit
;;
esac
リリース後は以下のようにバックアップされます
5-3. バックアップスクリプトを定期的に削除する
プロジェクトのバックアップを無制限に行うとディスクがすぐにいっぱいになってしまうため、古いバックアップを消去するメカニズムが必要です。ここではスクリプトが構成されており、リリースごとに 1 回実行され、バックアップの数が 5 を超えているかどうかが判断されます。超えている場合は、古いバックアップを削除し、最新の 5 つだけを保持します。
別のシェル実行ステップを追加し、次のスクリプトを入力します。バックアップの数を変更して増減できます。
ReservedNum=5
FileDir=${WORKSPACE}/bak/
date=$(date "+%Y%m%d-%H%M%S")
cd $FileDir
FileNum=$(ls -l | grep '^d' | wc -l)
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt | head -1)
echo $date "Delete File:"$OldFile
rm -rf $FileDir/$OldFile
let "FileNum--"
done
6.展開(jenkins和应用在同一台服务器,直接部署即可
)
ビルド時のシェル スクリプトを追加します。
echo "==========定义常量=========="
APP_NAME=jenkins-demo.jar
echo "==========重命名 =========="
mv target/*.jar $APP_NAME
echo "========== 杀掉之前的进程 =========="
BUILD_ID=dontKillMe
PIDS=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'`
for pid in $PIDS;
do kill -9 $pid;
done
echo "========== 进程停止结束 =========="
tempPath=logs
if [ ! -d "$tempPath" ]; then
mkdir $tempPath
fi
#ps -ef | grep "$APP_NAME" | grep -v grep |awk "{print $2}" |xargs kill -9
echo "========== 开始启动 java 项目 =========="
#echo "********************************************************************"
#echo "****如果脚本使用nohup启动,则必须在他之前指定BUILD_ID(名字可以随便定义)**"
#echo "********************************************************************"
BUILD_ID=jenkins-demo
nohup java -jar $APP_NAME --server.port=81 > ./logs/nohup.log 2>&1 &
echo "==========项目启动成功,开始输出日志,请稍后 …… =========="
sleep 3
tail -n 800 ./logs/nohup.log
7.展開-( jenkins和应用不在同一台服务器
)
ビルド後のアクションを追加する
7. プロジェクト展開サーバー スクリプト
7-1. スクリプトを書く
サーバー 192.168.122.4 で次のコマンドを実行します。
mkdir -p /root/Jenkins-in/
cd /root/Jenkins-in/
vi remit-channel.sh
スクリプトの内容は次のとおりです。
#!/bin/bash
DATE=$(date +%Y%m%d%H%M%S)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/data/jdk1.8.0_261
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR="/data/P4/p4-remit-channel"
JARFILE="p4-remit-channel-0.0.1-SNAPSHOT.jar"
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
mv -f $JARFILE backup/$JARFILE$DATE
mv -f /root/Jenkins-in/$JARFILE .
java -jar -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m $JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
7-2. スクリプト実行権限
chmod +x test-job.sh
- メイン プロジェクト インターフェイスに戻り、[Build with Parameters] をクリックします。
- 公開するには、「デプロイ」->「ビルドの開始」を選択して公開を開始します。
- ロールバックするには、[ロールバック] を選択します --> ロールバック バージョンを入力 ----> ビルドを開始し、ビルド履歴から入力バージョン番号を選択します
1. Jenkins を使用して SpringBoot プロジェクトを自動的にデプロイする: https://blog.csdn.net/zjh_746140129/article/details/80904876
2. Jenkins バージョンのロールバック: https://www.jianshu.com/p/af5fecaa8357