Docker系列之搭建Jenkins持续集成Maven项目

持续集成(Continuous integration,简称CI)指频繁将代码集成到主干,持续集成的目的就是让产品可以快速迭代,同时还能保持高质量,一般包括代码拉取、构建、测试、部署等步骤。Jenkins是一款流行的开源持续集成工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。更多详情请参阅Jenkins官网

1. 安装Jenkins

本文使用docker-compose进行安装,需提前准备好docker和docker compose
新建docker-compose.yml文件,输入以下配置

version: '3.7'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins:lts-jdk11
    restart: unless-stopped
    ports:
      - '8082:8080'
      - '50000:50000'
    volumes:
      - ./jenkins-data:/var/jenkins_home:rw
      - ./jenkins/var/run/docker.sock:/var/run/docker.sock:rw
      - D:\Java\apache-maven-3.6.3:/var/java/maven
      - E:\var\java\repository:/var/java/repository:rw
    networks:
      - gljk
networks:
  gljk:
    driver: bridge

jenkins/jenkins:lts-jdk11镜像已经包含了jdk11,不需要另外安装jdk,maven可以使用宿主机的maven及配置
在docker-compose.yml目录下,执行命令docker-compose up jenkins -d
Docker系列之搭建Jenkins持续集成Maven项目_第1张图片

2. 配置JDK和Maven环境变量

使用root权限进入jenkins容器实例

docker exec -u 0 -it 容器ID /bin/bash

使用vim打开/etc/profile,如果没有vim命令,可以使用apt-get update和apt-get install vim安装
Docker系列之搭建Jenkins持续集成Maven项目_第2张图片
在/etc/profile中加入下面配置

export JAVA_HOME=/opt/java/openjdk
export MAVEN_HOME=/var/java/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

Docker系列之搭建Jenkins持续集成Maven项目_第3张图片
执行source /etc/profile使其生效
使用java -version和mvn -v查看jdk和maven版本
Docker系列之搭建Jenkins持续集成Maven项目_第4张图片

3. 登陆

浏览器输入地址:http://localhost:8082
Docker系列之搭建Jenkins持续集成Maven项目_第5张图片
在该文件或Jenkins启动日志或/var/jenkins_home/secrets/initialAdminPassword中找到密码,点击继续
Docker系列之搭建Jenkins持续集成Maven项目_第6张图片
选择安装推荐的插件,也可以自行安装需要的插件,选择好适合的插件后,点击安装
Docker系列之搭建Jenkins持续集成Maven项目_第7张图片
安装插件
Docker系列之搭建Jenkins持续集成Maven项目_第8张图片
等待插件安装完成,进入创建用户界面
Docker系列之搭建Jenkins持续集成Maven项目_第9张图片
这里选择使用admin账户,进入实例配置页面
Docker系列之搭建Jenkins持续集成Maven项目_第10张图片
点击保存并完成
Docker系列之搭建Jenkins持续集成Maven项目_第11张图片
点击开始使用Jenkins,进入Jenkins首页
Docker系列之搭建Jenkins持续集成Maven项目_第12张图片
默认生成的密码较为复杂,可以修改为简单易记的密码,查看默认密码,需要先进入jenkins容器实例,在文件/var/jenkins_home/secrets/initialAdminPassword中
Docker系列之搭建Jenkins持续集成Maven项目_第13张图片
找到Password,输入新密码,点击保存
Docker系列之搭建Jenkins持续集成Maven项目_第14张图片
修改密码后,需要重新登陆Jenkins

4. 配置JDK和MAVEN

点击左侧菜单栏管理Jenkins

4.1. 配置全局工具

Docker系列之搭建Jenkins持续集成Maven项目_第15张图片
选择全局工具配置
找到JDK配置,配置如下信息
Docker系列之搭建Jenkins持续集成Maven项目_第16张图片
找到MAVEN配置,配置如下信息
Docker系列之搭建Jenkins持续集成Maven项目_第17张图片

4.2. 安装maven插件

在管理Jenkins页面选择插件管理
Docker系列之搭建Jenkins持续集成Maven项目_第18张图片
搜索maven插件
Docker系列之搭建Jenkins持续集成Maven项目_第19张图片
等待插件安装完成
Docker系列之搭建Jenkins持续集成Maven项目_第20张图片
勾选安装完成后重启Jenkins

