分享下怎么使用jenkins 发布 docker
 
首先准备docker的相关部分
docker tomcat基础镜像,这边使用centos7做系统,dockerfile如下:
  1. #tomcat基础镜像
    #我这边先把tomcat 各项配置好了,然后重新打包,传入docker,tomcat的数据目录设置在 /data/www 下 ,机器上先装了JDK
  2. FROM centos:
  3. MAINTAINER www.cnblogs.com/fanpiao
  4.  
  5. ENV VERSION=8.5.
  6. ENV JAVA_HOME /usr/local/jdk
  7.  
  8. WORKDIR /usr/local/
  9. ADD apache-tomcat-${VERSION}.tar.gz .
  10.  
  11. RUN mv apache-tomcat-${VERSION} tomcat && \
  12. rm -rf apache-tomcat-${VERSION}.tar.gz && \
  13. yum install -y unzip && \
  14. mkdir -p /data/www
  15.  
  16. #ENV PATH $PATH:/usr/local/tomcat/bin
  17. #WORKDIR /usr/local/tomcat
  18. #EXPOSE
  19. #CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
打包成镜像,并上传到容器仓库
#可以和我一样使用阿里云提供的容器镜像服务,免费的

上传完成后备用
 
#jenkins pipeline 脚本准备
  1. node {
  2. def JAVA_HOME = tool 'jdk'
  3. env.PATH = "${JAVA_HOME}/bin:${env.PATH}"
  4.  
  5. stage('拉取代码') {
  6. checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: '', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'http://svn.yin.cn/repos/${version}/project']], quietOperation: false, workspaceUpdater: [$class: 'UpdateUpdater']])
  7. }
  8.  
  9. stage('构建') {
  10. if ("${Status}"== 'Deploy') {
  11. echo "JDK: ${JAVA_HOME}"
  12. sh "/usr/local/maven/bin/mvn clean install -pl $module -am -U -Dmaven.test.skip=true"
  13. echo '需要构建'
  14. } else {
  15. echo '不需要构建'
  16. }
  17. }
  18.  
  19. def web_name = "${JOB_NAME}"
  20.  
  21. stage('Status判断') {
  22. if ("${Status}"== 'Deploy') {
  23. jar_file = sh (
  24. script: 'find $WORKSPACE/$module/target -name *.war',
  25. returnStdout: true
  26. ).trim()
  27. sh 'mkdir -p $WORKSPACE/bak/$BUILD_ID'
  28. sh "(cp -a '${jar_file}' $WORKSPACE/bak/$BUILD_ID)"
  29. echo '部署'
  30. } else {
  31. jar_file = sh (
  32. script: 'find $WORKSPACE/bak/$Rollback_tag -name *.war',
  33. returnStdout: true
  34. ).trim()
  35. echo '回滚'
  36. }
  37. }
  38.  
  39. war_file_name = sh (
  40. script: "(basename '${jar_file}')",
  41. returnStdout: true
  42. ).trim()
  43.  
  44. config_file_name = sh (
  45. script: 'basename ${config_file}',
  46. returnStdout: true
  47. ).trim()
  48.  
  49. old_BUILD_NUMBER = sh (
  50. script: "(awk 'BEGIN{print '${BUILD_NUMBER}' - 1 }')",
  51. returnStdout: true
  52. ).trim()
  53.  
  54. stage('打印部署参数') {
  55. echo "jar_file: ${jar_file}"
  56. echo "war_file_name: ${war_file_name}"
  57. echo "config_file: ${config_file}"
  58. echo "config_file_name: ${config_file_name}"
  59. echo "job_name: ${web_name}"
  60. echo "old_BUILD_NUMBER: ${old_BUILD_NUMBER}"
  61. echo "JDK: ${JAVA_HOME}"
  62. }
  63.  
  64. stage('构建镜像') {
  65. if ("${Status}"== 'Deploy') {
  66. REPOSITORY="registry.cn-beij.aliyuncs.com/service/${web_name}:${BUILD_NUMBER}"
  67. sh """
  68. mkdir -p dockerfile
  69. cd dockerfile
  70. yes|cp -a $config_file/log4j2.xml .
  71. #yes|cp -a $config_file/config.properties .
  72. yes|cp -a ${jar_file} .
  73.  
  74. cat > Dockerfile << EOF
  75. FROM registry.cn-beij.aliyuncs.com/basis/tomcat:v7
  76. COPY ${war_file_name} /tmp
  77. RUN unzip -oq /tmp/${war_file_name} -d /data/www/ && \
  78. rm -rf /tmp/${war_file_name}
  79. COPY log4j2.xml /data/www/WEB-INF/classes/log4j2.xml
  80. #COPY config.properties /data/www/WEB-INF/classes/config.properties
  81. EXPOSE
  82. CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
  83. EOF
  84. docker build -t $REPOSITORY .
  85. docker push $REPOSITORY
  86. docker image rm $REPOSITORY |true
  87. """
  88. }
  89. else {
  90. REPOSITORY="registry.cn-beij.aliyuncs.com/service/${web_name}:${Rollback_tag}"
  91. echo "无需构建镜像直接回滚"
  92. }
  93. }
  94.  
  95. stage('部署') {
  96. sh "/usr/bin/ansible-playbook /etc/ansible/playbook/docker-deploy.yaml -f 5 -e host=${host} -e REPOSITORY=${REPOSITORY} -e docker_name=${web_name} -e run_port=${run_port}"
  97. }
  98.  
  99. }

