Giter Club home page Giter Club logo

antdeployagent's Introduction

访客数 👀

yuzd :: Visitor's Count

Hi there 👋

Anurag's github stats

Most Used Languages

😄 你好~,我是 @yuzd,工作在上海,我热爱开源,追求高效,喜欢折腾技术

image image 我的博客园

yuzd

My ongoing project 😊

Readme Card Readme Card

我喜欢用的语言和工具

  • 🌱 目前业余时间在把自己多年的开发经验,以开源项目的形式来分享给大家,并通过大家的意见来打磨自己的想法和技术。
    • 后端开发难免会和job打交道,基于hangfire这款开源job调度器的肩膀上 我开发了这款基于Http调度方式的扩展,以及搭配我开源的job开发框架可以让的job开发更高效 Hangfire.HttpJob
    • 众所周知Spring是一款优秀的框架,通过深读它的源码让我体会到它的设计精良,我踩在Autofac这款开源框架的肩膀上实践出在.net平台的Spring注解编程框架 Autofac.Annotation
    • 我发现很多前端开发者会遇到部署问题,如何让前端开发者可以自给自足速快速部署&回滚,让他会js就是可以无所不能,于是我想到利用最新的netcore跨平台技术开发一个单页面应用容器 Spa
    • 其实不仅仅是前端开发者,后端开发者也同样有着部署难题,我开发了这个项目为了让开发者一键部署到远程服务器的iis,windows服务,Docker容器,这个项目包含了客户端,和引擎端 AntDeploy
    • ORM造轮子,我非常喜欢Linq2DB这款开源orm,它尽可能利用csharp的原生lambda语法的优势来高效率的编写和数据库相关的代码,我站在它的肩膀上,抽出它linq2db转换sql的引擎,再对db执行那块进行封装,可以通过配置在执行上可以分表分库,读写分离,搭配将db生成models代码的插件提升db操作的开发效率 AntData.ORM
    • 一款后台管理系统,除了最基本的用户,菜单,权限管理,如何让你高效的开发业务逻辑(分页,CRUD,导入,导出通用功能),高效配置菜单,页面访问和页面里的按钮权限是最关键的,我总结了我多年的后台开发经验设计出一套后台管理模板,助你一臂之力 AntMgr
    • .net跨平台开发xamarin非常有趣,可以快速开发mac软件,我开发了一个mac小工具 包含了json生成代码,截图自动上传,urlEncode/Decode,imagebase64互转等小工具来提高我在mac上的开发效率
    • 已转战java多年虽然有很多commonUtil比如Apache的,Spring全家桶系列,但语法上kotlin给我的感觉更好,在orm上ktorm是一款非常优秀的框架,我喜欢用它所以我写了一个插件能够增加我的工作效率 ktorm的idea代码生成器插件
  • 📫 技术上有疑惑?理解上有问题?wiki教程写的不够详细?实现上有新方案?也可以提issue给我,还请联系我 👉 [email protected],我非常乐意帮助!欢迎大神们多多指点🙏
  • ♥️ 代码如人,见字如面,开源不易,感谢Star
  • ♥️ 欢迎扫一扫加入微信群聊

antdeployagent's People

Contributors

yuzd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

antdeployagent's Issues

用AntDeploy如何更新Agent

前提条件

  1. AntDeploy插件的版本>=6.2
  2. Agent的版本>=6.2

如果不满足以上2个条件的请手动更新,在群文件下载!

下载AntDeployAPP独立使用版本

所谓独立版本就是脱离vs独立使用
image

下载最新版本的Agent

(可在群文件下载)

image

然后将Agent解压到本地

image

打开AntDeployAPP独立版本

  1. 选择上面解压本地的最新的Agent文件目录
    一定要注意:删除里面的【AntDeployAgentWindowsService.exe.config】文件,不然更新agent就会把配置都还原了!!!!!!!!!!!!!!!!!!切记哦!!!

image

  1. 发布配置,添加环境 添加要更新agent的服务器
    image

  2. 回到【Windows服务发布】
    选择 添加的环境

特别注意,服务名称要填写:AntDeployAgentWindowsService

image

  1. 点击【发布】 即可更新

实现原理:

  1. AntDeploy 会根据你填写的服务名称 :AntDeployAgentWindowsService 来判断是否是更新Agent
  2. 如果是更新Agent AntDeploy只负责把新的Agent文件传输到服务器上
  3. 你可以仔细看下新版本的Agent目录下会有一个 deploy_end.bat 文件
    内容如下:

@ECHO OFF
sc stop AntDeployAgentWindowsService //这句的意思是停止Agent服务
xcopy /e $DeployFolder$ $AppFolder$ /y //这句里面有占位符,意思是复制文件
sc start AntDeployAgentWindowsService //这句的意思是启动Agent服务

  1. 如果没有 deploy_end.bat 文件会更新失败
    有这个文件 会执行这个文件 实现自更新自己!!!

总结:先用老的Agent 把新的自己上传到服务器。然后自己运行一个脚本 ,脚本做的事情就是 干掉自己 覆盖成新的文件 在启动自己!!!

同一台机器 上想部署多个docker 实例,怎么操作

同一台机器 上想部署多个docker 实例,怎么操作,现在我是通过切换不同的env_name来进行实现的,有没有更简便一点的,一次上传,就批量建立不同的实例,每个实例不同的名称,不同的端口

【demo演示】一键发布Linux服务部署(netcore web项目)

AntDeploy 是我开发一款开源一键发布插件

  • 将本地vs中的代码,一键打包,部署到任意的远程服务器
  • 部署方式支持 windows服务,linux服务,docker容器,iis
  • 支持增量发布(只更新有修改的)
  • 支持一键回滚(出了问题快速恢复)
  • 支持查看发布历史记录

AntDeploy的代码托管地址(感恩star)

https://github.com/yuzd/AntDeploy

