docker jenkins+maven+webhook安装及自动化部署记录

使用docker安装Jenkins,利用maven插件及webhook实现代码推送到指定分支自动部署

一、Jenkins安装

docker安装Jenkins

系统:Ubuntu 20,其他系统对应修改下安装软件的命令即可

docker search jenkins

在这里插入图片描述
使用第二个安装

#下载镜像
sudo docker pull jenkins/jenkins
#下载完成后创建文件夹 dock启动 -v 挂载使用(按需创建)
mkdir -p /home/zhaopin/docker/jenkins
#加权限
chmod 777 /home/zhaopin/docker/jenkins
#启动容器
docker run -d -uroot -p 8000:8080 -p 50000:50000 --name jenkins -v /home/zhaopin/docker/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
#日志查看- 找初始密码(Please use the following password to proceed to installation 下面)
docker logs jenkins

目前用的阿里云的ecs服务器,端口映射的宿主机的8000端口,那需要对应安全组加上相关配置开放8000端口访问
在这里插入图片描述

Jenkins访问及初始化

为了插件可以快速正常安装,访问前修改hudson.model.UpdateCenter.xml文件 site url地址为国内地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json(清华大学官方镜像)
在这里插入图片描述
在这里插入图片描述

#重启容器
sudo docker restart jenkins
  1. 访问 http://IP:8000 进入页面,输入上述记录的初始化密码

在这里插入图片描述
ps:也可以用root用户,到挂载的宿主机对应文件查看 /home/zhaopin/docker/jenkins/secrets/initialAdminPassword

  1. 进入安装插件页面:

在这里插入图片描述
在这里插入图片描述

  1. 创建管理账户

按需创建完成后就可以进入了,下一步的地址不用修改。
在这里插入图片描述


二、安装Jenkins插件

maven部署需要安装插件,插件安装位置下图:
在这里插入图片描述
搜索安装, Maven Integration pluginSSH plugin(提示不安全,后续可以换其他用秘钥的插件)、Gitee Plugin(webhook使用)。
安装后重启,重启可能失败,可以sudo docker ps查看,也可以按需设置挂掉后自动重启。

sudo docker update --restart=always 容器名称

三、Jenkins容器安装maven

#进入容器
sudo docker exec -it 容器ID /bin/bash
apt update
#安装vim及wget工具
apt install vim
apt install wget
cd /usr/local/
#下载maven包
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -zxvf apache-maven-3.3.9-bin.tar.gz
rm apache-maven-3.3.9-bin.tar.gz
#设置maven环境变量
vi /etc/profile

/etc/profile文件末尾增加如下配置:

#set Maven environment
export MAVEN_HOME=/usr/local/apache-maven-3.3.9
export PATH=$MAVEN_HOME/bin:$PATH
 source /etc/profile
 #查看是否版本可以正常打出
 mvn -v

修改Jenkins全局工具配置中Maven配置:
在这里插入图片描述
页面底部的maven配置也对应加上
在这里插入图片描述


四、创建Maven项目

  1. 创建任务名

在这里插入图片描述

  1. 按需设置丢弃旧的构建

在这里插入图片描述

  1. 源码管理设置:

Credentials可以点击下方的添加按钮添加对应Repository url git项目账号密码
在这里插入图片描述

  1. 构建触发器

推送到指定分支的时候触发构建
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. Build 设置

按需填写maven build命令
在这里插入图片描述

  1. 编译完成后的设置Post Steps

执行指定脚本
在这里插入图片描述
如上设置好后,代码推送到deploy分支,Jenkins对应任务就会自动触发构建及部署,实现推送代码到指定分支即自动完成部署的操作。


附脚本

startup.sh 代码记录:

#!/bin/bash
JARNAME=interview-server.jar
#!编译好的 jar存放地址 Jenkins编译后的地址
SOURCE_DIR=/home/zhaopin/docker/jenkins_home/workspace/zhaopin/interview-server-web/target
#! jar 存放地址
CURR_DIR=/home/zhaopin/interview-server
#! jar 备份地址
BACK_DIR=/home/zhaopin/interview-server/backup


if [ -f "$CURR_DIR/$JARNAME" ];then
      mv $CURR_DIR/$JARNAME $BACK_DIR/$JARNAME.`date +%Y%m%d%H%M%S`
fi
#停止原项目
$CURR_DIR/launch/launch.sh stop

#拷贝Jenkins最新编译后的jar文件到指定目录
cp $SOURCE_DIR/$JARNAME $CURR_DIR

#!删除老旧的备份项目
cd $BACK_DIR
ls -lt | awk 'NR>5{print $NF}' | xargs rm -rf

#启动最新编译的项目
$CURR_DIR/launch/launch.sh start
echo "******************启动成功******************"

launch脚本:(项目文件下创建一个目录存放)
在这里插入图片描述

#!/bin/bash
source /etc/profile
DT=`date "+%Y%m%d%H%M%S"`
APP_PATH=$(cd `dirname $0`; cd ..; pwd)
[ -z "$APP_NAME" ] && APP_NAME=$(basename $APP_PATH)
[ -z "$MEM_HEAP" ] && MEM_HEAP=2048
[ -z "$JAVA_HOME" ] && JAVA_HOME=//usr/lib/jvm/java-8-openjdk-arm64
if [[ ! -d  "$JAVA_HOME" ]]; then
  echo "JAVA_HOME NOT EXISTS!"
  exit -1
fi
JAVA_OPTS="-server -Xmx${MEM_HEAP}m -Xms${MEM_HEAP}m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=3 -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintClassHistogram -XX:+PrintTenuringDistribution  -XX:+HeapDumpOnOutOfMemoryError -DappName=${APP_NAME} -Xbootclasspath/a:${APP_PATH}"

jar_path=${app_dir}/${jar_name}

# 停止脚本
stop(){
echo "正在停止服务..."
tid=`ps aux|grep "$APP_NAME.jar"|grep -v grep|awk '{print $2}' `
if [ "$tid" != "" ]; then
  echo "kill -15 $tid"
  kill -15 $tid
  for i in {1..15}
  do
    tid=`ps aux|grep "$APP_NAME.jar"|grep -v grep|awk '{print $2}' `
    if [[ "$tid" == "" ]]; then
      echo "程序已停止。"
      return 0
    fi
    sleep 1
  done

  tid=`ps aux|grep "$APP_NAME.jar"|grep -v grep|awk '{print $2}' `
  if [[ "$tid" != "" ]]; then
    echo "[$APP_NAME]PID[$tid]force kill : kill -9 $tid"
    kill -9 $tid
  fi
fi
}
#启动脚本
start(){
pid=`ps aux|grep "$APP_NAME.jar"|grep -v grep|awk '{print $2}' `
echo $pid
if [ -z "${pid}" ]; then
  nohup $JAVA_HOME/bin/java  $JAVA_OPTS $SGM_OPTS  -jar  $APP_PATH/$APP_NAME.jar >> start.log 2>&1 &
  echo "${APP_NAME} started"
else
  echo "${APP_NAME} 已启动。 pid:${pid} ."
fi
}

restart(){
stop
start
}

case $1 in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "restart")
    restart
    ;;
  *)
    echo "Usage: launch [start | stop | restart] "	
    ;;
esac
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值