前几篇文章中,我们讨论了如何通过流水线实现项目的编译、上传、打包、部署等操作,今天我们来实现一套完整的流程,把之前碎片化的知识点给串起来。

本次我们使用一个ASP.NET Core的WebApi项目来进行项目的演示,后面也会写java和golang的。

首先我们先创建一个ASP.NET Core WebAPI的模板项目,使用IDE创建就可以,我用的是jb全家桶的rider.

创建完成之后,我们稍微对项目做一点点修改,主要修改的内容为:关闭HTTP重定向,关闭鉴权,更改启动端口为5001.

在Program.cs中删除 HTTP重定向,鉴权的代码,在luanchsetting.json中更改启动端口为5000,注意这里改的只是你本地debug时候的端口和编译后部署时的不是一个配置。

这些搞好之后,启动项目,会自动弹开swagger的页面,我们访问一下里面的模板接口,可以看到返回了一个标准的json数据结构。

这些都准备好之后,我们把我们的代码推送到仓库里去,创建仓库的步骤不在赘述,我在系列文章的第一篇里已经做了介绍:《Azure DevOps (一) 托管自己的Git仓库

代码推送好之后,我们开始创建编译流水线来编译我们的webapi代码。

点击流水线,创建流水线之后右侧第一个选项就是.NET Core。毕竟是微软的亲儿子,地位都不一样,点击添加之后,我们可以看到有很多的选项

来执行不同的阶段,我们本次的目标是部署项目,所以我们使用publish来执行。

添加的时候这里要注意下把web project的勾给取消掉,打这个勾是默认编译mvc项目的他会去找你的wwwroot文件和webconfig

勾选完之后我们执行一下编译,然后就发现了一个天大的雷,身为微软的亲儿子,这个.NET Core的编译插件居然TM的不支持.NET 6,是的,你没听错,我都怀疑这爹不是亲的。(╯‵□′)╯︵┻━┻

既然出了这档子事儿,我们也只能自己想办法了,我选择的是自己下载.NET6的SDK,自己编译。

我们打开.net core的官网,选择linux安装.net core sdk  网站地址:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu#2110-

因为我们流水线的运行环境是乌班图,所以我装的是乌班图的。

安装命令如下:

wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0

然后我们在执行一下编译命令 dotnet publish

最后我们整理一下azure的流水线脚本,因为没有插件可用,所以这次的脚本需要我们自己纯手打,我们在script节点中加入sdk安装命令,然后创建第二个scprit节点用来进行项目的编译

当然全部写在一个里面也没有什么问题,但是还是建议分开,看着清爽。

脚本如下:

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml trigger:
- main pool:
vmImage: ubuntu-latest steps:
- script: echo Hello, world!
displayName: 'Run a one-line script' - script: |
echo Add other tasks to build, test, and deploy your project.
echo See https://aka.ms/yaml
wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0
displayName: 'Run a multi-line script'
- script:
cd /home/vsts/work/1/s;
dotnet publish;
cd /home/vsts/work/1/s/azure_dotnet_app/bin/Debug/net6.0/publish/;
ls
displayName: "publish dotnet"

然后我们运行一下看看效果,可以看到成功的安装了SDK6

然后执行dotnet publish,这次成功完成了编译

编译完之后,我们需要添加一下制品上传步骤,和我们之前的文章中一样,我们需要把制品上传到流水线的仓库上去方便后面使用。

编辑流水线,添加制品上传,目录选择我们的publish的目标目录,最后完成的流水线脚本如下:

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml trigger:
- main pool:
vmImage: ubuntu-latest steps:
- script: echo Hello, world!
displayName: 'Run a one-line script' - script: |
echo Add other tasks to build, test, and deploy your project.
echo See https://aka.ms/yaml
wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0
displayName: 'Run a multi-line script'
- script:
cd /home/vsts/work/1/s;
dotnet publish;
cd /home/vsts/work/1/s/azure_dotnet_app/bin/Debug/net6.0/publish/;
ls
displayName: "publish dotnet" - task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '/home/vsts/work/1/s/azure_dotnet_app/bin/Debug/net6.0/publish/'
ArtifactName: 'dotnet_app'
publishLocation: 'Container'

完成之后运行流水线,我们就可以在流水线的运行脚本结果中看到我们的流水线制品

然后接下来,我们去创建发布流水线,发布流水线的内容非常简单,前几篇的文章中我们使用的是FTP,后来我发现SFTP更好用,所以这里我们用SFTP

