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

上传完成后备用
 
#jenkins pipeline 脚本准备
node {
def JAVA_HOME = tool 'jdk'
env.PATH = "${JAVA_HOME}/bin:${env.PATH}" stage('拉取代码') {
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']])
} stage('构建') {
if ("${Status}"== 'Deploy') {
echo "JDK: ${JAVA_HOME}"
sh "/usr/local/maven/bin/mvn clean install -pl $module -am -U -Dmaven.test.skip=true"
echo '需要构建'
} else {
echo '不需要构建'
}
} def web_name = "${JOB_NAME}" stage('Status判断') {
if ("${Status}"== 'Deploy') {
jar_file = sh (
script: 'find $WORKSPACE/$module/target -name *.war',
returnStdout: true
).trim()
sh 'mkdir -p $WORKSPACE/bak/$BUILD_ID'
sh "(cp -a '${jar_file}' $WORKSPACE/bak/$BUILD_ID)"
echo '部署'
} else {
jar_file = sh (
script: 'find $WORKSPACE/bak/$Rollback_tag -name *.war',
returnStdout: true
).trim()
echo '回滚'
}
} war_file_name = sh (
script: "(basename '${jar_file}')",
returnStdout: true
).trim() config_file_name = sh (
script: 'basename ${config_file}',
returnStdout: true
).trim() old_BUILD_NUMBER = sh (
script: "(awk 'BEGIN{print '${BUILD_NUMBER}' - 1 }')",
returnStdout: true
).trim() stage('打印部署参数') {
echo "jar_file: ${jar_file}"
echo "war_file_name: ${war_file_name}"
echo "config_file: ${config_file}"
echo "config_file_name: ${config_file_name}"
echo "job_name: ${web_name}"
echo "old_BUILD_NUMBER: ${old_BUILD_NUMBER}"
echo "JDK: ${JAVA_HOME}"
} stage('构建镜像') {
if ("${Status}"== 'Deploy') {
REPOSITORY="registry.cn-beij.aliyuncs.com/service/${web_name}:${BUILD_NUMBER}"
sh """
mkdir -p dockerfile
cd dockerfile
yes|cp -a $config_file/log4j2.xml .
#yes|cp -a $config_file/config.properties .
yes|cp -a ${jar_file} . cat > Dockerfile << EOF
FROM registry.cn-beij.aliyuncs.com/basis/tomcat:v7
COPY ${war_file_name} /tmp
RUN unzip -oq /tmp/${war_file_name} -d /data/www/ && \
rm -rf /tmp/${war_file_name}
COPY log4j2.xml /data/www/WEB-INF/classes/log4j2.xml
#COPY config.properties /data/www/WEB-INF/classes/config.properties
EXPOSE
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
docker push $REPOSITORY
docker image rm $REPOSITORY |true
"""
}
else {
REPOSITORY="registry.cn-beij.aliyuncs.com/service/${web_name}:${Rollback_tag}"
echo "无需构建镜像直接回滚"
}
} stage('部署') {
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}"
} }

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

---
- hosts: '{{ host }}'
remote_user: java
gather_facts: false
vars:
REPOSITORY: '{{ REPOSITORY }}'
docker_name: '{{ web_name }}'
run_port: '{{ run_port }}'
tasks:
#下载镜像
- name: "Download images"
shell: docker pull {{ REPOSITORY }}
#删除在运行的旧容器
- name: "rm container"
shell: docker rm -f {{ docker_name }} | true
#启动容器
- name: "run container"
#shell: docker run -d -p {{ run_port }}: -v /usr/local/jdk:/usr/local/jdk -v /etc/localtime:/etc/localtime:ro --name {{ docker_name }} {{ REPOSITORY }}
shell: docker run -d -p {{ run_port }}: \
-v /usr/local/jdk:/usr/local/jdk \
-v /data/logs/Blockchain:/data/logs/Blockchain \
-v /data/logs/tomcatlogs/{{ docker_name }}:/usr/local/tomcat/logs \
-v /etc/localtime:/etc/localtime:ro \
--name {{ docker_name }} {{ REPOSITORY }}
register: result
#打印启动命令
- name: "print information"
debug: msg={{ result.cmd }}
~

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. centos7.2升级openssh7.9p1

    Centos7.2版本yum升级openssh版本最高到7.4,想要升级到更高的版本需要重新编译 一.查看当前openssh版本: [root@localhost ~]# ssh -VOpenSSH_ ...

  2. python-嵌套函数

    python-嵌套函数 定义:在函数体内用def定义一个函数,它的作用域只在该函数体内有效. def outside(): print("int the outside") def ...

  3. Summer training round2 #10(Training 30)

    A:签到题 B!:搜索+DP #include<bits/stdc++.h> #define mp make_pair #define pi pair<int,int> usi ...

  4. touch cyusbConfig.cmake

    touch cyusbConfig.cmake cmake文件丢失,与其解决问题,不如临时建立一个临时文件

  5. java poi

    import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.a ...

  6. 我说CMMI之六:CMMI的评估--转载

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dylanren/article/deta ...

  7. 【转载】浅析python日志重复输出问题

    出处:https://www.cnblogs.com/huang-yc/p/9209096.html 问题起源: ​ 在学习了python的函数式编程后,又接触到了logging这样一个强大的日志模块 ...

  8. 手机端自适应缩放显示 js

    <script> var _width = parseInt(window.screen.width); var scale = _width/640; var ua = navigato ...

  9. 如何让一个sprite绕一个点旋转,同时又可以实现指定旋转角度并慢慢停下的效果

    如何让一个sprite绕一个点旋转,同时又可以实现指定旋转角度并慢慢停下的效果 首先列出sprite围绕一个点旋转的公式,这个可以自己推导,假设sprite的起始位置为(x1,y1),围绕旋转的中心点 ...

  10. oracle 循环的一种写法

    for v_n in( select bb.temNum, bb.LOANTYPE from (select decode(bns.assignstate, '{016D68F9-719B-4EFC- ...