本章介绍如何使用AntDeploy一键部署到远程linux服务器作为服务运行

  • linux服务器为aws的 ecs: 系统为ubuntu18.04.4 (x64)
  • 服务器上无安装dotnet环境(因为AntDeploy用的是独立部署)

第一步 安装Linux端Agent

请在qq群(488312978)文件里面获取

image

把文件上传你的linux服务器

解压后有3个文件
image

  • AntAgent.service 是安装为服务的描述文件
  • AntDeployAgentLinuxService 执行文件
  • AntDeployAgentLinuxService.config 配置参数

按照下面更改AntAgent.service中的
WorkingDirectory 和 ExecStart

[Unit]
Description=AntAgent

[Service]
Type=notify

## WorkingDirectory是上面的AntDeployAgentLinuxService所在目录
WorkingDirectory=/home/ubuntu/download
## ExecStart是AntDeployAgentLinuxService执行文件的完整路径
ExecStart=/home/ubuntu/download/AntDeployAgentLinuxService
SyslogIdentifier=AntAgent
Restart=always        
RestartSec=5

[Install]
WantedBy=multi-user.target

赋予这个可执行文件权限

chmod +x AntDeployAgentLinuxService

image

修改agent配置文件AntDeployAgentLinuxService.config


<configuration>
  <appSettings>

    <!-- 访问agent的Token,保护你服务器安全的 -->
    <add key="Token" value="aaaa"/>
    
    <!-- agent对外提供服务的端口号,在云服务器里面得开放端口不然访问不进来 -->
    <add key="Port" value="8091"/>

    <!--下面的一般保持默认即可 -->
    <!--是否启用备份  true代表备份 false 代表不备份  不填=true  -->
    <add key="NeedBackUp" value="" />

    <!--配置Mac白名单地址列表 多个用半角逗号隔开-->
    <add key="MacWhiteList" value="" />

    <!--配置发布历史最多保留个数(默认10),解释:每次发布就是一个发布历史,回滚的时候是选择这个发布历史进行操作的-->
    <add key="OldPulishLimit" value="10" />

    <!--每个项目的发布版本历史记录会保底留存10个(上面配置的),对于超过的会走日期比对(当前服务器时间-版本批次日期)>10(下面配置) 的发布文件夹会被删除,防止磁盘占用过大 10代表10天 不填默认10-->
    <add key="ClearOldPublishFolderOverDays" value="10" />
    
    <!--发布使用目录 为空代表当前目录 ->
    <add key="DeployDir" value=""/>
  </appSettings>
</configuration>

执行下面命令把AntAgent安装为linux服务运行

sudo cp AntAgent.service /etc/systemd/system/AntAgent.service

sudo systemctl daemon-reload

sudo systemctl enable AntAgent

sudo systemctl start AntAgent


安装成功后使用命令:sudo systemctl status AntAgent
查看是否成功运行

image

好了,以上服务器上agent安装完毕

如果agent已经启动了 再修改agent的配置文件,那你可以用命令

sudo systemctl restart AntAgent 

重新运行agent

为了更方便的在linux服务器上安装agent我写了一个快速安装的脚本(只需要敲一行命令即可安装为agent为服务):

curl https://mysharelist.com/installAgent.sh|sudo sh

image

第二步 安装AntDeploy插件

image

如果下载很慢可以插件市场官网下载下来双击安装:
https://marketplace.visualstudio.com/items?itemName=nainaigu.AntDeployVsix

打开你要发布的工程

工程文件右键可以召唤AntDeploy
如果没有 看下是不是被禁用了
image

第一次发布需要配置服务器的agent信息

  1. 新增一个环境
  2. 在环境下添加Token服务器(就是上面agent的服务器Ip:端口号)

image

进入Linux服务发布

  1. 选择刚刚添加的环境
  2. 录入要发布的服务名称
  3. 点击发布
    image

agent做了什么日志里面详细记录了

image

发布到docker 的 run 命令

请问下 指定 Dockerfile 的 Expose 为 5000 的话
看到 run 命令就会是 5000:5000
有没有办法指定 run 命令是 8080:5000 ..

什么场景用Nssm

一般按照微软开发winfows服务的标准的话 是需要引入包:Microsoft.Extensions.Hosting.WindowsServices

但是用nssm可以不需要引入。

所以推荐在netcore开发web的场景使用nssm安装为windows服务

而且使用nssm安装的另外一个优点是可以指定启动参数? 比如 --urls=http://*:10007

前提 需要agent版本更新为6.9或以上

使用nssm来部署netcore web项目到windows服务的教程请看:https://mp.weixin.qq.com/s/Q0O7ikVOiHNccd9Qdms-jw

优化建议

试用了以下,有很多便捷的地方,基础功能都已经满足。但有一些建议(针对 6.46版本):
1。界面美化及布局调整,主要有以下几点:
a.窗体控件 风格 不统一。能否使用 wpf 开源 主题开发?
b.界面 布局是否可以调整?比如 进度展示 和 发布日志 能在一起显示。发布配置中的布局能否改善更加合理。
2. 性能问题。每次点击发布按钮后窗体都会假死,发布结束后立即恢复。这里的长时间逻辑能否改成异步或者在另外开一个进程处理呢?
3.能够加入发布密码策略?实际项目中正式环境不可能每个人都能发布。但是 目前只要安装插件的人都可以读取到发布配置进行发布操作。我看到服务器配置中有mac地址限制。是做这个用的么?
4.发布配置的排除规则 配置 目前好像不生效。排除的文件也被打包发布到服务器了。

发布到IIS报错

你好,今天发现升级到4.0版本后发布报错,之前都是正常的

image

【demo演示】一键发布WindowsService项目(netcore3.0项目)

前提:由于是演示WindowsService项目所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意: 得用管理员权限部署agent 防止会出现部署到Windows 服务上权限不足问题

这里演示的是将dotnetcore 3.0 项目

