分享下怎么使用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. python之SSH远程登录

    一.SSH简介 SSH(Secure Shell)属于在传输层上运行的用户层协议,相对于Telnet来说具有更高的安全性. 二.SSH远程连接 SSH远程连接有两种方式,一种是通过用户名和密码直接登录 ...

  2. Django 数据库模块 单独使用

    pip install django pip install psycopg2 pip install mysqlclient Entity.py from django.db import mode ...

  3. 如何在 Ubuntu 上安装 pip

    1.为 Python 2 安装 pip 首先,确保已经安装了 Python 2. 在 Ubuntu 上,可以使用以下命令进行验证 python2 --version 如果没有错误并且显示了 Pytho ...

  4. 1.Go-copy函数、sort排序、双向链表、list操作和双向循环链表

    1.1.copy函数 通过copy函数可以把一个切片内容复制到另一个切片中 (1)把长切片拷贝到短切片中 ? 1 2 3 4 5 6 7 8 9 10 11 12 package main   imp ...

  5. Mongodb数据模型

    描述表关系的方式: 方式一:嵌入式 > db.person.find({name:'zjf'}).pretty() { "_id" : ObjectId("592f ...

  6. Windows KMS激活脚本

    @echo off&setlocal EnableDelayedExpansion&color 3etitle Windows KMS激活脚本 --by David :: 如果激活失败 ...

  7. Linux下查看Nginx,tomcat等的并发连接数和连接状态

    1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print ...

  8. POJ - 2774 Long Long Message (后缀数组/后缀自动机模板题)

    后缀数组: #include<cstdio> #include<algorithm> #include<cstring> #include<vector> ...

  9. oracle 数据库安装及jdbc的连接

    今天,我在oracle的官网下载了数据库并进行安装,其中遇到一些问题,在此进行记录. 1.下载,之后,按照网上的教程进行安装,开始遇到 下载之后出现11g 出现ins13001环境不满足最低要求 这个 ...

  10. Notepad++设置快捷键及外部命令

    <NotepadPlus> <InternalCommands> <Shortcut id="41020" Ctrl="no" A ...