使用 Azure DevOps Pipelines 生成 .NET Core WebJob 控制臺應用 CI/CD

????Web 應用程序通常需要作為后臺任務運行的進程,并在特定時間間隔進行計劃或在事件中觸發。它們不需要花哨的 IO 接口,因為重點是過程而不是輸出。Azure WebJobs 提供了出色的支持,通常在云環境中通過 Web 控制臺應用程序來實現此目的。WebJob?是?Azure 應用服務的一項功能,可用于在與 Web 應用、API 應用或移動應用相同的實例中運行程序或腳本。?Azure 應用服務是一種基于 HTTP 的服務,用于托管 Web 應用程序、REST API 和移動后端。

????.NET Framework?中的 Web 控制臺應用可輕松使用 Azure 服務生成和部署 WebJobs。此外,可以使用?Azure DevOps Pipelines?輕松為 CI/CD 配置 WebJobs 控制臺應用,以便在每次成功生成時自動將 Web 應用部署到 Azure 應用服務。因此,Azure 管道支持使用 Azure DevOps 服務以持續集成 (CI) /持續交付 (CD)?方式進行生成、測試和部署。

????如果在 .NET Framework 中生成 WebJob 控制臺應用,則通過將父 API 或 Web 應用鏈接到 Web/API 應用,可以非常輕松地生成和部署 WebJob,如下所示:

846318f91cd7297e2f995b45886dabca.png

3b7b824097666c64b6a870fa0cd0b994.png

????.NET Core 中的設計不支持上述 WebJob 控制臺應用程序與父 Web/API 應用的鏈接。那么我們該怎么做呢?

????在本文中,我們將了解如何獨立于父 Web/API 應用生成 .NET Core WebJob 控制臺應用,并使用 Azure DevOps 生成和發布管道將其部署在現有的父 Web/API 應用下。

生成管道:生成 .NET Core 控制臺應用

若要生成 .NET Core 控制臺應用,我們需要在 Azure DevOps 生成管道中執行四個基本生成任務。

  • dotnet restore

  • dotnet build

  • dotnet publish

  • 將生成項目發布到放置位置