1. 开始创建worker service 项目 创建新项目——》选择辅助角色服务

image

image

2. 项目创建成功之后,您会看到创建了两个类:Program和Worker。

Program.cs

 public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                    .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                });

Worker.cs

  public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }
    }

worker只是一个简单的类,它继承自BackgroundService ,而后者又实现IHostedService接口。
默认的worker演示,没隔1秒,循环打印运行的时间。
image

部署为Windows服务运行

1.在项目中添加nuget包:Microsoft.Extensions.Hosting.WindowsServices

image

2.然后在program.cs内部,将UseWindowsService()添加到CreateHostBuilder

image

3.在工程上点击右键 然后选择 AntDeploy

image

4.配置AntDeploy

4.1添加一个环境 名字叫 测试

image

4.2在 测试环境里面添加 windows服务器 这里我做测试就添加就是我本机,注意Host里面是填写格式为:ip:端口号

image

image

注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)
注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)
点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败
如果【Connect Fail】失败 请查看 #10

4.3进入 WindowsService Tab界面

Sdk类型选择 netcore
ServiceName 请自己填写 不能和现有的有重复就行 我这里就填 testnetcoreservice

image

点击 【Deploy】按钮进行发布
如下图所示:
image

因为是第一次创建,agent检测到了 会弹出了让你填:

image

点击提交:

image

发布成功:

image

如何不打开Visual Studio也能使用AntDeploy

如何不打开Visual Studio也能使用AntDeploy

加入AntDeploy交流反馈QQ群:488312978
在群文件进行下载 AntDeployAPP
image

解压下载的zip包后打开AntDeployApp.exe

image

选择你要发布的项目文件【csproj文件】

image

如上图也可以在双击【最近打开的项目一览】直接选择

选择项目之后,AntDeploy的其他操作和插件版本一模一样

【demo演示】一键发布WindowsService项目(netcore web项目)

前提:由于是演示WindowsService项目所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意: 得用管理员权限部署agent 防止会出现部署到Windows 服务上权限不足问题

这里演示的是将dotnetcore web 项目 host进Windows服务

1. 新建一个netcore的 ASP.NET Core Web应用程序

image

image

2.安装nuget依赖:Microsoft.AspNetCore.Hosting.WindowsServices

image

2.1 在Program的Main方法中,把默认的host.Run改为host.RunAsService

image

参考微软官方文档:https://github.com/aspnet/Docs/blob/master/aspnetcore/host-and-deploy/windows-service.md#get-started

3.在工程上点击右键 然后选择 AntDeploy

image

4配置AntDeploy

4.1添加一个环境 名字叫 测试

image

4.2在 测试环境里面添加 windows服务器 这里我做测试就添加就是我本机,注意Host里面是填写格式为:ip:端口号

image
注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)
注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)
点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败
如果【Connect Fail】失败 请查看 #10

4.3进入 WindowsService Tab界面

Sdk类型选择 netcore
ServiceName 请自己填写 不能和现有的有重复就行 我这里就填 testnetcoreservice
image

点击 【Deploy】按钮进行发布
如下图所示:
image

确认服务器无误 点击 【是】开始执行一键部署
如果发布出现错误会出现下图所示:
image

可以在Log里面查看失败原因是因为我部署agent没有用管路员权限 报权限不足失败
image

部署成功 如下图:
image

image

这里演示的是windows服务上没有这个service
所以自动创建了。
如果service已存在的情况 Deploy 就会全量覆盖 不会重新创建site的。
如果想要覆盖时排除指定文件 可以在 Setting Tab界面的IgnoreList里面增加(支持正则)

常见错误

1.1 编译失败 日志里面报NU1605

可能在vs里面的编译是没有报错,但是antdeploy采用的是带runtime的publish
解决方案 :https://stackoverflow.com/questions/50286990/error-nu1605-detected-package-downgrade/50323131

AntDeploy发布前端项目到IIS(脱离vs单独使用)

AntDeploy

AntDeploy是一款开源的一键发布部署工具,目的是代替重复性的发布动作,提高部署效率

  • 1.一键部署iis

  • 2.一键部署windows服务

  • 3.一键部署到Docker

  • 4.支持增量

  • 5.支持只发布特定文件

  • 6.支持回滚到指定历史版本

  • 7.支持查看发布历史记录

  • 8.支持脱离vs单独使用

  • 9.支持发布前端项目到iis

  • 10.支持url点火查看是否部署成功

  • github开源地址

  • 插件下载地址

使用AntDeploy之前部署一个项目到服务器IIS是如下样子

  1. 本机编译发布到指定文件夹
  2. 文件夹打包
  3. 开启一个远程mstsc
  4. 停止掉iis上对应的网站
  5. 覆盖网站文件
  6. 开启iis对应的网站

使用AntDeploy之后

只需要点击一个按钮即可

如何发布前端项目到IIS(脱离VS单独使用AntDeploy)

因为有些前端项目不是用VS开发的

重要重要重要的前提:由于是演示iis所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意: 得用管理员权限部署agent 防止会出现部署到iis上权限不足问题

1.下载AntDeplpyAPP

加QQ群488312978 在群文件如下位置下载到本机

image

image

2.解压:

image

还有一个办法是不用加QQ群也能获取最新版的办法:

打开网页:https://marketplace.visualstudio.com/items?itemName=nainaigu.AntDeploy
下载插件:
image

然后将下载的插件的后缀.vsix 改成.zip
image
image

解压后 打开 AntDeployApp.exe

3.运行AntDeployApp.exe后点击 【点我选择文件夹】

image

4.然后选择 要发布到iis的 前端项目 文件夹

image

5.第一次使用得配置AntDeploy

  1. 切换中文显示
    image

  2. 添加发布的服务器信息
    image

2.1 添加一个环境,我这里本机演示 就叫 【本机】
image

2.2 添加服务器信息
image
注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)

注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)

点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败

