分享下怎么使用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. vi编辑器中删除文件中所有字符

    在命令模式下,将光标移动到文档最上方(使用gg命令),然后输入dG,删除工作区内所有缓存数据. 如果想要删除某行文档以下的内容,将光标移动到文档相应行,然后输入dG即可.

  2. shell脚本实战

    想写个脚本,发现都忘了,蛋疼,一边回忆一边查一边写,总算完成了,贴在下面: #!/bin/bash #Program: # This program can help you quickly rede ...

  3. CentOS7.6静默(无图形化界面)安装Oracle 11g

    一.准备工作 1.准备CentOS 7 系统环境 由于是使用静默模式(silent)安装的,无需使用图形化界面,我选择了最小安装的服务器版的CentOS 7.安装完成后,只有命令行界面. 2.下载 O ...

  4. 010-SaltStack及SaltStack Web UI安装部署

    saltstack web uiweb平台界面 saltapi项目主页:http://salt-api.readthedocs.org/en/latest/ halite 项目主页:https://g ...

  5. [牛客] [#1108 J] [树形结构] 买一送一

    2019牛客国庆集训派对day3 链接:https://ac.nowcoder.com/acm/contest/1108/J来源:牛客网 题意 ICPCCamp 有 n 个商店,用 $1,2,..., ...

  6. 检测字符串是否为UTF8编码

    /** * 检测字符串是否为UTF8编码 * @param string $str 被检测的字符串 * @return boolean */ function is_utf8($str){ $len ...

  7. 递归型SPFA+二分答案 || 负环 || BZOJ 4773

    题解: 基本思路是二分答案,每次用Dfs型SPFA验证该答案是否合法. 一点细节我注释在代码里了. 代码: #include<cstdio> #include<cstring> ...

  8. Jquery+json绑定带层次下拉框(select控件)

    一.实现的效果图 备注: 1.主要实现添加类别绑定到Ztree树之后,select下拉框在不刷新页面的情况下,通过Jquery重新绑定问题,增加用户体验度: 2.这个只是实现两层的绑定,通过sql语句 ...

  9. SQL Server判断表中某字段是否存在【转】

    --比如说要判断表A中的字段C是否存在两个方法: 一, IF EXISTS ( FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID=T2.ID W ...

  10. Android Studio实现登陆注册功能之手机号验证

    我们平常写的登陆注册功能,就是很普通的注册一个账号,设置密码,然后登录.这次,想写一个与之前稍微不一样的登陆注册界面,于是想到了手机号验证的方式. 现在我们市面上出现的很多app,都是采用的手机号注册 ...