第十八节 基于CentOS+Docker+Jenkins实现自动化部署

亮子 2022-03-12 04:20:45 22003 0 0 0

1、下载镜像

## 已升级为JDK11
## docker pull jenkins/jenkins:lts

## 请用这个版本,可以更新插件
docker pull jenkins/jenkins:2.344

2、准备目录

mkdir -p /server/jenkins

建议给这个目录设置一下权限,否则可能因为没有读写权限导致后面的容器创建失败:

# 如果创建后没有启动,请判断是否为目录权限问题
chmod -R 777 /server/jenkins

3、准备JAVA_HOME目录

由于容器内的java版本比较新,可能和开发的java版本不一致,为了避免不必要的问题,所以建议是保持java版本的一致。这样就需要在容器外面映射java的目录到容器中。

echo $JAVA_HOME

如下图:

JAVA_HOME

4、创建容器

docker run -di --name=jks -p 9080:8080 -v /server/jdk/jdk1.8.0_221:/opt/java/openjdk -v /server/jenkins:/var/jenkins_home jenkins/jenkins:2.344

5、第一次启动

1)、解锁jenkins

图片alt

  • 方式1:进入容器中看

其中密码通过如下方式查看:

# 进入jenkins容器
docker exec -it jks  /bin/bash

# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
  • 方式2:使用命令查看
docker logs jks

图片alt

2)、安装推荐的插件

图片alt

大概需要等待3-10分钟

3)、安装插件

注意:第一次启动的时候正在加载jenkins大概会等待3-10分钟。

图片alt

4)、创建新的用户

图片alt

解决无法创建管理员账号的问题

在“创建管理员账号”界面,提交一直失败。查看服务器的Jenkins log发现报错:

WARNING hudson.security.csrf.CrumbFilter#doFilter: Found invalid crumb dbd2b4d3defb81578df24c5e36d6446c767aade482b9e079b43388ed05d849aa.

WARNING hudson.security.csrf.CrumbFilter#doFilter: No valid crumb was included in request for /pluginManager/installPlugins by admin. Returning 403.

google一番后发现是因为新版本Jenkins的CSRF安全校验的问题,但是其他人都是在升级Jenkins时候遇到的,并没有按照的时候就遇到这种情况。

解决方法:

找到Jenkins安装目录,一般是在 /var/lib/jenkins 目录下。

修改该目录下的config.xml配置文件:

excludeClientIPFromCrumb 的值改为 true

命令如下:

cd /server/jenkins/
vi config.xml
  <crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>true</excludeClientIPFromCrumb>
  </crumbIssuer>

截图如下:

图片alt

5)、成功运行

图片alt

6、Jenkins全局工具配置

图片alt

1)、JDK环境配置

这个路径可以根据前面的配置,则无需在这里修改。如果是自动更新,需要从oracle服务下载,还得需要oracle账号,还是比较啰嗦的。

JDK的路径配置如下:

/opt/java/openjdk

图片alt

2)、Maven环境安装

maven选择指定版本自动安装即可。

图片alt

3)、安装Jenkins对应Maven插件

找到 “系统管理“ - “安装插件” ,点击 “可选插件”,找到如下maven插件的版本

插件名称 Maven Integration

图片alt

选择安装完成后重启服务

图片alt

4)、安装Publish Over SSH

图片alt

安装完Publish Over SSH插件后,需要重启Jenkins服务器,重启后,需要在系统管理-》配置-》Publish over SSH中配置ssh的ip和配置名字,然后在构建项目的构建后操作中,再配置通过ssh上传jar包以及运行jar包。具体如下图:

图片alt

图片alt

7、Jenkins实现Springboot项目自动部署

1)、新建一个发布任务

图片alt

2)、基本配置

图片alt

3)、源码管理

图片alt

4)、构建触发器和构建环境

这个不需要太多设置

图片alt

5)、Pre Steps

图片alt

6)、Post Steps和构建设置

根据需要进行配置

图片alt

7)、构建后操作

图片alt

图片alt

宿主机上的可执行脚本

#!/bin/bash

echo "server-demo-hello start"
SERVER_NAME="server-demo-hello"

source /etc/profile
cd /server/app

echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" |grep -v grep| awk '{print $2}'`
echo "得到进程ID:$PID"

if [ "$PID" = "" ]; then
    echo "线程不存在"
else
    echo "结束线程"
    for id in $PID
    do
        kill -9 $id
        echo "killed $id"
    done
fi

nohup java -Dcatalina.home=/server/app -jar -Dspring.profiles.active=dev server-demo-hello-0.0.1-SNAPSHOT.jar > demo.log 2>&1 &
echo "server-demo-hello start finish"

7、项目构建

图片alt

图片alt