2.3 点击发布进行一键部署

  • 选择SDK类型为 netframework
  • 环境名称就选刚才添加的
  • 网站名称 看iis上的名称来填写
  • 点击 发布 按钮
    image

image

2.4 成功会如下显示
image

【demo演示】一键发布WindowsService项目(netcore普通项目)

前提:由于是演示WindowsService项目所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意: 得用管理员权限部署agent 防止会出现部署到Windows 服务上权限不足问题

打开vs 选择创建一个新的netcore 控制台项目(群文件有demo工程可以下载)

image

Nuget添加如下引用

  1. Microsoft.Extensions.Hosting
  2. System.ServiceProcess.ServiceController

新建一个ServiceBaseLifetime.cs 并将下面的内容复制进去

using Microsoft.Extensions.Hosting;
using System;
using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp4
{

    public class ServiceBaseLifetime : ServiceBase, IHostLifetime
    {
        private readonly TaskCompletionSource<object> _delayStart = new TaskCompletionSource<object>();

        public ServiceBaseLifetime(IApplicationLifetime applicationLifetime)
        {
            ApplicationLifetime = applicationLifetime ?? throw new ArgumentNullException(nameof(applicationLifetime));
        }

        private IApplicationLifetime ApplicationLifetime { get; }

        public Task WaitForStartAsync(CancellationToken cancellationToken)
        {
            cancellationToken.Register(() => _delayStart.TrySetCanceled());
            ApplicationLifetime.ApplicationStopping.Register(Stop);

            new Thread(Run).Start(); // Otherwise this would block and prevent IHost.StartAsync from finishing.
            return _delayStart.Task;
        }

        private void Run()
        {
            try
            {
                Run(this); // This blocks until the service is stopped.
                _delayStart.TrySetException(new InvalidOperationException("Stopped without starting"));
            }
            catch (Exception ex)
            {
                _delayStart.TrySetException(ex);
            }
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            Stop();
            return Task.CompletedTask;
        }

        // Called by base.Run when the service is ready to start.
        protected override void OnStart(string[] args)
        {
            _delayStart.TrySetResult(null);
            base.OnStart(args);
        }

        // Called by base.Stop. This may be called multiple times by service Stop, ApplicationStopping, and StopAsync.
        // That's OK because StopApplication uses a CancellationTokenSource and prevents any recursion.
        protected override void OnStop()
        {
            ApplicationLifetime.StopApplication();
            base.OnStop();
        }
    }
}

新建一个ServiceBaseLifetimeHostExtensions.cs 并将下面的内容复制进去

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    public static class ServiceBaseLifetimeHostExtensions
    {
        public static IHostBuilder UseServiceBaseLifetime(this IHostBuilder hostBuilder)
        {
            return hostBuilder.ConfigureServices((hostContext, services) => services.AddSingleton<IHostLifetime, ServiceBaseLifetime>());
        }

        public static void RunAsService(this IHostBuilder hostBuilder)
        {
            hostBuilder.UseServiceBaseLifetime().Build().Run();
        }

        public static Task RunAsServiceAsync(this IHostBuilder hostBuilder)
        {
            return hostBuilder.UseServiceBaseLifetime().Build().RunAsync(CancellationToken.None);
        }
    }

}

新建一个服务类 TestService.cs 并写入以下内容(该服务就是每1秒往d:\log.txt写入当前时间)

using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;

namespace ConsoleApp4
{
   
    public class TestService: IHostedService,IDisposable
    {
         readonly System.Timers.Timer tmBak = new System.Timers.Timer();

        public TestService()
        {
            tmBak.Interval = 1000;//1秒执行1次
            tmBak.AutoReset = true;//执行1次false,一直执行true
            tmBak.Enabled = true;
            tmBak.Elapsed += (sender, eventArgs) =>
            {
                using (StreamWriter sw = new StreamWriter("D:\\log.txt",true))
                {
                    sw.WriteLine($"AntDeploy Windows服务:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
                }
            };
        }


        public Task StartAsync(CancellationToken cancellationToken)
        {
            tmBak.Start();
            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            tmBak.Stop();
            return Task.CompletedTask;
        }

        public void Dispose()
        {
            this.tmBak.Dispose();
        }
    }
}

编辑 Program.cs 写入如下内容:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        // P/Invoke declarations for Windows.
        [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow();
        [DllImport("user32.dll")] static extern bool IsWindowVisible(IntPtr hWnd);
        public static bool HaveVisibleConsole()
        {
            return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ?
                          IsWindowVisible(GetConsoleWindow())
                          :
                          Console.WindowHeight > 0;
        }

        private static async Task Main(string[] args)
        {
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            Directory.SetCurrentDirectory(pathToContentRoot);

            var isService = !(Debugger.IsAttached || args.Contains("--console"));

            if (HaveVisibleConsole()) isService = false;
            var builder = new HostBuilder()
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<TestService>();
                });

            if (isService)
            {
                await builder.RunAsServiceAsync();
            }
            else
            {
                await builder.RunConsoleAsync();
            }
        }
    }
}

在工程上点击右键 然后选择 AntDeploy

image

配置AntDeploy

添加一个环境 名字叫 测试 然后 在 测试环境里面添加 windows服务器 这里我做测试就添加就是我本机,注意Host里面是填写格式为:ip:端口号

image

注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)
注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)
点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败
如果【Connect Fail】失败 请查看 #10

进入 WindowsService Tab界面

Sdk类型选择 netcore
ServiceName 填写上面我们设置的名称:[TestService]
image

点击 【Deploy】按钮进行发布
image

确认服务器无误 点击 【是】开始执行一键部署
如果发布出现错误会出现下图所示:
image

可以在Log里面查看失败原因是因为我部署agent没有用管路员权限 报权限不足失败
image

部署成功 如下图:

image

查看D盘下是否log.txt是否正常每隔1秒写入了当前时间
image

