海淀网站建设,网站设计好网站,营销技巧电影,做网站许昌上一篇文章#xff0c;我们完成了以下工作。 1)、docker部署jenkins 2)、建立第一个jenkins job 3)、通过jenkins job自动编译构建我们的github项目 上面所做的3个工作#xff0c;其实都是为了这一篇文章打基础#xff0c;不管是部署docker还是部署jenkins#xff0c;我们最…上一篇文章我们完成了以下工作。 1)、docker部署jenkins 2)、建立第一个jenkins job 3)、通过jenkins job自动编译构建我们的github项目 上面所做的3个工作其实都是为了这一篇文章打基础不管是部署docker还是部署jenkins我们最终的目的还是部署我们的项目让项目跑起来让流量进来这才是一个项目的真正意义所在。 这一篇文章我们就要让我们的项目部署到docker中跑起来。 文章目录 1、编写项目的Dockerfile2、jenkins增加镜像构建shell脚本3、编写一个简单的controller验证功能4、报错解决4.1、docker not found4.1.1、错误简述4.1.2 错误解决 4.2、no such file or directory4.2.1、错误简述4.2.1、错误解决 4.3、The container name xxx is already in use by container4.3.1、错误简述4.3.2、错误解决 5、附录 1、编写项目的Dockerfile
在我们项目的根目录增加一个Dockerfile文件文件名称就是Dockerfile注意不要带任何文件名后缀。
//1、基础镜像使用java:openjdk-8u111
FROM java:openjdk-8u111
//2、本地docker工作目录/var/lib/docker映射容器的/tmp目录
VOLUME /tmp
//3、将本地target路径下的testJenkinsDocker.jar包改为app.jar
ADD target/testJenkinsDocker.jar app.jar
//4、容器的访问端口是12000
EXPOSE 12000
//5、执行java -jar命令在容器中启动项目
ENTRYPOINT [java,-jar,/app.jar]将来会让jenkins根据这个Dockerfile构建我们的项目镜像
2、jenkins增加镜像构建shell脚本
增加这个shell脚本的目的是让jenkins根据我们编写的项目Dockerfile构建项目镜像然后根据项目镜像创建项目容器运行项目。 在流水线的操作页面点击configure。 然后拉到最下面增加一个build step 填入如下的内容(注意把注释删除)
#1、进入流水线的工作目录,这个docker_test_job是我们上一篇建立的job,这个job的作用是:自动编译构建我们的github项目,构建的结果就会发布到这个目录
cd /var/jenkins_home/workspace/docker_test_job
#2、根据Dockerfile构建一个镜像。最后的那个.的意思是使用当前目录的Dockerfile构建
docker build -t test_jenkins_docker .
#3、这条docker run命令上一篇介绍过了,这里不再赘述
docker run -d -p 12000:12000 --name testJenkinsDocker test_jenkins_docker:latest以上脚本的主要作用: 根据我们编写的项目Dockerfile构建一个项目镜像根据这个项目镜像创建一个项目容器并运行。
3、编写一个简单的controller验证功能
这个就不写了自己随便写一个浏览器访问验证一下
4、报错解决
4.1、docker not found
4.1.1、错误简述 这个报错是jenkins在构建项目执行脚本的时候报的报错很明显jenkins容器中并没有docker所以执行失败。没有docker我们装一个docker不就行了吗没这么简单我们可以登录一下jenkins的容器。可以看到容器的登录用户是jenkins不是root用户jenkins用户的权限不支持你安装docker。
4.1.2 错误解决
我在这个问题上卡了好一阵子尝试了很多方法都不行最终参考了国外老哥写的一篇文章解决了这个问题。原文地址 这个老哥的解决方案很简单进入容器不是root用户我们进入容器是root用户不就可以了吗所以不直接使用docker hub上下载下来的jenkins镜像了而是自己编写Dockerfile构建一个jenkins镜像Dockerfile内容如下
#1、基础镜像还是使用我们第一篇文章中的jenkins/jenkins:jdk11
FROM jenkins/jenkins:jdk11
#2、容器使用root用户
USER root
#3、基础镜像基于debian linux套件,所以下载软件使用apt-get命令
RUN apt-get update
#4、在容器中安装docker
RUN curl -sSL https://get.docker.com/ | sh可以看到我们的容器用户是root然后在容器中安装了docker
4.2、no such file or directory
4.2.1、错误简述 这个错误很明显就是jenkins在执行脚本构建项目镜像的时候找不到testJenkinsDocker-1.0-SNAPSHOT.jar文件
4.2.1、错误解决
我们可以到jenkins对应的流水线目录看一下到底有没有testJenkinsDocker-1.0-SNAPSHOT.jar呢。我们这个流水线名称是docker_test_job所以对应的流水线目录是 /var/jenkins_home/workspace/docker_test_job进到这个目录中看看jenkins打出来的jar包名字是不是testJenkinsDocker-1.0-SNAPSHOT.jar如果不是要修改项目中的Dockerfile文件让jar包名字保持一致
4.3、The container name xxx is already in use by container
4.3.1、错误简述 已经存在相同名称的镜像了所以docker build再次构建项目名称的镜像会报错。
4.3.2、错误解决
镜像已存在我们直接把已存在的镜像删除所以在jenkins执行脚本中的第一行命令下增加如下命令
#停止容器
docker stop testJenkinsDocker
#删除容器
docker rm testJenkinsDocker
#删除镜像
docker rmi test_jenkins_docker:latest最终的脚本内容
cd /var/jenkins_home/workspace/docker_test_job
docker stop testJenkinsDocker
docker rm testJenkinsDocker
docker rmi test_jenkins_docker:latest
docker build -t test_jenkins_docker .
docker run -d -p 12000:12000 --name testJenkinsDocker test_jenkins_docker:latest再次构建就可以了。这里我觉着肯定不应该这么麻烦但是我没有找到更好的方法如果有哪位大佬有更优的脚本希望指导一下。
5、附录
附录里想继续说下/var/jenkins_home/workspace/docker_test_job这个目录这个目录是jenkins的流水线目录其中存储着我们的docker_test_job流水线的信息这个目录下有啥呢?我们以我们创建的docker_test_job举例 其实就是我们的项目根目录看到这里其实就能理解jenkins中我们的脚本为啥第一行是 cd /var/jenkins_home/workspace/docker_test_job 这相当于进入了我们项目的根目录。