当前位置:   article > 正文

使用docker jenkins 一键打包部署博客后台_"docker container ls -a |grep \"jenkinsdemo"

"docker container ls -a |grep \"jenkinsdemo"

原文地址:https://www.zhua91.com/#/detail/50

 

一、jenkins是什么?

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

jenkins官方文档地址:https://www.jenkins.io/zh/doc/

二、使用docker安装jenkins

建议参照官网 使用Maven构建Java应用程序 使用docker安装jenkins,当然也可以参照我的命令安装。

下载Jenkins的Docker镜像: 

docker pull jenkins/jenkins:lts

在Docker容器中运行Jenkins: 

  1. docker run \
  2. -d \
  3. -it \
  4. -p 8081:8080 \
  5. -p 50000:50000 \
  6. -u root \
  7. -v /usr/local/jenkins:/var/jenkins_home \
  8. -v /usr/local/maven:/var/maven_home \
  9. -v /var/run/docker.sock:/var/run/docker.sock \
  10. -v /usr/bin/docker:/usr/bin/docker \
  11. --name jenkins \
  12. jenkins/jenkins

 

jenkins docker镜像经常遇到的volume权限问题:

这是因为jenkins容器里面的用户是jenkins,而你的主机用户不是jenkins,就算是root也不行一样报错

方式一:

这个时候我们就需要在主机上面给主机地址赋予权限,赋予它可以访问jenkins容器的权限,jenkins内部用的是uid 1000 的user 

chown -R 1000  /root/jenkins_home

再运行jenkins容器就不会报错了

方式二:

在执行docker run命令的时候增加一个-u参数,覆盖容器中内置的帐号,该用外部传入,这里可以传入0代表的是root帐号Id,也可以传入 root 

注意挂载-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker,才可以共享宿主机的docker资源   

 

 三、配置jenkins环境

配置git、jdk、maven等环境

docker jenkins 镜像自带jdk,路径为 /usr/local/openjdk-8

maven 环境我是通过映射主机目录

 

 

 

四、改造springboot博客后台项目

修改pom.xml配置文件

引入docker依赖 

  1. <properties>
  2. <docker.image.prefix>zhua-blog</docker.image.prefix>
  3. </properties>
  4. <!-- docker插件 -->
  5. <plugin>
  6. <groupId>com.spotify</groupId>
  7. <artifactId>docker-maven-plugin</artifactId>
  8. <version>1.0.0</version>
  9. <configuration>
  10. <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
  11. <!--docker文件所在的目录-->
  12. <dockerDirectory>src/main/docker</dockerDirectory>
  13. <resources>
  14. <resource>
  15. <targetPath>/</targetPath>
  16. <directory>${project.build.directory}</directory>
  17. <include>${project.build.finalName}.jar</include>
  18. </resource>
  19. </resources>
  20. </configuration>
  21. </plugin>

创建dockerfile文件

src/main/resources/docker 下创建Dockerfile文件  

 

编辑dockerfile文件

  1. # Docker image for springboot file run
  2. # VERSION 0.0.1
  3. # Author: zhua
  4. # 基础镜像使用java
  5. FROM java:8
  6. # 作者
  7. MAINTAINER zhua <zhua_an@163.com>
  8. # VOLUME 指定了临时文件目录为/tmp。
  9. # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
  10. VOLUME /tmp
  11. # 将jar包添加到容器中并更名为app.jar
  12. ADD blog-resource.jar app.jar
  13. # 运行jar包
  14. RUN bash -c 'touch /app.jar'
  15. ENV JAVA_OPTS="-Xms128m -Xmx512m"
  16. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

解释下这个配置文件:

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source

如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。

 

五、配置jenkins

配置构建环境,构建命令(不需要加 mvn 命令)如下:

clean package -Dmaven.test.skip=true docker:build

 

代码上传git/svn,配置源码管理等其他配置后,主要配置镜像构建后操作,比如停止容器、删除容器、删除所有无名称的镜像、启动镜像,如下图:

 

 docker镜像 shell 执行命令:

  1. #!/bin/bash
  2. #-ilex
  3. imagesName="zhua-blog/blog-resource"
  4. echo "镜像名 ${imagesName}"
  5. containerid=`docker ps|grep ${imagesName} |awk '{print $1}'`
  6. imagesid=`docker images|grep -i ${imagesName}|awk '{print $3}'`
  7. #判断是否存在zhua-blog/blog-resource容器
  8. if [[ ${containerid} -ne 0 ]]; then
  9. echo "${imagesName} 准备 shutdown 容器"
  10. docker stop ${imagesName}
  11. sleep 5
  12. echo "${imagesName} 准备删除容器"
  13. docker rm ${imagesName}
  14. else
  15. containerid=`docker container ls -a|grep ${imagesName} |awk '{print $1}'`
  16. if [[ ${containerid} -ne 0 ]]; then
  17. echo "${imagesName} 未启动"
  18. echo "${imagesName} 准备 删除"
  19. docker rm ${imagesName}
  20. else
  21. echo "${imagesName} 容器不存在"
  22. fi
  23. fi
  24. echo "启动镜像 ${imagesName}"
  25. docker run -d -it -p 8888:8888 --name zhua-blog ${imagesName}
  26. #sleep 1 #等3秒后执行下一条
  27. #Docker 删除所有无名称的镜像(悬空镜像)
  28. echo "删除所有无名称的镜像"
  29. docker rmi $(docker images -f "dangling=true" -q)
  30. echo "镜像操作完成..."
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/262270
推荐阅读
相关标签
  

闽ICP备14008679号