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 80
EXPOSE 443

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"]

 

转载于:https://www.cnblogs.com/gytangyao/p/10180792.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值