这里演示的是windows服务上没有这个service
所以自动创建了。
如果service已存在的情况 Deploy 就会全量覆盖 不会重新创建site的。
如果想要覆盖时排除指定文件 可以在 Setting Tab界面的IgnoreList里面增加(支持正则)

配置项目启动

俞老师,首先要在本地安装jib.exe,antdeploy才能正常运行吗?

logger.Error($"can not found :{jibExe}");

【demo演示】一键发布WindowsService项目(netframwork版本)

前提:由于是演示WindowsService项目所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意: 得用管理员权限部署agent 防止会出现部署到Windows 服务上权限不足问题

1. 新建一个Windows服务项目

image

image

2.设置好ServiceName 和 描述

这里要记下你设置的ServiceName 后面要用到
image

3.设置安装权限

右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。
image

4.打开Service,cs代码 写入逻辑

image

5.在工程上点击右键 然后选择 AntDeploy

image

6配置AntDeploy

6.1添加一个环境 名字叫 测试

image

6.2在 测试环境里面添加 windows服务器 这里我做测试就添加就是我本机,注意Host里面是填写格式为:ip:端口号

image
注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)
注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)
点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败
如果【Connect Fail】失败 请查看 #10

6.3进入 WindowsService Tab界面

Sdk类型选择 netframework
ServiceName 填写上面我们设置的名称:[TestService]
image

点击 【Deploy】按钮进行发布
如下图所示:
image

确认服务器无误 点击 【是】开始执行一键部署
如果发布出现错误会出现下图所示:
image

可以在Log里面查看失败原因是因为我部署agent没有用管路员权限 报权限不足失败
image

部署成功 如下图:
image

查看D盘下是否log.txt是否正常每隔1秒写入了当前时间
image

这里演示的是windows服务上没有这个service
所以自动创建了。
如果service已存在的情况 Deploy 就会全量覆盖 不会重新创建site的。
如果想要覆盖时排除指定文件 可以在 Setting Tab界面的IgnoreList里面增加(支持正则)

使用者常见提问一览

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~4~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~7~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~8~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

netcore下已支持编译模式选择!!请使用最新版

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

image
docker部署的时候如果出现上面的错,可能是因为你之前发布没有配置--name参数,然后后面才配置的会导致这样。
解决办法是,进入宿主机删除旧的(看端口号就知道旧的是哪个了)

agent的配置说明

目前antdeploy一键发布工具针对windows服务器支持以下两种方式一键部署

IIS

  1. 支持 netframework下开发的项目例如mvc webapi等部署到windows服务器上的iis上
  2. 支持netcore开发的网站项目部署到windows服务器上的iis (服务器得安装hosting)

Windows服务

  1. 支持netframework下开发的windows服务项目部署到windows服务器上作为服务运行
  2. 支持netcore开发的windows服务项目(包括网站项目)部署到windows服务器上作为服务运行

由于部署到windows服务器上,要想antdeploy正常工作,首先得确保agent服务在服务器上运行。

什么是agent?

agent是antdeploy部署到windows服务器上使用的配套服务端。它是作为一个windows服务运行的(也可以以控制台的方式运行)。
在发布到linux的docker上是不需要这个agent的。

什么是agent的端口

agent可以理解它是一个webapi,接收antdeploy发过来的指令,比如接收上传数据,部署指令。作为一个webapi所以必须指定它运行的端口。
注意,这个端口号和你实际要发布的项目的端口号是不一样的。
在【AntDeployAgentWindowsService.exe.config】文件里面配置运行的端口

什么是agent的Token

agent部署到windows服务器上之后,不能让它被任何人访问,只有知道Token的人才能通过Antdeploy部署,Token用来保证安全的。
注意,这个Token不是你windows服务器的密码!!!
在【AntDeployAgentWindowsService.exe.config】文件里面配置Token,如果运行中修改Token需要关闭重新运行agent服务

agent安装

下载之后
agent文件目录如下
image

把agent作为服务进部署到服务器

1 打开 AntDeployAgentWindowsService.exe.config 设置 Token 和 端口号

2 以管理员身份运行 WindowsServiceTool.exe

3 点击浏览按钮 选择同目录下的 AntDeployAgentWindowsService.exe

image

如果是第一次 点击安装按钮
如果非第一次 点击运行按钮 则 启动agent
点击停止按钮 则 停止agent
点击写在按钮 则 卸载agent

【控制台方式运行】如果是本机测试的话可以直接 或者 用上面的方式部署出错的情况下可以

用管理员方式直接双击运行 AntDeployAgentWindowsService.exe
端口号和 token 在 AntDeployAgentWindowsService.exe.config里面配置
如果有报错信息请反馈到qq群或者在下面留言

关于Agent的配置文件的着重说明

image

这个是配置Token的 就是访问agent的安全参数,默认是aaaa 你请记得修改成安全的!

image

这个是配置外部访问Agent的端口(也就是agent对外开放的端口),请用一个不常见的,不然很容易端口冲突导致agent启动不了

image

-是否启用备份 true代表备份 false 代表不备份 不填=true

image

配置Mac白名单地址列表 多个用半角逗号隔开,如果配置了在发布的时候会校验是否是mac白名单,不是的话 不让发布

image

每个项目的发布版本历史记录会保底留存10个(写死的),对于超过的会走日期比对(当前服务器时间-版本批次日期)>10(下面配置) 的发布文件夹会被删除,防止磁盘占用过大 10代表10天 不填默认10
也就是说如果你的历史版本没到10个 是不会触发日期比对的也就不会删除啦!

image

发布使用目录 为空代表当前目录 如果填写D:\test 代表使用D盘下的test文件夹
建议为空那么就是使用agent的默认工作目录(和agent在同一个目录)。

Connect Fail 连接agent失败的常见原因

如下图:
image

1.1 agent是否启动成功

进入windows服务管理器查看下 agent的服务是否运行中

image

