这篇博客的目的实现:使用jenkins从git仓库拉取java项目代码,并打成jar,然后在jenkins把jar包运行在docker容器里
(重点:有了这套自动化部署,不用再跑到服务器上打包上传,使用命令运行项目了。而是直接上传代码到git仓库,然后登录jenkins点击构建,项目便发布成功)
准备工作:
1、在CentOs7服务器上安装好jenkins (怎么安装请看之前的博客:https://www.cnblogs.com/spll/p/10020597.html)
2、在jenkins上做好全局配置jdk和maven (怎么配置,请看之前的博客:https://www.cnblogs.com/spll/p/9935891.html)
(需要注意:我本来想用docker安装jenkins,并运行jenkins,奈何在jenkins里配置jdk和maven总是配置不上,百度了其他博客后发现docker运行的jenkins容器确定配置起来好麻烦,所以才用服务器直接安装jenkins,这样配置起jdk和maven来确实方便多了)
接下来进入正题:
借鉴博客:https://www.cnblogs.com/sxdcgaq8080/p/10599166.html
jenkins配置maven,并修改maven的setting.xml配置文件,配置阿里云镜像仓库。要不然每次打包很慢,要下载依赖的jar包。我用的maven3.6.0版本。
maven的setting.xml配置内容:
<localRepository>/home/maven/repo</localRepository>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
一、jenkins上jdk和maven都配置好了,直接新建任务,输入名称,选择下面的构建一个maven项目
二、在任务配置页面,源码管理这配置git,我的git仓库地址用的码云,连接的账号密码在下面添加一个就行
三、如果maven配置好了,Build这里直接填上pom.xml,clean package
四、在配置Post Steps这里输入一行shell命令,这个命令执行了一个shell命令文件:dockerRun.sh,这个脚本文件里的目的就是通过shell命令把jenkins构建时生成的jar包移动到我们指定的目录,然后在指定目录里根据此jar包创建docker的镜像,然后运行命令创建容器并启动
4.1、dockerRun.sh文件我放在/home/javaProject目录下,此目录下需要两个文件,一个dockerfile用来生成docker镜像,另一个就是dockerRun.sh脚本命令文件,如下:
4.2、创建dockerfile文件:vi dockerfile,并内容如下:
FROM java:8
VOLUME /tmp
Add test01.jar test01.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test01.jar"]
add test01.jar test01.jar 第一个jar是当前所在目录下的项目jar包,第二个是重命名
4.3、创建dockerRun.sh脚本文件内容如下:
#=====================================================================================
#=================================1、定义初始化变量======================================
#=====================================================================================
#操作/项目路径(Dockerfile存放的路径)
BASE_PATH=/home/javaProject
#项目名称
SERVER_NAME=test01
#获此项目的取容器id
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')
#获取此项目的镜像id
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')
#=====================================================================================
#=========================2、移动jenkins已经构建好的jar包到Dockerfile所在目录=========================
#=====================================================================================
# 查找源jar文件名,进行重命名,最后将源文件移动到Dockerfile文件所在目录
function transfer(){
echo "=========================>>>>>>>移动jenkins构建好的jar到Dockerfile所在目录,并重命名为test01.jar"
mv /var/lib/jenkins/workspace/test01/target/jz-project-0.0.1-SNAPSHOT.jar /home/javaProject/test01.jar
echo "=========================>>>>>>>迁移完成Success"
}
#=====================================================================================
#==================================3、构建最新镜像=======================================
#=====================================================================================
# 构建docker镜像
function build(){
#无论镜像存在与否,都停止原容器服务,并移除原容器服务
echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
docker stop $CID
echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
docker rm $CID
#无论如何,都去构建新的镜像
#构建新的镜像之前,移除旧的镜像
if [ -n "$IID" ]; then
echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"
echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
docker rmi $IID
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"
else
echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"
cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
fi
}
#=====================================================================================
#==============================4、最后运行docker容器,启动服务===============================
#=====================================================================================
# 运行docker容器
# 先备份老的jar包
# 再移动新的jar包到Dockerfile文件所在目录
# 接着,构建新的镜像
# 最后运行最新容器,启动服务 2022年2月20日20:38:06:加上 -e TZ="Asia/Shanghai" 这条命令,不然项目里面的时间与服务器的时间不一致
function run(){
transfer
build
docker run -d -e TZ="Asia/Shanghai" --restart=always --name $SERVER_NAME -v /usr/local/apps/docker-demo/logs:/home/javaProject/logs
-p 8080:8080 $SERVER_NAME
}
#入口
run
如此一个构建任务的所有配置就算弄好了。。。
保存后点构建,控制台输出日志成功如下:完美,日志上也没报错信息
再看服务器,查看正在运行的容器:docker ps,成功如下:
打开浏览器访问服务器地址,成功如下:
。。。
版权归原作者 放学后一起去放牛啊 所有, 如有侵权,请联系我们删除。