ansbile-playbook准备,ansbile ,host主机的配置请自己先配置

  1. ---
  2. - hosts: '{{ host }}'
  3. remote_user: java
  4. gather_facts: false
  5. vars:
  6. REPOSITORY: '{{ REPOSITORY }}'
  7. docker_name: '{{ web_name }}'
  8. run_port: '{{ run_port }}'
  9. tasks:
  10. #下载镜像
  11. - name: "Download images"
  12. shell: docker pull {{ REPOSITORY }}
  13. #删除在运行的旧容器
  14. - name: "rm container"
  15. shell: docker rm -f {{ docker_name }} | true
  16. #启动容器
  17. - name: "run container"
  18. #shell: docker run -d -p {{ run_port }}: -v /usr/local/jdk:/usr/local/jdk -v /etc/localtime:/etc/localtime:ro --name {{ docker_name }} {{ REPOSITORY }}
  19. shell: docker run -d -p {{ run_port }}: \
  20. -v /usr/local/jdk:/usr/local/jdk \
  21. -v /data/logs/Blockchain:/data/logs/Blockchain \
  22. -v /data/logs/tomcatlogs/{{ docker_name }}:/usr/local/tomcat/logs \
  23. -v /etc/localtime:/etc/localtime:ro \
  24. --name {{ docker_name }} {{ REPOSITORY }}
  25. register: result
  26. #打印启动命令
  27. - name: "print information"
  28. debug: msg={{ result.cmd }}
  29. ~

jenkisn 的配置,需要如下设置如下参数

在流水线这里配置上刚才准备的 jenkins pipeline 脚本

保存后就完成了,效果如下

jenkins docker 发布的更多相关文章

  1. 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

    一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...

  2. 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目

    jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...

  3. Jenkins+Harbor+Docker发布

    使用Jenkins发布Docke 需要准备的,docker,jenkins,Harbor docker安装 安装依赖: # yum install -y yum-utils device-mapper ...

  4. jenkins+docker+k8s项目发布

    目录 一.简介 二.新建docker-build工程 三.项目部署 四.访问测试 一.简介 1.该章节基于jenkins.Harbor.pipeline.k8s来做发布,如对这些不熟悉,请按以下进入学 ...

  5. jenkins+docker 持续构建非docker in docker jenkins docker svn maven

    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...

  6. jenkins+docker 持续构建非docker in docker

    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...

  7. jenkins自动发布java代码

    注:本文来源于<KaliArch> jenkins笔记 一.相关概念 1.1 Jenkins概念: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台. ...

  8. 基于 Jenkins+Docker+Git 的CI流程初探

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...

  9. jenkins+docker持续集成实验

    在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD).本文基于Jenkins+Docker+Git实现 ...

随机推荐

  1. SSD源码解读——网络测试

    之前,对SSD的论文进行了解读,可以回顾之前的博客:https://www.cnblogs.com/dengshunge/p/11665929.html. 为了加深对SSD的理解,因此对SSD的源码进 ...

  2. Ceph实战入门之安部署篇

    最近Ceph官方发布了luminous长久支持版,新版本增加了很多有意思的功能,但是入门还是先从部署安装开始. 环境说明 在Win10下安装VMware® Workstation 12 Pro软件,用 ...

  3. DOS批处理中%~dp0等扩充变量语法详解

    有时候我们看到别人使用%~dp0 ~是扩展的意思,相当于把一个相对路径转换绝对路径%0代指批处理文件自身%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推%~d0 是指批处理所在的盘 ...

  4. Apache提示You don't have permission to access / on this server 解决

    本文链接:https://blog.csdn.net/Niu_Eva/article/details/90741894 Apache提示You don’t have permission to acc ...

  5. 一个简单的ETL脚本的内容

    一个简单的ETL脚本应该包含如下内容 1.注释 2.设置字符集 3.基础路径参数 脚本路径 票据路径 日志路径 当前SHELL的脚本别名:declare SHELL_NAME=“${basename ...

  6. jquery 自定义右键菜单

    如果要自定义右键菜单,那么就需要禁止原本的右键菜单,代码如下 document.oncontextmenu = new Function("return false;");//禁止 ...

  7. C++内存泄漏的几种情况

    1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数 两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存:二是在类的构造函数中动态的分配了 ...

  8. 43 java中的异常处理机制的简单原理和应用

  9. 28.数组中出现次数超过长度一半的数字(python)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  10. 基于nc命令监控服务端口的Shell脚本

    Shell代码: #!/bin/bash export LANG=en_US.UTF- #IP Address=127.0.0.1 #Port Port= #尝试的次数 n= #nc timeout, ...