Azure Web 作業僅支持以下文件類型:

  • .cmd、.bat、.exe

  • .ps1(使用 PowerShell.ps1 (using?PowerShell)

  • .sh(使用 Bash)

  • .php(使用 PHP)

  • .py(使用?Python)

  • .js(使用Node.js)

  • .jar(使用?Java)

由于我們位于 .NET Core 中,因此我們期望有一個 .exe 文件作為控制臺應用的輸出。如果僅通過運行來生成 .NET Core 應用,它將生成一個 .DLL 文件,但不會生成.EXE文件。若要生成.EXE文件作為生成輸出,請在步驟中使用以下參數:dotnet buildpublish

--configuration $(BuildConfiguration) --self-contained -r win10-x64 --output $(build.artifactstagingdirectory)

????這個參數在這里會有所不同,因為這將在構建中生成一個.EXE文件。--self-contained -r win10-x64

????接下來,選擇該選項。這將從生成輸出中創建一個 ZIP 文件。Enable Zip Published Projects

f0c30f9c8c21859d35ee959642671497.png

一旦它被發布到ZIP文件夾并完成,我們需要將此ZIP文件拖放到放置位置。用作要發布的路徑。使用您選擇的任何項目名稱。在此示例中,項目名稱為:$(Build.ArtifactStagingDirectory)webjobs_drop

5fc241b55d92e65d0bcfe8e701aa9b44.png

發布管道:將生成項目部署到 Azure 應用服務

運行生成管道后,你將在位置獲取生成輸出。webjobs_drop/.zip

若要將其部署到 Azure 應用服務中運行的任何現有 Web/API 應用的 WebJob,我們必須運行 Azure PowerShell 腳本任務來實現此目的。

我們將用于將生成輸出部署到應用服務。這會將壓縮的生成輸出解壓縮到文件夾中。KUDU Zip Deploy APIwwwroot\App_Data\Jobs\\?

若要設置發布管道,我們需要使用以下管道變量創建一個空管道:

  • resourceGroupName- 應用程序的資源組名稱

  • scheduleName- 有爭議/觸發(在本例中,它是連續的)

  • scmApiUrl- SCM API 網址;示例:https://.scm.azurewebsites.net/api

  • webJobName- 您的 WebJob 名稱;您的代碼將部署在 wwwroot\App_Data\Jobs\scheduleName\webJobName 文件夾下

  • zippedArtifactPath- 構建輸出文件的壓縮工件路徑

28f7d116959675526c103d9f58c37cd7.png


946ec439b9ad7df81e84e2ef39db6339.png

設置變量后,我們需要執行以下操作:

  • 添加一個Azure PowerShell script task

  • 選擇“Azure 連接”類型

  • 選擇 WebApp 所在的 Azure 訂閱

  • 選擇“腳本類型”作為內聯腳本

71c6200c397858bc85042e49a1708868.png

在內聯腳本編輯器中,添加以下 PowerShell 腳本:

#Zipped artifact path - get the path from Azure DevOps Pipeline variables
$path = "$(System.DefaultWorkingDirectory)\$($env:zippedArtifactPath)"#Test the path if exists
if (-not (Test-Path $path)) 
{throw [System.IO.FileNotFoundException] "$($path) not found."
}#Resource type and details
$resourceType = "Microsoft.Web/sites/config"
$resourceName = "$($env:webAppName)/publishingcredentials"#Get the Publishing Profile details
$publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $($env:resourceGroupName) -ResourceType $resourceType -ResourceName $resourceName -Action list -Force#Creating the Auth Token using user name and password from Publish profile credentials
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName,$publishingCredentials.Properties.PublishingPassword)))#Get the file from the Build Artifacts path 
$files = Get-ChildItem -Path $path -Recurse
Test-Path -Path $files[0]   #Authentication Header
$authHeader = " Basic " + $base64AuthInfo#Kudu Zip Deploy API URL
$deployUrl = "$($env:scmApiUrl)/zip/site/wwwroot/App_Data/jobs/$($env:scheduleName)/$($env:webJobName)/"#Invoke Kudu Zip Deploy API to deploy the WebJob
$contentType = "multipart/form-data"
$userAgent = "powershell/1.0"
$ZipHeaders = @{
Authorization = $authHeader
}$response = Invoke-RestMethod -Uri  ([System.Uri]::new($deployUrl)) -Headers $ZipHeaders  -UserAgent $userAgent -Method PUT -InFile $files[0] -ContentType $contentTypeWrite-Host "Deployment Successful"

此 PowerShell 腳本將獲取 Web 應用的發布配置文件詳細信息,并使用此信息登錄到 KUDU ZipDeploy API,以將 Zipped 生成輸出上傳到所需位置。

部署位置定義如下:

  • SCM API URL 和虛擬目錄路徑?https://<>.scm.azurewebsites.net/api/zip?
    site/wwwroot/App_Data/jobs/<continuous/triggered>/

訪問特定于環境的配置

上述生成和發布管道將為 .NET Core 控制臺應用程序生成并生成.EXE文件,并將生成輸出部署到 Azure 應用服務虛擬目錄。在某些情況下,Web 作業可能需要讀取某些特定于環境的配置。在這種情況下,您必須將特定于環境的文件添加為 .appsettings.jsonappsettings.json

要從特定于環境的 JSON 文件中讀取值,我們可以依賴該變量。可以從 Azure 門戶手動設置此變量,也可以在應用設置部分使用 Azure 發布管道部署父 WebApp/API 應用時設置此變量。ASPNETCORE_ENVIRONMENT

