jenkins+git构建jar包并把jar包运行在docker容器自动化部署

这篇博客的目的实现:使用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,成功如下:

   打开浏览器访问服务器地址,成功如下:

。。。

  • 40
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放学后一起去放牛啊

来了大爷,技术笔记不易求赏则个

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值