如果没有启动成功,可能端口号冲突了,建议agent的端口配置成一个不常用的端口号

1.2 如果agent服务运行中 确定下在Host 和 Token是否填写正确

这里强调一下 Host 填写的是如下格式 192.168.0.0.1:8888
这个192.168.0.0.1 是 agent所在服务器的ip地址
8888 是agent的配置文件中配置的端口号
Token是agent的配置文件中配置的Token

1.3 确认是否端口号开通了

比如阿里云服务器就需要在阿里云配置页里面开通端口的对外开放才行

使用agent服务安装工作测试在服务器是否能连接agent成功

image

点击 本机测试连接agent按钮
image

image

也可以手动在服务器的浏览器输入如下地址

http://ip:port/publish?Token=xxx
ip替换成你服务器的ip
port替换成你agent配置的port
token你替换成agent配置的token
如果访问内容是true说明agent是部署成功的。
问题出在了外网访问不到!可以查查是不是防火墙拦住了或者策略限制了等!

1.4确认是否走了代理 关闭代理在试试

setting配置项说明

image

env 新增环境

要想使用antdeploy发布到远程机器 第一步就是先添加一个环境
输入你希望命名的环境名称 然后点击 【add by name】 添加环境

server 环境下添加服务器

服务器目前分2块 一个是token服务器 一个是linux服务器。
token服务器指的是需要在服务器上安装agent,其中Host 是 你部署agent配置的ip:端口号
linux服务器是选择docker部署的时候需要配置的也就是docker宿主机,配置的是linux服务器的ssh链接的账号 密码

PS:nickname是你给服务器起的昵称。比起ip看起来更能让你标识

Package Ignore Rule 打包忽略配置

这个是用来忽略打包文件的。比如你的web.cofig文件不想打包。那么就可以填入web.config文件名称。
还可以用正则表达式。比如 *.json 代表忽略所有的json文件
可以忽略整个文件夹
例如在发布netcore的项目到iis场景下,在非首次发布的时候 publish目录下的 runtimes其实可以不用覆盖,那么就可以排除掉这个文件夹 在IgnoreList里面新增加一条

/{文件夹名称}/?.+

例如 : /runtimes/?.+ 就代表排除掉publish下的整个runtimes文件夹

上面的正则很奇怪吗?在举个例子:
image

如上图你想要排除 runtimes目录下的 win目录 那么你直接写 win?.+ 会把所有的 带有 win 的文件包括文件夹都排除了 如果你写成 /runtimes/win?.+ 就很精确
注意:不要写服务器上的绝对路径地址,得用相对路径地址,像上面那样的例子那样写!

Windows Server BackUp IgnoreRule

发布到windows服务器的时候会进行备份
就是把当前正在运行的项目文件夹整体备份。如果你希望这个文件夹内的某个文件或者某个文件夹不作为备份目标 就可以添加排除规则,写法和 上面的一样

【demo演示】IIS一键发布mvc项目(netframwork版本)

前提:由于是演示iis所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意: 得用管理员权限部署agent 防止会出现部署到iis上权限不足问题

1. 新建一个mvc项目

image

image

2.在工程上点击右键 然后选择 AntDeploy

image

3配置AntDeploy

3.1添加一个环境 名字叫 测试

image

3.2在 测试环境里面添加 windows服务器 这里我做测试就添加就是我本机,注意Host里面是填写格式为:ip:端口号

image
注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)
注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)
点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败
如果【Connect Fail】失败 请查看 #10

3.3进入 IIS_Web Tab界面

选择 sdk 为 netframework
环境 选择 我们刚刚创建的 测试
如下图所示
image

点击 【Deploy】按钮进行发布
如下图所示:
image

确认服务器无误 点击 【是】开始执行一键部署

如果发布出现错误会出现下图所示:
image

可以在Log里面查看失败原因是因为我部署agent没有用管路员权限 报权限不足失败
image

部署成功 如下图:
image

部署前IIS截图:
image

部署后IIS截图
image

新创建site的时候对应的应用程序池也是每个site唯一的。
image

测试下是否可以网站正常打开
image

这里演示的是IIS上没有这个site
所以自动创建了。
如果site已存在的情况 Deploy 就会全量覆盖 不会重新创建site的。
如果想要覆盖时排除指定文件 可以在 Setting Tab界面的IgnoreList里面增加(支持正则)

常见问题

  1. 部署成功但是访问的时候提示缺少roslyn文件夹 如下图所示
    image

解决方案请参考 https://stackoverflow.com/questions/32780315/could-not-find-a-part-of-the-path-bin-roslyn-csc-exe

如何安装agent以及常见错误解决办法 (how to use)

需要用管理员权限

1. 下载到本地目录(在qq群文件内下载,QQ群号:488312978)

image

agent

独立版本的windows版本的agent ====>基于netcore开发可以独立部署 不需要安装netframework环境

下面以net461的为例子(netcore的操作一模一样的)

image

2.打开 WindowsServiceTool.exe [注意需要用管理员权限打开]

image

image

3.然后选择

image

4. 如果是第一次的话 点击 安装并运行 按钮

 如果非第一次 那么可以 操作 【运行】 或者【停止】 来控制该service

安装成功后 在 (服务) 里面可以查到
image

可以点击 【本机测试连接agent】按钮来测试是否本机能够正常访问
image

如果想卸载服务可以 点击 【卸载按钮】

5.重要重要重要! 配置 Token 和 端口 !!

image

image

6常见异常情况

6.1 agent服务启动失败:

解决方法:排查端口是否被占用,请换一个端口试试

6.2 点击安装按钮如果出现如下报错:

image

请使用sc命令进行安装(请百度一下sc命令)

6.4 以控制台运行成功但是以windows服务就是安装不了

尝试解决方案:用sc命令进行安装 请使用sc命令进行安装(请百度一下sc命令)
或qq群反馈

为什么要用agent? #7

window server 2012 agent 安装失败 :系统错误 1067