builder.ConfigureAppConfiguration((hostingContext, config) =>{var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");Console.WriteLine("Environment Variable: " + environmentName);var env = hostingContext.HostingEnvironment;Console.WriteLine("hostingContext.HostingEnvironment: " + env.EnvironmentName);config.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true).AddEnvironmentVariables().Build();});

將上述代碼添加到文件中,以便從文件中讀取特定于環境的值。Program.csappsettings.json

總而言之,我們執行了以下操作:

  • dotnet publishwith 參數,用于生成 WebJob 支持的 EXE 文件--self-contained -r win10-x64?

  • 壓縮生成項目目錄

  • 使用 API 將 WebJob 控制臺應用程序發布到現有的 web/API 應用程序虛擬目錄。KUDU ZipDeployAzure PowerShell Script

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42786.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

企業數字化轉型中的低代碼開發平臺應用:釋放創新潛能

隨著信息技術的飛速發展&#xff0c;企業數字化轉型已成為行業趨勢。在這場轉型浪潮中&#xff0c;低代碼開發平臺以其獨特的優勢&#xff0c;成為眾多企業實現快速迭代、高效創新的得力助手。本文將深入探討低代碼開發平臺在企業數字化轉型中的應用&#xff0c;以及如何幫助企…

Mac平臺虛擬機 Parallels Desktop v19.4.1,支持M1/M2/M3芯片組

Parallels Desktop for Mac是功能強大靈活度高的虛擬化方案&#xff0c;無需重啟即可在同一臺電腦上隨時訪問Windows和Mac兩個系統上的眾多應用程序。從僅限于PC的游戲到生產力軟件&#xff0c;Parallels Desktop都能幫您實現便捷使用。Parallels Desktop 是一款專業的Mac虛擬機…

Docker搭建kafka+zookeeper以及Springboot集成kafka快速入門

參考文章 【Docker安裝部署KafkaZookeeper詳細教程】_linux arm docker安裝kafka-CSDN博客 Docker搭建kafkazookeeper 打開我們的docker的鏡像源配置 vim /etc/docker/daemon.json 配置 { "registry-mirrors": ["https://widlhm9p.mirror.aliyuncs.com"…

vue父子組件通信實現模糊搜索功能

我遇到的問題&#xff1a; 我的搜索框在父頁面&#xff0c;靜態數據都在子頁面。怎么實現模糊查詢數據&#xff1f; 昨天的嘗試&#xff1a;先把搜索的內容數據存到session里&#xff0c;然后從session里拿&#xff0c; 結果&#xff1a;存是存進去了&#xff0c;卻拿不到。應…

Django學習收尾

啟動項目命令 python manage.py runserver 文件上傳功能實現 title "Form上傳"if request.method "GET":form UpForm()return render(request, upload_form.html, {"form": form, "title": title})form UpForm(datarequest.POS…

Java對象創建究竟是在棧上還是堆上??

在 Java 中&#xff0c;對象的創建通常情況下是在堆上。 基本數據類型&#xff08;如 byte、short、int、long、float、double、char&#xff09;在方法內聲明時&#xff0c;其值會存儲在棧上。除了基本數據類型之外的所有對象&#xff0c;都是由 Java 虛擬機&#xff08;JVM&…

python入門基礎知識·二

""" # Python介紹 # Python注釋 # 單行注釋&#xff1a; # # 多行注釋&#xff1a; r """""" # Python輸出和輸入 # print: 輸出 # input: 輸入 ①會讓程序暫停&#xff0c;②得到的是字符串內容 int(&…

Linux Mac 安裝Higress 平替 Spring Cloud Gateway

Linux Mac 安裝Higress 平替 Spring Cloud Gateway Higress是什么?傳統網關分類Higress定位下載安裝包執行安裝命令執行腳本 安裝成功打開管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官網 Higress是什么? Higress是基于阿里內部的…

Vue指令詳解與實操運用 - 編程魔法

在Vue.js的世界里&#xff0c;指令就像是一位魔法師&#xff0c;它們能夠賦予HTML元素以生命&#xff0c;讓網頁與用戶互動起來。今天&#xff0c;我們就來揭開這些指令的神秘面紗&#xff0c;看看它們是如何在我們的日常開發中發揮作用的。 1. v-text 和 v-html - 文字與內容的…

思考:Java內存模型和硬件內存模型

前言 前一陣在看volatile的原理&#xff0c;看到內存屏障和緩存一致性&#xff0c;發現再往底層挖就挖到了硬件和Java內存模型。這一塊是自己似懂非懂的知識區&#xff0c;我一般稱之為知識混沌區。因此整理這一篇文章。 什么是內存模型&#xff08;Memory Model&#xff09;…

CentOS6用文件配置IP模板

CentOS6用文件配置IP模板 到 CentOS6.9 , 默認還不能用 systemctl , 能用 service chkconfig sshd on 對應 systemctl enable sshd 啟用,開機啟動該服務 ### chkconfig sshd on 對應 systemctl enable sshd 啟用,開機啟動該服務 sudo chkconfig sshd onservice sshd start …

未羽研發測試管理平臺

突然有一些覺悟&#xff0c;程序猿不能只會吭哧吭哧的低頭做事&#xff0c;應該學會怎么去展示自己&#xff0c;怎么去宣傳自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;這兩天一直在整理自己的作品&#xff0c;也為接下來的找工作多做點準備。接下來…

LT7911UX 國產原裝 一拖三 edp 轉LVDS 可旋轉 可縮放

2.一般說明 該LT7911UX是一種高性能Type-C/DP1.4a到MIPI或LVDS芯片的VR/顯示應用。HDCP RX作為HDCP轉發器的上游&#xff0c;可以與其他芯片的HDCP TX配合實現轉發器功能。 對于DP1.4a輸入&#xff0c;LT7911UX可配置為1/2/4通道。自適應均衡使其適用于長電纜應用&#xff0c;最…

Junior.Crypt.2024 CTF Web方向 題解WirteUp 全

Buy a cat 題目描述&#xff1a;Buy a cat 開題 第一思路是抓包改包 Very Secure App 題目描述&#xff1a;All secrets become clear 開題 亂輸一個密碼就登陸成功了&#xff08;不是弱口令&#xff09; 但是回顯Your role is: user 但是有jwt&#xff01;&#xff01;&a…

深入理解基本數據結構:鏈表詳解

引言 在計算機科學中&#xff0c;數據結構是存儲、組織和管理數據的方式。鏈表是一種重要的線性數據結構&#xff0c;廣泛應用于各種編程場景。在這篇博客中&#xff0c;我們將詳細探討鏈表的定義、特點、操作及其在不同編程語言中的實現。 什么是鏈表&#xff1f; 鏈表是一種…

Mobile ALOHA前傳之VINN, Diffusion Policy和ACT對比

VINNDiffusion PolicyACT核心思想1.從離線數據中自監督學習獲得一個視覺編碼器&#xff1b;2.基于視覺編碼器&#xff0c;從采集的示例操作數據中檢索與當前觀測圖像最相似的N張圖像以及對應的動作&#xff1b;3.基于圖像編碼器的距離對各個動作進行加權平均&#xff0c;獲得最…

Open3D loss函數優化的ICP配準算法(精配準)

目錄 一、概述 1.1ICP的基本步驟 1.2損失函數的設計 二、代碼實現 2.1關鍵函數 2.2完整代碼 三、實現效果 3.1原始點云 3.2配準后點云 3.3計算數據 一、概述 ICP(Iterative Closest Point)配準算法是一種用于對齊兩個點云的經典算法。其目標是通過迭代優化…

Istio實戰教程:Service Mesh部署與流量管理

引言 Istio是一個開源的服務網格&#xff0c;它提供了一種統一的方法來連接、保護、控制和觀察服務。本教程將指導你從零開始部署Istio&#xff0c;并展示如何使用Istio進行基本的流量管理。 環境準備 Kubernetes集群&#xff1a;Istio運行在Kubernetes之上&#xff0c;確保…

W25Q64 Flash存儲器與STM32:硬件與軟件的完美結合案例

摘要 在嵌入式系統中&#xff0c;數據存儲是關鍵組成部分之一。W25Q64 Flash存儲器因其高容量、低功耗和高可靠性&#xff0c;成為STM32微控制器項目中優選的存儲解決方案。本文將展示W25Q64與STM32微控制器集成的案例&#xff0c;包括硬件設計、SPI通信協議實現和軟件編程策略…

記錄在Windows上安裝Docker

在Windows上安裝Docker時&#xff0c;可以選擇使用不同的后端。 其中兩個常見的選擇是&#xff1a;WSL 2&#xff08;Windows Subsystem for Linux 2&#xff09;和 Hyper-V 后端。此外&#xff0c;還可以選擇使用Windows容器。 三者的區別了解即可&#xff0c;推薦用WSL 2&…