Jenkins发布流程及脚本开发与配置

108 阅读1分钟

1、配置免密登录authorized_keys

ssh-rsa token jenkins主机

2、编写构建脚本

export JAVA_HOME=/opt/jdk-11
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

echo "export success"

 mvn clean install  -DskipTests -s settings.xml -U -DSPRING_PROFILES_ACTIVE=dev -DskipSwaggerUI=true

# mvn clean install -s settings.xml -U -DSPRING_PROFILES_ACTIVE=dev -DskipTests -DskipSwaggerUI=false
echo "mvn success"

3、ansible批量部署脚本

#使用ansible  需要先配置ssh key免密认证,22端口可以通信
#生成hosts 文件,要发布的机器列表
cat > hosts <<EOF
    10.249.106.204
EOF

DOMAIN="web";

echo "开始拷贝${DOMAIN}.jar..."

#copy 文件到目标机器;-i hosts all 使用上面生成的hosts文件中的全部机器,-v 详情,-m copy 指定模块, src=hosts 源文件, dest=/tmp/hosts 目标文件和路径, -u bsafe指定远程用户
#目标文件权限默认644
ansible -i hosts all -v -m copy -a "src=${DOMAIN}/target/${DOMAIN}.jar dest=/home/q/www/api/${DOMAIN}/jar/${DOMAIN}.jar" -u bsafe

echo "开始启动服务..."

#执行脚本
ansible -i hosts all -v -m shell -a "sh -x /home/q/www/shell/${DOMAIN}/start.sh" -u bsafe

4、启动脚本

#!/usr/bin/env bash

counter=1
counter_limit=20

projName=admin
port=8081
sdDir=/home/q/www/sd
baseDir=${sdDir}/api/${projName}
projDir=${baseDir}/jar
active=dev
cd ${baseDir}

DATE=`date +%Y-%m-%d`
#log_path="$(dirname $(readlink -f $0))/nohup.log"
logPath=${baseDir}/logs/nohup-${DATE}.log

echo $logPath

echo "****************开始构建${projName}任务****************"

#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
echo "by netstat port then get pid: $pid"
#pid=$(ps -ef | grep java | grep $projName | grep -v grep |awk '{print $2}');
#echo "by ps grep java then get pid: $pid"
#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
    echo '当前进程存在pid='  $pid;
    kill  -9  $pid;
else
  echo '进程不存在'
fi

echo "开始启动${projName}.jar"
JAVA_OPT="-Xms1g -Xmx1g"
JSP_AGENT="-javaagent:${sdDir}/jspAgent/JSPAgent.jar"
echo $JAVA_OPT

nohup /home/s/apps/jdk-11.0.10/bin/java $JAVA_OPT -jar ${projDir}/${projName}.jar -DSPRING_PROFILES_ACTIVE=dev --spring.profiles.active=${active} --jas
ypt.encryptor.password=y7wKU7wzAeT9DCwq --server.port=${port} > ${logPath} 2>&1 &

#nohup java -jar $JAVA_OPT ${projDir}/${projName}.jar -DSPRING_PROFILES_ACTIVE=dev --spring.profiles.active=${active} --jasypt.encryptor.password=y7wKU
7wzAeT9DCwq --server.port=${port} >${logPath} 2>&1 &

while true; do
if [ -n "$(sed -n "/Undertow started on port(s) ${port}/p" ${logPath})" ]; then
cat ${logPath}
echo "SUCCESS"
exit
else
counter=`expr ${counter} + 1`
fi

sleep 3

echo "当前:${counter}, 共计:${counter_limit}"

if [ ${counter} -gt ${counter_limit} ]; then
echo "FAILURE" >&2
exit 1
fi
done