错误应用程序名称: AntDeployAgentWindowsService.exe,版本: 3.1.0.0,时间戳: 0x86a4e6a9
错误模块名称: KERNELBASE.dll,版本: 6.3.9600.19178,时间戳: 0x5bc10573
异常代码: 0xe0434352
错误偏移量: 0x00015ef8
错误进程 ID: 0x2834
错误应用程序启动时间: 0x01d4dec3f4660ee7
错误应用程序路径: D:\software\AntDeployAgent-master\AntDeployAgentWindowsService.exe
错误模块路径: C:\Windows\SYSTEM32\KERNELBASE.dll
报告 ID: 3221a755-4ab7-11e9-80d7-877b9d19ae53
错误程序包全名:
错误程序包相对应用程序 ID:

服务启动成功又停止,事件管理器错误如下

事件管理器ErrorInfo
无法启动服务。System.IO.FileNotFoundException: 未能加载文件或程序集“AntDeployAgentWindows, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。文件名:“AntDeployAgentWindows, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null” 在 AntDeployAgentWindowsService.AntDeployAgentWindowsService.OnStart(String[] args) 在 System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state) 警告: 程序集绑定日志记录被关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。注意: 会有一些与程序集绑定失败日志记录关联的性能损失。要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
-- | -- | -- | --

发布Dokcer会默认公开端口

我发布的Dcoker并不需要公开端口, 使用AntDeploy, 如果不填端口号也会默认公开端口. 我的Dockerfile也没有公开端口配置

【demo演示】IIS一键发布mvc项目(netcore)

前提:由于是演示iis所以得部署好agent

参考:#1
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。
注意:Windows 服务器上 需要安装一个agent 就是 安装一个windows服务,用来处理iis的发布和windows服务的发布,可以点击上面的参考链接进行安装。

注意: 得用管理员权限部署agent 防止会出现部署到iis上权限不足问题
注意: 由于是netcore项目 想要在iis上部署得先在机器上安装 dotnet-hosting
请查看 微软官方文档: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis
如果不想装dotnet-hosting 可以参考#5 部署到windows服务上。

1.新建一个netcore的mvc项目

image

image

2.在工程上点击右键然后选择 AntDeploy 发布

image

3配置AntDeploy

3.1添加一个环境 名字叫 测试

image

3.2在 测试环境里面添加 windows服务器 这里我做测试就添加就是我本机,注意Host里面是填写格式为:ip:端口号

image
注意:Token不是windows服务器的密码!!!是安装agent后,agent的配置文件里面配置的Token(你自己自定义配置的)
注意:Port不是你要发布的项目的端口号!!!是安装agent后,agent的配置文件里面配置的端口号(你自己自定义配置的)
点击【Connect Test】按钮进行确认agent可以成功链接,否则会发布失败
如果【Connect Fail】失败 请查看 #10

3.3进入 IIS_Web Tab界面

选择 sdk 为 netcore
环境 选择 我们刚刚创建的 测试
如下图所示
image

点击 【Deploy】按钮进行发布
如下图所示:
image

确认服务器无误 点击 【是】开始执行一键部署

如果发布出现错误会出现下图所示:
image

可以在Log里面查看失败原因是因为我部署agent没有用管路员权限 报权限不足失败
image

发布成功如下图:
image

新创建site的时候对应的应用程序池也是每个site唯一的。
注意 netcore应用程序池配置是有区别的如下图所示:
image

这里演示的是IIS上没有这个site
所以自动创建了。
如果site已存在的情况 Deploy 就会全量覆盖 不会重新创建site的。
如果想要覆盖时排除指定文件 可以在 Setting Tab界面的IgnoreList里面增加(支持正则)

若部署成功访问不了

iis上部署netcore项目和传统的framework项目是不一样的,请按照微软官方网站的指导排查:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis

【demo演示】一键发布netcore项目到Docker

Docker只能针对linux服务器 centos7+ 和 ubuntu16.04+

docker发布是基于ssh实现的,所以不需要在linux服务器上安装agent
必须要服务器上安装了docker
我这里用centos 7 vmware虚拟机做测试演示
image

1.为了发布速度快 需要在服务器上提前安装好netcore runtime基础镜像

安装基础镜像的命令为:
docker pull microsoft/dotnet:{sdkVersion}-aspnetcore-runtime
我这里用的netcore的sdk版本是2.1
所以如下图:
image

2.创建一个netcore项目

image

image

2.在工程上点击右键然后选择 AntDeploy 发布

image

3配置AntDeploy

3.1添加一个环境 名字叫 测试

image

3.2在 测试环境里面添加 Linux服务器 这里我做测试就添加就是我的centos7 虚拟机

Host填入格式 IP:Pory (如果Port是默认的端口可以只填IP不填port)
UserName填入 root
Pwd 填入 root的对应的密码
image
注意:点击【Connect Test】按钮进行确认服务器可以成功链接,否则会发布失败

3.3进入 Docker Tab界面

image

注意:如果你的工程里面没有DockerFile那么就会用默认的DockerFile
如果你工程有DockerFile就会按照它去执行

在这个测试demo里面我工程没有DockerFile
所以我在Port里面填写了5002 代表是容器外露并使用5002端口
ASPNETCORE_ENVIROMENT 我填空 代表采用默认的 appsettings.json配置

点击 【Deploy】按钮进行发布
如下图所示:
image

确认服务器无误 点击 【是】开始执行一键部署
发布成功如下图:

image

