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
如下图:

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

- 方式1:进入容器中看
其中密码通过如下方式查看:
# 进入jenkins容器
docker exec -it jks /bin/bash
# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
- 方式2:使用命令查看
docker logs jks

2)、安装推荐的插件

大概需要等待3-10分钟
3)、安装插件
注意:第一次启动的时候正在加载jenkins大概会等待3-10分钟。

4)、创建新的用户

解决无法创建管理员账号的问题
在“创建管理员账号”界面,提交一直失败。查看服务器的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>
截图如下:

5)、成功运行

6、Jenkins全局工具配置

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

2)、Maven环境安装
maven选择指定版本自动安装即可。

3)、安装Jenkins对应Maven插件
找到 “系统管理“ - “安装插件” ,点击 “可选插件”,找到如下maven插件的版本
插件名称 Maven Integration

选择安装完成后重启服务

4)、安装Publish Over SSH

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


7、Jenkins实现Springboot项目自动部署
1)、新建一个发布任务

2)、基本配置

3)、源码管理

4)、构建触发器和构建环境
这个不需要太多设置

5)、Pre Steps

6)、Post Steps和构建设置
根据需要进行配置

7)、构建后操作


宿主机上的可执行脚本
#!/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、项目构建