然后我们去准备一下服务器的环境,在服务器上安装一下sdk和nginx,顺道配置一下守护进程,代码如下:

centos安装sdk:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-6.0

安装nginx

yum install nginx
systemctl restart nginx

配置守护进程

[Unit]
Description=Example .NET Web API App running on Ubuntu [Service]
WorkingDirectory=/home/dotnet_app
ExecStart=/usr/bin/dotnet /home/dotnet_app/azure_dotnet_app.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install]
WantedBy=multi-user.target

配置反向代理:

server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

启动守护进程:

systemctl enable app
systemctl start app
systemctl status app

查看服务状态,服务正常运行。

然后,我们更改一下项目的源代码,返回一句祖传问候

然后在流水线中添加脚本命令:systemctl restart app

最后我们重新运行一下流水线,等待流水线运行完后,我们访问一下接口地址

成功输出祖传问候,第一个ASP.NET Core的流水线创建成功,完结撒花。

文章虽短,但是写这篇文章用了三个小时才完成,踩了一堆的坑,大家在调试过程中需要多多注意。

Azure DevOps (十一) 通过Azure Devops部署一个.NET Core WebAPI的更多相关文章

  1. kubernetes实战篇之部署一个.net core微服务项目

    目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...

  2. LINUX 下Jexus部署ASP.NET Core WebApi

    服务器:LINUX  ubuntu16.04  开发软件:VS2015 Update3   dotnet sdk: DotNetCore.1.0.0-VS2015Tools.Preview2   1. ...

  3. CentOs7 +Jexus 5.8.2部署Asp.Net Core WebApi 1.0生产环境

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  4. Azure DevOps (十三) 通过Azure Devops部署一个Go的Web应用

    前几篇文章中,我们分别实现通过azure来部署.NET和Springboot的应用,今天我们来研究一下如何部署一套Go的Web应用上去. 文章配套视频专栏: https://space.bilibil ...

  5. Azure 部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你在部署一个网站时,第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢?Azure 的 Web A ...

  6. 在 Azure 上部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...

  7. .net core webapi 前后端开发分离后的配置和部署

    背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S  Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...

  8. docker部署Asp.net core应用

    1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...

  9. Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序

    一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...

随机推荐

  1. CF1487G String Counting (容斥计数)

    传送门 考虑$c[i]>n/3$这个关键条件!最多有2个字母数量超过$n/3$! 没有奇数回文?长度大于3的回文串中间一定是长度为3的回文串,所以合法串一定没有长度=3的回文,也就是$a[i]\ ...

  2. RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  3. Struts2里面有什么隐式对象?

    Struts 2.1 的隐式对象 (这些隐式对象都是Map类型) parameters 用于访问请求参数 request 用于访问HttpServletRequest的属性 session 用于访问H ...

  4. maven在idea中的一点使用技巧

    maven在idea中的一点使用技巧 idea已经支持将参数的意思也展示出来,确实很方便. -U是强制拉取,因为如果拉取某个jar包,失败了,那么在一段时间内,idea不会重试,除非指定-U. -X呢 ...

  5. MariaDB ZIP方式安装(Window系统)

    Maria DB ZIP方式安装 Windows上ZIP包的入门非常简单-此发行版包括预构建的数据库文件,这些文件可以在解压缩ZIP后立即使用. 您可以从命令提示符运行mysqld.exe,如下所示: ...

  6. Spring常用的注入方式有哪些?

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 参考链接:Spring常用的三种注入方式

  7. Rust 中的数据布局--可选的数据布局

    Rust 允许你指定不同于默认的数据布局策略,并为你提供了不安全代码指南. repr(C) 这是最重要的"repr".它的意图相当简单:做 C 所做的事.字段的顺序.大小和对齐方式 ...

  8. ubuntu中有关环境变量的问题

    ubuntu查看环境变量方法 在Ubuntu中,我们可以使用三个命令来查看当前环境变量的设置,以确定我们有没有把路径加载到环境变量中去.我们 可以使用env,export,或者echo  $path, ...

  9. c/c++中的i++和++i的区别

    使用 i++ vs. ++i i++是先赋值再加1 ++i是先加1再赋值 到目前为止,你已经学习了如何编写下面这样的 C++ for 循环: for (int i = 0; i < 10; i+ ...

  10. 安装ESLint

    安装ESLint ESLint是静态代码检查工具,配合TypeScript使用可以帮助检查TypeScript的语法和代码风格. 添加ESLint到当前工程,yarn add -D eslint. 使 ...