azure 环境设置

  • 登录azure

    地址 https://dev.azure.com/

  • 使用微软账号就可以进行登录。

  • 点击右上角新建项目

  • 项目信息,尽量用小写

创建项目





修改默认的dockerfile

```
FROM microsoft/dotnet:2.1-aspnetcore-runtime-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443 FROM microsoft/dotnet:2.1-sdk-stretch AS build RUN mkdir -p /app
WORKDIR /src
COPY . .
RUN dotnet restore "firstapp.csproj"
RUN dotnet build "firstapp.csproj" -c Release -o /app FROM build AS publish
RUN dotnet publish "firstapp.csproj" -c Release -o /app FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "firstapp.dll"]
```

准备dockerhub账号

到现在为止,docker仓库创建完毕,代码仓库也创建完毕,准备开始构建。

构建流程



















部署完成后,就可以看到 docker镜像上传到dockerhub了。

在服务器上运行docker

这里演示用ubuntu服务器, 首先安装docker环境

sudo apt-get install docker.io

安装成功后在终端输入docker,确保docker安装ok。

增加构建步骤,ssh到服务器,自动拉取镜像并运行。





	# stop and remove all containers
currcontainer=$(docker ps -a | grep "$(Build.Repository.Name)_feature*" | awk '{print $1}')
if [ "${currcontainer}" != "" ]; then
docker stop $(docker ps -a | grep "$(Build.Repository.Name)_feature*" | awk '{print $1}')
docker rm -f $(docker ps -a | grep "$(Build.Repository.Name)_feature*" | awk '{print $1}')
fi
# run curr
docker pull a304885433/$(Build.Repository.Name):$(Build.BuildId)
docker run -d -p 8002:80 --name=$(Build.Repository.Name)_feature a304885433/$(Build.Repository.Name):$(Build.BuildId)

再次部署,就可以看到部署成功,站点就可以访问了。

其他

  • 镜像名称一定要增加 账号前缀,比如说示例中的就是 a304885433/firstapp:xxxx ,这样在构建镜像后,才可以直接推动到这个账号下的这个仓库。
  • 服务器运行docker镜像的时候,必须先停止已运行的镜像,然后在启动。 在启动镜像时,需要指定name,后续可以根据name查询这个镜像。仅当该镜像存在,则需要停止并删除这个镜像。

后续优化

  • dockerid 可以定义成环境变量,在脚本中直接进行引用,这样可以保证后续脚本及构建步骤基本上可以模板化,保存为模板。

微软Azure DevOps 使用docker 持续集成 dotnet的更多相关文章

  1. 【Azure DevOps系列】Azure DevOps使用Docker将.NET应用程序部署在云服务器

    Docker持续集成 本章我们要实现的是通过我们往代码仓库push代码后,我们将每次的push进行一次docker自动化打包发布到docker hub中,发布到之后我将进行部署环节,我们将通过ssh方 ...

  2. 最佳实战Docker持续集成图文详解

    最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...

  3. asp.net core webapi/website+Azure DevOps+GitHub+Docker

    asp.net core webapi/website+Azure DevOps+GitHub+Docker 新春开篇作,主要写一下关于asp.net core web/api 2.2 项目借助dev ...

  4. 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

    使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...

  5. [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。

    目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...

  6. vsts + XX云服务器构建netcore+docker持续集成交付部署

    持续集成交付部署是什么意思,它给我们带来什么好处? 先贴一张图 持续集成(Continuous Integration) 持续集成强调开发人员提交了新代码之后,立刻进行构建.(单元)测试(这个要看情况 ...

  7. 微软 Azure DevOps Server 2019 Update 1 (TFS 2019.1)

    1.概述 微软在2019年5月发布Azure DevOps Server 2019后不到2个月的时间里,就快速准备好了第一个升级包(2019 Update 1),并计划在几周后发布正式版本.也许你还没 ...

  8. 微软Azure DevOps自动化部署

    1.准备一个https://hub.docker.com账号,申请一个免费的镜像仓库(免费账户可以申请一个) 创建docker远程镜像库 2.新建一个mvc的项目 给这个项目加上Dockerfile文 ...

  9. Azure DevOps (TFS) 与 Office 集成

    Azure DevOps Service 或者Azure DevOps Server 都支持与office工具集成,实现在office中完成工作项的导入导出和批量修改等功能.用户可以使用自己熟悉的of ...

随机推荐

  1. nuget程序包还原失败:未能解析此远程名称

    一个简便的方法就是取消下载缺少的程序包. 步骤如下: 1,工具--NuGet程序包管理器--程序包管理器设置 2,NuGet Package Manager--常规,取消勾选.

  2. 【转载】Windows下Mysql5.7开启binlog步骤及注意事项

    转自:https://www.cnblogs.com/wangwust/p/6433453.html 1.查看是否开启了binlog:show binary logs; 默认情况下是不开启的. 2.开 ...

  3. 在select中,载入时默认select为空白,选项内不显示空白项

    有两种办法,一种纯css实现,一种借助js实现. html: <body onload="load()"> <select id="abc" ...

  4. 第26天:js-$id函数、焦点事件

    一.函数return语句定义函数的返回值,在函数内部用return来设置返回值,一个函数只能有一个返回值.同时,终止代码的执行.所有自定义函数默认没有返回值return后面不要换行 var a=10, ...

  5. 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚 dp/线段树

    题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...

  6. BZOJ4240 有趣的家庭菜园(贪心+树状数组)

    显然相当于使序列变成单峰.给原序列每个数按位置标号,则要求重排后的序列原标号的逆序对数最少.考虑将数从大到小放进新序列,那么贪心的考虑放在左边还是右边即可,因为更小的数一定会在其两侧,与它自身放在哪无 ...

  7. NYOJ 1000 又见斐波那契数列

    描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[ ...

  8. 深入理解Delete(JavaScript)

    深入理解Delete(JavaScript) Delete  众所周知是删除对象中的属性. 但如果不深入了解delete的真正使用在项目中会出现非常严重的问题 (: Following 是翻译  ka ...

  9. 后缀自动机SAM学习笔记

    前言(2019.1.6) 已经是二周目了呢... 之前还是有一些东西没有理解到位 重新写一下吧 后缀自动机的一些基本概念 参考资料和例子 from hihocoder DZYO神仙翻译的神仙论文 简而 ...

  10. POJ1990:MooFest——题解

    http://poj.org/problem?id=1990 题目大意:定义一对在树轴上的点,每对点产生的值为两点权值最大值*两点距离,求点对值和. 显然n*n复杂度不行,我们需要用树状数组维护两个东 ...