1.前置条件

1)Docker开启TCP端口,CloudBees Docker Build and Publish plugin插件会向目标主机docker生成docker镜像

开启docker apiserver的2375管理端口,本示例在CentOS7环境下。编辑docker.service文件,修改ExecStart参数,添加-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

vim /lib/systemd/system/docker.service
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

2)搭建一个私有docker仓库,(可选)

有时候我们的镜像不希望对外公布,那么我们就需要自建docker仓库.在这方面harbor是一个不错的选择

有关harbor的搭建过程可以在网上查找

我这里没有私有化的需求,所以选择在docker hub上存放docker镜像即可.使用前需要到docker hub上注册一个账号

2.在jenkins中创建项目并进行配置

这里需要注意:

1.仓库名称前缀,请使用docker hub的账户名,如果使用harbor前缀未 harbor的用户名.并保证用户用push权限  ,示例:zhangsan/${JOB_NAME}

  如果不这样填写,会提示没有权限推送

2.Docker Host URI   请填写docker主机的地址,并确保docker打开了2375端口.(这个作为前置条件已经说明)

3.Docker registy URL 填写docker仓库的地址,不填写默认使用docker hub作为仓库地址

4.Registry credentials 填写docker仓库的用户名和密码

执行shell脚本:

改脚本的主要作用是使用marathon的API 自动化创建应用程序.应用程序的镜像从docker仓库拉取

curl -XPUT -H 'Content-Type: application/json'  http://www.xxxx.fun:port/v2/apps/${JOB_NAME} -d '{
  "id": "'${JOB_NAME}'",
  "cmd": "dotnet T4.Startup.Web.Mvc.dll",
  "cpus": 0.2,
  "mem": 512,
  "disk": 0,
  "instances": 2,
  "container": {
    "type": "DOCKER",
    "volumes": [
      { "containerPath": "/etc/hosts", "hostPath": "/etc/hosts", "mode": "RO" }
    ],
    "docker": {
      "image": "docker.io/your_dockerhub_name/'${JOB_NAME}':'${BUILD_NUMBER}'",
      "network": "BRIDGE",
      "portMappings": [
        {
          "hostPort":31531,
          "containerPort":80,
          "servicePort": 0,
          "protocol": "tcp",
          "labels": {}
        }
      ],
      "privileged": false,
      "parameters": [],
      "forcePullImage": false
    }
  },
  "env": {
    "TZ": "Asia/Shanghai",
    "LANG":"C.UTF-8"
  }
}'

查看自动构建结果:

如果一切正常,我们将在marathon的 webUI上看到刚刚脚本中的应用程序.

3.其他问题

1.对于asp.net core程序,如果你的项目中使用了自定义的nuget源.可以自定义一个nuget.config

并放置到解决方案同一级目录,然后更改Dockerfile

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
        <add key="www.007008.fun" value="http://www.007008.fun:7789/nuget/Default/" />
    </packageSources>
</configuration>
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE
EXPOSE 

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["Honeysuckle.AspNetCore.Web/Honeysuckle.AspNetCore.Web.csproj", "Honeysuckle.AspNetCore.Web/"]
COPY ["Honeysuckle.AspNetCore.Core/Honeysuckle.AspNetCore.Core.csproj", "Honeysuckle.AspNetCore.Core/"]
COPY ["Honeysuckle.AspNetCore.Application/Honeysuckle.AspNetCore.Application.csproj", "Honeysuckle.AspNetCore.Application/"]
COPY ["Honeysuckle.AspNetCore.Repository/Honeysuckle.AspNetCore.Framework.csproj", "Honeysuckle.AspNetCore.Repository/"]
COPY nuget.config /
RUN dotnet restore "Honeysuckle.AspNetCore.Web/Honeysuckle.AspNetCore.Web.csproj"
COPY . .
WORKDIR "/src/Honeysuckle.AspNetCore.Web"
RUN dotnet build "Honeysuckle.AspNetCore.Web.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Honeysuckle.AspNetCore.Web.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Honeysuckle.AspNetCore.Web.dll"]

7.使用jenkins+marathon+docker完成自动化部署的更多相关文章

  1. 基于Jenkins,docker实现自动化部署(持续交互)

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  2. 基于Jenkins,docker实现自动化部署(持续交互)【转】

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  3. Jenkins+Docker+Git 自动化部署

    Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...

  4. Jenkins与Docker的自动化CI/CD实战

    Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...

  5. jenkins+git+maven搭建自动化部署项目环境

    简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...

  6. .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统

    .NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言     相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...

  7. Jenkins+SVN+Maven+shell 自动化部署实践

      JAVA环境中利用Jenkins+svn+maven进行自动化部署实践   一. 前言2 1.介绍jenkins2 1.本地项目打包2 2.通过secureCRT工具,手动传输到服务器2 3.然后 ...

  8. 【.NET Core】docker Jenkins ASP.NET Core自动化部署

    本文基于GitHub演示自动化部署,实际上你可以选择任意的Git托管环境. 使用的模式:DooD(Docker-outside-of-Docker). 本文所有内容均开源 链接 欢迎关注我的GitHu ...

  9. Jenkins与gitlib实现自动化部署与持续构建

    Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测试和 ...

随机推荐

  1. JSP内置对象与servlet对应关系

    隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...

  2. win7,64bit下的OpenGL着色语言(glsl)开发环境配置(原)

    一.环境准备: 系统环境win7,64位,双显卡:集成显卡+gt540m,gt540建议下载最新的驱动,可以支持到opengl4.3标准,一般双显的笔记本,程序默认启用的是集显,我机器的集显驱动有点老 ...

  3. Java 线程不安全问题分析

    当多个线程并发访问同一个资源对象时,可能会出现线程不安全的问题 public class Method implements Runnable { private static int num=50; ...

  4. Java 可变字符串StringBuilder/StringBuffer的区别

    public class StringBuilder_and_StringBuffer { private static long SystemTime(){ return System.curren ...

  5. 再次迷宫救人——BFS

    原创 上次用DFS解了迷宫救人:https://www.cnblogs.com/chiweiming/p/9313164.html 这次用BFS(广度优先搜索),实现广度优先搜索比深度优先搜索复杂,思 ...

  6. Winform中的DatagridView显示行号

    1.设置 RowPostPaint 为true 2.启用RowPostPaint事件 /// <summary> /// DataGridView显示行号 /// </summary ...

  7. 21天学通C++学习笔记(四):数组和字符串

    1. 数组 概念 是一组元素 这些元素是相同的数据类型 按顺序存储到内存中 目的是避免在业务需要时去重复声明很多同类型的变量 初始化 分别初始化:int i [5] = {1,2,3,4,5}; 全部 ...

  8. 以太坊系列之六: p2p模块--以太坊源码学习

    p2p模块 p2p模块对外暴露了Server关键结构,帮助上层管理复杂的p2p网路,使其集中于Protocol的实现,只关注于数据的传输. Server使用discover模块,在指定的UDP端口管理 ...

  9. 题解 BZOJ 1002 【[FJOI2007]轮状病毒】

    题目链接 emm…… 正解:矩阵树定理,但是本宝宝不会求基尔霍夫矩阵. 开始考场方法: 手动模拟$n=1--5$时的答案(数不大,~~画画就出来了~~要画上半个小时). 画出来,答案是这样的:$1$ ...

  10. Postman接口测试之POST、GET请求方法

    一.基础知识 1.HTTP的五种请求方法:GET, POST ,HEAD,OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法. GET请求:请求指定的页面信息,并返回实体 ...