可以查看发布详细LOG
`
18:01:17|INFO|The Porject ENTRYPOINT name:TestNetcoreDocker.dll
18:01:17|INFO|Start publish
18:01:17|INFO|用于 .NET Core 的 Microsoft (R) 生成引擎版本 15.9.20+g88f5fadfbe
18:01:17|INFO|版权所有(C) Microsoft Corporation。保留所有权利。
18:01:18|INFO| C:\Users\Administrator\source\repos\TestNetcoreDocker\TestNetcoreDocker\TestNetcoreDocker.csproj 的还原在 68.74 ms 内完成。
18:01:19|INFO| TestNetcoreDocker -> C:\Users\Administrator\source\repos\TestNetcoreDocker\TestNetcoreDocker\bin\Release\netcoreapp2.1\TestNetcoreDocker.dll
18:01:19|INFO| TestNetcoreDocker -> C:\Users\Administrator\source\repos\TestNetcoreDocker\TestNetcoreDocker\bin\Release\netcoreapp2.1\TestNetcoreDocker.Views.dll
18:01:19|INFO| TestNetcoreDocker -> C:\Users\Administrator\source\repos\TestNetcoreDocker\TestNetcoreDocker\bin\Release\netcoreapp2.1\publish\
18:01:19|INFO|publish success, ==> file://C:\Users\Administrator\source\repos\TestNetcoreDocker\TestNetcoreDocker\bin\Release\netcoreapp2.1\publish#link9
18:01:19|INFO|Start package
18:01:19|INFO|package success
18:01:19|INFO|Deploy Start
18:01:19|INFO|【Server】ssh Connecting 192.168.11.129...
18:01:20|INFO|【Server】ssh connect success:192.168.11.129
18:01:20|INFO|【Server】Changed directory to publisher/testnetcoredocker/
18:01:20|INFO|【Server】uploaded 1 %
18:01:20|INFO|【Server】uploaded 2 %
18:01:20|INFO|【Server】uploaded 3 %
18:01:20|INFO|【Server】uploaded 4 %
18:01:20|INFO|【Server】uploaded 6 %
18:01:20|INFO|【Server】uploaded 7 %
18:01:20|INFO|【Server】uploaded 8 %
18:01:20|INFO|【Server】uploaded 9 %
18:01:20|INFO|【Server】uploaded 10 %
18:01:20|INFO|【Server】uploaded 20 %
18:01:20|INFO|【Server】uploaded 30 %
18:01:20|INFO|【Server】uploaded 40 %
18:01:20|INFO|【Server】uploaded 50 %
18:01:20|INFO|【Server】uploaded 60 %
18:01:20|INFO|【Server】unzip -q publisher/testnetcoredocker/publish.zip
18:01:20|INFO|【Server】uploaded 70 %
18:01:20|INFO|【Server】uploaded 80 %
18:01:20|INFO|【Server】uploaded 90 %
18:01:20|INFO|【Server】uploaded 100 %
18:01:20|INFO|【Server】unzip success: publisher/testnetcoredocker/publish/
18:01:20|INFO|【Server】create docker file: publisher/testnetcoredocker/publish/Dockerfile
18:01:20|INFO|【Server】FROM microsoft/dotnet:2.1-aspnetcore-runtime
18:01:20|INFO|【Server】COPY . /publish
18:01:20|INFO|【Server】WORKDIR /publish
18:01:20|INFO|【Server】ENV ASPNETCORE_URLS=http://:5002
18:01:20|INFO|【Server】EXPOSE 5002
18:01:20|INFO|【Server】ENTRYPOINT ["dotnet", "TestNetcoreDocker.dll"]
18:01:20|INFO|【Server】create docker file success: publisher/testnetcoredocker/publish/Dockerfile
18:01:20|INFO|【Server】sudo docker build --no-cache --rm -t testnetcoredocker -f publisher/testnetcoredocker/publish/Dockerfile publisher/testnetcoredocker/publish/
18:01:20|INFO|【Server】Sending build context to Docker daemon 2.762MB
18:01:20|INFO|【Server】Step 1/6 : FROM microsoft/dotnet:2.1-aspnetcore-runtime
18:01:20|INFO|【Server】 ---> c14bf44dc939
18:01:20|INFO|【Server】Step 2/6 : COPY . /publish
18:01:21|INFO|【Server】 ---> 13b701b957a2
18:01:21|INFO|【Server】Step 3/6 : WORKDIR /publish
18:01:21|INFO|【Server】 ---> Running in 31f5835f55a3
18:01:21|INFO|【Server】Removing intermediate container 31f5835f55a3
18:01:21|INFO|【Server】 ---> 2befa09430fb
18:01:21|INFO|【Server】Step 4/6 : ENV ASPNETCORE_URLS=http://
:5002
18:01:21|INFO|【Server】 ---> Running in ea3aacc53d5d
18:01:21|INFO|【Server】Removing intermediate container ea3aacc53d5d
18:01:21|INFO|【Server】 ---> aea1419b8028
18:01:21|INFO|【Server】Step 5/6 : EXPOSE 5002
18:01:21|INFO|【Server】 ---> Running in f31536a15815
18:01:21|INFO|【Server】Removing intermediate container f31536a15815
18:01:21|INFO|【Server】 ---> cb3532775261
18:01:21|INFO|【Server】Step 6/6 : ENTRYPOINT ["dotnet", "TestNetcoreDocker.dll"]
18:01:21|INFO|【Server】 ---> Running in ea1bcfd23cc1
18:01:21|INFO|【Server】Removing intermediate container ea1bcfd23cc1
18:01:21|INFO|【Server】 ---> f597ea70abad
18:01:21|INFO|【Server】Successfully built f597ea70abad
18:01:21|INFO|【Server】Successfully tagged testnetcoredocker:latest
18:01:26|INFO|【Server】sudo docker run --name d_testnetcoredocker -d -p 5002:5002 testnetcoredocker:latest
18:01:26|INFO|【Server】c741f3e372273cb97a4c0a0fe1693530f1378890f7b6b7082116994541a558c2
18:01:27|INFO|publish Host: 192.168.11.129 End
18:01:27|INFO|Deploy End

`

5 检测发布docker后网站是否打开成功

image

编译是在本机完成的,编译成果物+Dockfile 到服务器上进行image生成

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.