7.使用jenkins+marathon+docker完成自动化部署
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完成自动化部署的更多相关文章
- 基于Jenkins,docker实现自动化部署(持续交互)
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...
- 基于Jenkins,docker实现自动化部署(持续交互)【转】
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...
- Jenkins+Docker+Git 自动化部署
Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...
- Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...
- jenkins+git+maven搭建自动化部署项目环境
简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...
- .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统
.NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...
- Jenkins+SVN+Maven+shell 自动化部署实践
JAVA环境中利用Jenkins+svn+maven进行自动化部署实践 一. 前言2 1.介绍jenkins2 1.本地项目打包2 2.通过secureCRT工具,手动传输到服务器2 3.然后 ...
- 【.NET Core】docker Jenkins ASP.NET Core自动化部署
本文基于GitHub演示自动化部署,实际上你可以选择任意的Git托管环境. 使用的模式:DooD(Docker-outside-of-Docker). 本文所有内容均开源 链接 欢迎关注我的GitHu ...
- Jenkins与gitlib实现自动化部署与持续构建
Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测试和 ...
随机推荐
- 专题1-MMU-lesson1-MMU功能解析
1.Memory Management Unit(存储器管理单元) 单片机与ARM在硬件体系上的一些区别:其中就有MMU的区别. 虚拟地址的使用 把p1.c复制成P2.c,把变量a改成b,再进行编译看 ...
- Java设计模式(1)——简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 一.模式中包含的角色及其职责 1.工厂(Creator)角色 简单 ...
- TP5图片上传
/*图片上传*/ public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('file'); // 移 ...
- LightOJ 1065 Island of Survival (概率DP?)
题意:有 t 只老虎,d只鹿,还有一个人,每天都要有两个生物碰面,1.老虎和老虎碰面,两只老虎就会同归于尽 2.老虎和人碰面或者和鹿碰面,老虎都会吃掉对方 3.人和鹿碰面,人可以选择杀或者不杀该鹿4. ...
- HDU 6047 Maximum Sequence (贪心+单调队列)
题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...
- Linq学习<三> linq to entity
之前一直用sql选择出数据放在一个集合中,然后再用Linq或者lambda去操作数据,今天学了Linq to entity 才知道原来linq产生是为了Entity.也就是EDM(实体数据模型) 关于 ...
- C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...
- sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)
SQL 列转行,即多行合并成一条 需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district ...
- Vue 父组件向子组件传值,传方法,传父组件整体
父子组件传值 1.父组件调用子组件时绑定属性,例如-> :title="title" 2.子组件中在props中声明title:props:['title','msg'] 3 ...
- whisper简介
以太坊系列之二十 以太坊中的基础应用whisper 以太坊系列之二十 以太坊中的基础应用whisper 1 whisper介绍 2 whisper rpc模块 3 whisper中的消息 4 消息的加 ...