Jenkins

Table of Contents

链接

pull jenkins

docker pull jenkins/jenkins

docker-compose.yml

version: "2"
services:
  jenkins:
    image: jenkins/jenkins
    ports:
      - 33331:8080
      - 50000:50000

dkc up -d 输出密码


*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

c3ee9fde9e6748d883b8359a4a03579c

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

使用密码进入页面,选择 `install suggested plugins`

  • 下载插件需要很长时间

Post Steps


# 保留文件数
RESERVED_NUM=5
# 模块文件夹
FILE_DIR=${WORKSPACE}/${MODULE}
# 备份文件夹
FILE_BAK_DIR=${FILE_DIR}/${PROFILES}/bak
DATE=$(date "+%Y%m%d-%H%M%S")
case ${STATUS} in
    Deploy)
        echo "发版"
        # 创建每次要备份的目录
        path="${FILE_BAK_DIR}/${BUILD_NUMBER}"
        if [ ! -d ${path} ]
        then
            mkdir -p ${path}
        fi
        # 将打包好的war包备份到相应目录,覆盖已存在的目标
        cp -f ${FILE_DIR}/target/*.jar ${path}
        # 进入备份目录
        cd ${FILE_BAK_DIR}
        # 当前有几个文件夹,即几个备份,删除多余备份
        fileNum=$(ls -l | grep '^d' | wc -l)
        while [ ${fileNum} -gt ${RESERVED_NUM} ]
        do
            # 获取最旧的那个备份文件夹
            oldFile=$(ls -rt | head -1)
            echo ${DATE} "删除备份文件:"${oldFile}
            rm -rf ${FILE_BAK_DIR}/${oldFile}
            let "fileNum--"
        done
        echo "备份完成"
        ;;
    Rollback)
        echo "回滚"
        echo "VERSION:${VERSION}"
        # 如果文件夹不存在或文件夹太小,则判断备份文件不存在,直接返回
        if [ ! -d ${FILE_BAK_DIR}/${VERSION} ] || [ $(du -s ${FILE_BAK_DIR}/${VERSION} | awk '{print $1}') -lt 100 ]
        then
            echo "备份文件不存在"
            # 抛出异常,让 Jenkins 构建失败
            set -e
            # 退出
            exit 1
        fi
        # 进入备份目录
        cd ${FILE_BAK_DIR}/${VERSION}
        # 将备份拷贝到程序打包目录中,并覆盖之前的war包
        cp -f *.jar ${FILE_DIR}/target/
        ;;
    *)
        set -e
        exit 1
        ;;
esac

构建后操作


#!/bin/bash
echo "进入服务"
EXPORT  BUILD_ID=dontkillme
EXPORT JAVA_HOME PATH CLASSPATH
JAVA_HOME=/data/jdk1.8.0_211
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
FILE_DIR=/runWork
JARFILE=dpb-admin-fms-0.0.1-SNAPSHOT.jar
PROFILE_JAR_FILE=uat_dpb-admin-fms-0.0.1-SNAPSHOT.jar
des_log=$FILE_DIR/uat_dpb-admin-fms.log
# 设置超时时间,如果达到超时时间项目还未启动则退出
TIMEOUT=100
# 根据模块使用响应端口号

if [ ! -d ${FILE_DIR} ]
then
   mkdir -p ${FILE_DIR}
fi

cd ${FILE_DIR}
mv ${JARFILE} ${PROFILE_JAR_FILE}
PROCESS_ID=$(ps -ef | grep ${PROFILE_JAR_FILE} | grep -v grep | awk '{print $2}')
# 如果该项目正在运行,就杀死项目进程
if [ ! -z "${PROCESS_ID}" ]
then
   echo "停止服务"
   kill -9 ${PROCESS_ID}
else
        echo "服务未启动"
fi
nohup java -jar ${PROFILE_JAR_FILE} -Xmx${Xmx} -Xms${Xms}  --spring.profiles.active=${PROFILES}  --server.port=${PORT} > $des_log 2>&1 &
# 如果该项目还未启动,则等启动后再执行下个发布任务,判断项目是否启动要用端口号占用,不能用进程,因为在项目启动的瞬间进程就有了
sleep 2
second=0
lastShellRow=0
echo [INFO] ">>>>>>>>>>> 日志所在位置"$des_log" 开始输出日志<<<<<<<<<<"

# 日志监测部分
while true
do
    nowShellRow=`cat $des_log |wc -l`
    showRow=$[nowShellRow-lastShellRow]
    if [[ $showRow -ge 0 ]]; then
        tail -n $showRow $des_log
    fi
    sum=`cat $des_log |grep '项目初始化完毕!' |wc -l`
    sum_jvm=`cat $des_log |grep 'JVM running for' |wc -l`
    failed_sign=`cat $des_log |grep 'Application run failed\|Failed to' |wc -l`
    if [ $second -ge 800 ];then
       echo [ERROR] ">>>>>>>>>> 部署等待时间过长 退出部署 <<<<<<<<<<<"
       ps -ux|grep $PROFILE_JAR_FILE|grep "port="$2|grep -v grep|awk '{print $2}'|xargs kill -9
       exit 1
       break
    fi
    if [ $sum -gt 0 ] || [ $sum_jvm -gt 0  ];then
        echo [INFO] ">>>>>>>>>> 项目启动花费 $second 秒 <<<<<<<<<<"
       break
    fi
    if [[ $failed_sign -gt 0 ]];then
        echo [INFO] ">>>>>>>>>> 项目启动花费 $second 秒 <<<<<<<<<<"
        echo [ERROR] ">>>>>>>>>>> 项目启动失败 <<<<<<<<<<<"
        exit 1
        break
    fi
    second=$((second + 2))
    lastShellRow=$nowShellRow
    sleep 2
done

plugs

  • git.jpi
  • git-client.jpi
  • git-server.jpi
  • git-parameter
  • github.jpi
  • github-api.jpi
  • github-branch-source.jpi
  • publish-over.jpi
  • publish-over-ssh.jpi

Date: 2022-06-01 三 16:14