Docker容器中运行Jenkins实现自动化部署

前提环境

CentOS、Docker环境、JDK1.8、Git

步骤

一、使用Docker拉下jenkins镜像并运行

1、在docker上搜索jenkins镜像并拉取

[root@k8s-master ~]# docker search jenkins

随便找一个name拉镜像就可以,推荐stars多的,我选的是jenkins/jenkins

[root@k8s-master ~]# docker pull jenkins/jenkins

在这里插入图片描述
2、查看本地的docker镜像

[root@k8s-master ~]# docker images

如图,IMAGE ID为f8452248512b的镜像就是刚拉下来的jenkins镜像
在这里插入图片描述
3、运行jenkins镜像
命令主要是为了将宿主机的docker命令挂载到jenkins运行的docker容器中,因为以后jenkins运行shell脚本进行项目的镜像构建和镜像运行,需要用到docker命令。

首先需要新建文件夹,用来挂载docker目录

[root@k8s-master ~]# mkdir -pv /var/jenkins_home

创建后运行修改目录权限(非常重要!!!)

[root@k8s-master ~]# chown -R 1000 /var/jenkins_home

完成后运行下面命令,此处运行的端口号可以根据自己需要修改

[root@k8s-master ~]# docker run --name jenkins -p 8088:8080 -p 50000:50000 \
--restart=always -u root \
-v /var/run/docker.sock:/var/run/docker.sock  \
-v $(which docker):/bin/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /var/lib/docker/tmp:/var/lib/docker/tmp \
-v /var/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins

参数说明:部分摘自(https://www.jianshu.com/p/8b72eece7df8)

--restart=always #Docker重启后该容器也为随之重启
-u root          
#以root的身份去运行镜像(避免在容器中调用Docker命令没有权限)
#最好使用docker用户去运行
-v $(which docker):/bin/docker
#将宿主机的docker命令挂载到容器中
#可以使用which docker命令查看具体位置
-v /var/run/docker.sock:/var/run/docker.sock
#容器中的进程可以通过它与Docker守护进程进行通信
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
#libltdl.so.7是Docker命令执行所依赖的函数库
#容器中library的默认目录是 /usr/lib/x86_64-linux-gnu/
#把宿主机的libltdl.so.7 函数库挂载到该目录即可
#可以通过whereis libltdl.so.7命令查看具体位置
#centos7位置/usr/lib64/libltdl.so.7
#ubuntu位置/usr/lib/x86_64-linux-gnu/libltdl.so.7
-v /var/jenkins_home:/var/jenkins_home
#将运行的docker镜像目录挂载到本地的/var/jenkins_home

4、查看已运行的jenkins容器

[root@k8s-master ~]# docker ps

在这里插入图片描述
5、进入容器内部测试docker命令和系统命令等是否好使

[root@k8s-master ~]# docker exec -it 8bf12b05305e bash

输入上面的命令进入到容器内部后分别执行:

root@8bf12b05305e:/# docker -v

root@8bf12b05305e:/# ls

在这里插入图片描述
如果可以那么恭喜你完成了第一步!!!

二、配置Jenkins

打开浏览器访问:http://[你的ip地址]:[你的Docker容器映射的端口号]
等待jenkins初始化加载完成
在这里插入图片描述
这个密码的位置在映射的宿主机地址/var/jenkins_home/secrets/initialAdminPassword

进去之后出现插件页面,可以安装推荐的插件或者选择安装自己需要的插件,这里点选择安装自己需要的插件后点击全不选跳过插件安装(以后可以在jenkins主页面进行插件选择安装)
在这里插入图片描述
插件页面结束后进入创建管理员账号界面,这里可以根据需要进行账号创建,我的选择是使用admin账户继续(如果有需要之后也可以新建用户)
在这里插入图片描述

进入jenkins主页面
在这里插入图片描述
1、插件安装
a、安装Maven Integration插件
点击左侧Manage Jenkins后选择Manage Plugins,选择Available后在搜索框中输入Maven Integration勾选并点击Install without restart。在这里插入图片描述
b、安装GitLab插件
在这里插入图片描述
其他插件可以根据自己的需要安装,我这里安装的两个插件就已经可以从gitlab上拉下springboot项目的代码并构建了,如果不知道还需要安装什么插件,可以看看https://www.cnblogs.com/zhanglianghhh/archive/2018/10/11/9770529.html这位博主的博客

错误:
如果插件下载安装失败,需要更换更新网站,选择高级选项并更改Update Site

站点URL从:https://updates.jenkins.io/update-center.json改为如下地址

http://mirror.xmission.com/jenkins/updates/update-center.json

也可https去掉s更换为

http://updates.jenkins.io/update-center.json

实在不行百度吧,还有很多地址也可以换换试试

在这里插入图片描述

等待插件安装完成
在这里插入图片描述
2、配置全局环境变量
在这里插入图片描述
添加全局环境变量

Name:GIT_SSL_NO_VERIFY
Value:true
Name:PATH
Value:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

在这里插入图片描述
3、配置全局工具地址
在这里插入图片描述
a、配置JDK路径

首先通过命令进入容器内

[root@k8s-master ~]# docker exec -it 8bf12b05305e bash

输入echo $JAVA_HOME

root@8bf12b05305e:/# echo $JAVA_HOME

配置的JDK Name随便取,JAVA_HOME路径为上面命令获取的路径
在这里插入图片描述
b、配置git路径

在容器内继续输入which git,并配置git路径

root@8bf12b05305e:/# which git

小贴士:退出容器可以使用ctrl+p+q
在这里插入图片描述

c、配置Maven路径
这里选择让maven自动安装
在这里插入图片描述
到这里第二步就完成了!!!

三、配置Git仓库拉代码构建

1、回到Jenkins主界面选择左侧New Item,输入名字并选择构建一个maven项目
在这里插入图片描述
2、配置git地址
在这里插入图片描述
3、配置打包命令
在这里插入图片描述
4、添加构建完成后执行的shell命令

在这里插入图片描述

流程解析:项目构建完成后是war包,shell命令的作用是将此项目原来的docker容器停止并删除,然后将此项目的镜像也删除,之后将war包进行镜像构建并运行.

ps:项目在容器中运行可能会报错
错误提示: timezone region not found
错误原因:docker 容器内时区不是 CST 导致
解决办法:在dockerfile 中增加一下命令
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

下面是我的shell脚本(Dockerfile也在这里面创建),都有注释可以根据需要修改

#!/bin/bash
#1.2.3.4需要根据不同项目修改不同值
#1.服务名称
SERVER_NAME=demo

#2.启动dev配置文件
CONFIG_NAME=dev

#3.源war路径,mvn打包完成之后,target目录下的war包或jar包名称(包含后缀)
JAR_NAME=demo-0.0.1-SNAPSHOT.war

#4.端口
PORT=8088

# 源war路径  
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/$SERVER_NAME/target

#创建createImages和demo文件夹
mkdir -pv /var/jenkins_home/createImages/$SERVER_NAME

#在demo文件夹下创建Dockerfile文本文件
touch /var/jenkins_home/createImages/$SERVER_NAME/Dockerfile

#写入Dockerfile
cat >>/var/jenkins_home/createImages/$SERVER_NAME/Dockerfile<<EOF
FROM java:8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD $JAR_NAME $SERVER_NAME
ENTRYPOINT ["java","-jar","$SERVER_NAME","--spring.profiles.active=$CONFIG_NAME"]
EOF

# 打包完成之后,把war包移动到创建Docker镜像的目录(此目录包含Dockerfile文件)--->createImages,demo这两个目录需要自己提前创建(上面已经提前创建了)

JAR_WORK_PATH=/var/jenkins_home/createImages/$SERVER_NAME

echo "查询$SERVER_NAME的容器id"

DOCKER_ID=`docker ps -aqf name="$SERVER_NAME"`

echo "得到容器ID:$DOCKER_ID"

echo "stop $DOCKER_ID"

docker stop $DOCKER_ID

echo "rm $DOCKER_ID"

docker rm $DOCKER_ID

echo "查询$SERVER_NAME的镜像id"

IMAGES_ID=`docker images -q $SERVER_NAME`

echo "得到镜像ID:$IMAGES_ID"

echo "rmi $IMAGES_ID"

docker rmi $IMAGES_ID

echo "停止并清除镜像完成,进入创建新镜像过程"

echo "复制war包到/createImages/demo目录下"

#复制war包到/createImages/demo目录下
cp $JAR_PATH/$JAR_NAME $JAR_WORK_PATH

#切换到demo创建镜像文件夹目录下
cd $JAR_WORK_PATH

#修改文件权限
chmod 755 $JAR_NAME

echo "执行命令创建新镜像"

#执行docker创建镜像命令
docker build -t $SERVER_NAME .

#删除Dockerfile文本文件
rm /var/jenkins_home/createImages/$SERVER_NAME/Dockerfile

#运行镜像
docker run -d -p $PORT:$PORT --restart=always -u root --name $SERVER_NAME $SERVER_NAME

echo "运行新镜像,流程完毕,端口号为:$PORT"

四、构建并测试

回到Jenkins主界面并点击按钮构建,然后进入构建日志,至此整个流程就完成了!!!
在这里插入图片描述

附:

1、jenkins重新初始化admin
https://www.cnblogs.com/wukc/p/13384595.html
2、在jenkins提交保存配置时有时候会报403,这个应该在Configure global security里勾选csrf兼容
在这里插入图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值