jenkins docker 发布
- #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"]

- 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 发布的更多相关文章
- 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...
- 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目
jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...
- Jenkins+Harbor+Docker发布
使用Jenkins发布Docke 需要准备的,docker,jenkins,Harbor docker安装 安装依赖: # yum install -y yum-utils device-mapper ...
- jenkins+docker+k8s项目发布
目录 一.简介 二.新建docker-build工程 三.项目部署 四.访问测试 一.简介 1.该章节基于jenkins.Harbor.pipeline.k8s来做发布,如对这些不熟悉,请按以下进入学 ...
- jenkins+docker 持续构建非docker in docker jenkins docker svn maven
工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...
- jenkins+docker 持续构建非docker in docker
工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...
- jenkins自动发布java代码
注:本文来源于<KaliArch> jenkins笔记 一.相关概念 1.1 Jenkins概念: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台. ...
- 基于 Jenkins+Docker+Git 的CI流程初探
在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...
- jenkins+docker持续集成实验
在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD).本文基于Jenkins+Docker+Git实现 ...
随机推荐
- SSD源码解读——网络测试
之前,对SSD的论文进行了解读,可以回顾之前的博客:https://www.cnblogs.com/dengshunge/p/11665929.html. 为了加深对SSD的理解,因此对SSD的源码进 ...
- Ceph实战入门之安部署篇
最近Ceph官方发布了luminous长久支持版,新版本增加了很多有意思的功能,但是入门还是先从部署安装开始. 环境说明 在Win10下安装VMware® Workstation 12 Pro软件,用 ...
- DOS批处理中%~dp0等扩充变量语法详解
有时候我们看到别人使用%~dp0 ~是扩展的意思,相当于把一个相对路径转换绝对路径%0代指批处理文件自身%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推%~d0 是指批处理所在的盘 ...
- 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 ...
- 一个简单的ETL脚本的内容
一个简单的ETL脚本应该包含如下内容 1.注释 2.设置字符集 3.基础路径参数 脚本路径 票据路径 日志路径 当前SHELL的脚本别名:declare SHELL_NAME=“${basename ...
- jquery 自定义右键菜单
如果要自定义右键菜单,那么就需要禁止原本的右键菜单,代码如下 document.oncontextmenu = new Function("return false;");//禁止 ...
- C++内存泄漏的几种情况
1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数 两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存:二是在类的构造函数中动态的分配了 ...
- 43 java中的异常处理机制的简单原理和应用
- 28.数组中出现次数超过长度一半的数字(python)
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 基于nc命令监控服务端口的Shell脚本
Shell代码: #!/bin/bash export LANG=en_US.UTF- #IP Address=127.0.0.1 #Port Port= #尝试的次数 n= #nc timeout, ...