5. 配置凭证

点击左侧菜单系统管理,选择凭证管理
Docker系列之搭建Jenkins持续集成Maven项目_第21张图片
点击全局---->添加凭据
Docker系列之搭建Jenkins持续集成Maven项目_第22张图片
选择用户名和密码类型,输入用户名、密码、ID、描述
Docker系列之搭建Jenkins持续集成Maven项目_第23张图片

6. 新建任务

点击左侧菜单新建任务
Docker系列之搭建Jenkins持续集成Maven项目_第24张图片
填写任务名称,选择maven项目
Docker系列之搭建Jenkins持续集成Maven项目_第25张图片
进入maven项目构建页面,选择源码管理
Docker系列之搭建Jenkins持续集成Maven项目_第26张图片
选择Git,在Repository URL中输入项目地址,在Credentials中选择git地址的凭据账号,在Branches to build中选择分支
Docker系列之搭建Jenkins持续集成Maven项目_第27张图片
在Build---->Goals and options中输入clean package -U -Dmaven.test.skip=true,可以跳过单元测试
Docker系列之搭建Jenkins持续集成Maven项目_第28张图片
在Post Steps---->Add post-build step中选择执行shell
Docker系列之搭建Jenkins持续集成Maven项目_第29张图片
在命令行中,编写如下shell脚本
Docker系列之搭建Jenkins持续集成Maven项目_第30张图片
完整shell脚本如下

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="jenkins-maven"

echo "待部署的应用服务器"
server_ips="xx.xx.xx.xx"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份"
ssh -Tq -o StrictHostKeyChecking=no root@${server_ip} << EOF
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}=`date "+%Y%m%d_%H%M%S"`.jar
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -o StrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh连接进行发布"
ssh -q -o StrictHostKeyChecking=no root@${server_ip} << EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
cd ${DIR}/${projectName}
sh stop.sh
sh start.sh
EOF

done

echo "success"

7. 配置SSH连接待部署服务器

回到jenkins容器,使用su jenkins切换到jenkins用户
在根目录下执行命令,一路按Enter即可

ssh-keygen -t rsa

Docker系列之搭建Jenkins持续集成Maven项目_第31张图片
复制.ssh目录下id_rsa.pub公钥为authorized_keys

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

对.ssh目录和authorized_keys文件分别授权700和600

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

同时也对待部署服务器授以相同的权限
将authorized_keys文件拷贝到待部署服务器

scp -p ~/.ssh/id_rsa.pub root@xx.xx.xx.xx:/root/.ssh/authorized_keys

Docker系列之搭建Jenkins持续集成Maven项目_第32张图片
第一次连接时会输入服务器密码,需要先在待部署服务器根目录下新建.ssh目录,另外为了部署应用需要在服务器根目录下先新建/data/app/jenkins-maven目录,并在该目录下新建start.sh脚本

#!/bin/bash
set -e
set -o pipefail

APP_ID=jenkins-maven
APP_DIR="/data/app"

nohup java -Dspring.profiles.active=dev -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > app_out.log & start_ok=false
if [[ $? = 0 ]];then
	sleep 1
	tail -n 10 app_out.log
	sleep 3
	tail -n 30 app_out.log
fi
aaa=`grep "Started" app_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
	echo "Application started ok"
  exit 0
else
  echo "Application started error"
  exit 1
fi

和stop.sh脚本

#!/bin/bash

APP_ID=jenkins-maven
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2'} | sh

8. 验证

回到Jenkins首页,点击新建任务列表右边三角形符号发布任务,运行完成后,在列表第一列可以查看运行结果,成功为勾,失败为叉
Docker系列之搭建Jenkins持续集成Maven项目_第33张图片
也可以直接点击任务名称
Docker系列之搭建Jenkins持续集成Maven项目_第34张图片
进入任务详情
Docker系列之搭建Jenkins持续集成Maven项目_第35张图片
点击左下角构建编号,进入控制台输出日志查看具体部署情况
Docker系列之搭建Jenkins持续集成Maven项目_第36张图片

你可能感兴趣的:(Docker,Jenkins,docker,Jenkins,持续集成)