SlideShare a Scribd company logo
1 of 63
Azure DevOps Service
應用架構與秘辛
Edward Kuo
Edward Kuo
• 2020 宏碁科技 DevOps 講師
• 2020 啟碁科技 Azure DevOps 講師
• 2020 Azure Monitor with TSMC Form 講師
• 2019 台灣 恩智浦半導體 DevOps 培訓講師
• 2019 .NET Conf Taipei 講師
• 2019 中原大學 資料科學實務 客座講師
• 2019 中原大學 資工系 雲端計算平台實務 客座講師
• 2019 Agile Tour Hsinchu DevOps 講師
• 2019 DevOps Days Taipei 講師
• 2019 DevOps Expo @Trend Micro 講師
• 2019 翻轉營運契機 Azure DevOps 趨勢與實務研討會 講師
• 2019 Insider Dev Tour 台北站 講師
• 2018 DevOps Days Taipei 講師
• 2018 DOIS DevOps 國際峰會 深圳站 講師
• 2018 Insider Dev Tour 台北站 講師
• 2018 .NET Core Conf 台北站 講師
• 2018 Agile Tour Taichung 講師
• Global Azure Bootcamp 台灣 & 廣州 講師
• 微軟 北京 Tech Summit 講師
Microsoft Regional Director
Microsoft Azure MVP
Kingston IT Manager
https://profile.edwardkuo.dev/
2
序
Help Us Something
• 時間花在創造商業價值,降低整合異質平台帶來的不便性
• 尤其對 .NET 或是微軟技術開發者
• 從需求管理、開發到發佈採用同一個平台工作
• 因應開發技術的不斷更新,自動擴充和支持
• Service版本才能做到即時性更新
• 彈性且容易整合非Microsoft的平台
Azure DevOps
• Team Foundation Server
• Azure DevOps Server
是基於SQL Server的地端產品
• Visual Studio Team Service
• Azure DevOps Service
是基於Azure的SaaS級的雲端服務平台
5
Azure DevOps
• Server & Service 兩者區別
• Scope and scale data
• Authentication
• Users and groups
• Manage user access
• Security and data protection
• Service無法透過SSRS做DevOps數據報表
• 兩者迭代速度不同
6
Cloud Trend
有越來越多的組織選擇多雲和混合
雲解決方案。 這些解決方案除了提
高性能外,還提供靈活性,控制性
和可用性。多雲和混合雲的使用比
例是有所增加。
Architect Base On Azure DevOps
Our Azure DevOps Ecosystem
DevOps Map Azure DevOps
9
Design Azure DevOps
Architect
• 80% 系統是佈署在企業內部
• 20% 系統是佈署在Azure Services
• 必須能符合企業應用情境模式進行佈署
Design Hybrid DevOps Architect
Artifacts Service
• 解耦
• 系統拆解
• 拆分到耦合性最小元件,透過共用元件
或是核心元件,並重複使用與增加被測
試可能性
• 降低CI時間
• 系統程式碼越多,每次編譯拉下程式碼
重新編譯時間就會越長
• 元件化
• 在分散開發與快速迭代下,不影響他人,
耦合性降低,持續整合也會加快且更好
釐清問題
Artifacts Service
• 建立團隊/企業的Feed
• 能放上第三方元件的nupkg 檔案
• 透過CI / CD 建立 nupkg 檔案
• 只需要使用NuGet Push Task
Artifacts Service
• 避免企業使用過期元件
• 設定Package 保留週期
• 設定最多Package版本數量
• 設定保留天數
Agent Pool Practice
Azure DevOps Agent Pool
• Microsoft Agent Pool
• Azure Pipeline
• Hosted macOS
• Hosted Windows Container
• Custom Agent Pool
• Agent Pool
→Agent
→Host
17
Custom Azure Pipeline
Microsoft托管代理
自托管代理
本地環境
Agent Pools
• 我們設置以下Agent Pool
• Azure Pipeline
• Private Cloud Build Pool
• Private Cloud Release Pool
• Private Premise Build Pool
• Private Premise Release Pool
• Private Premise Docker 1803 Pool
• Private Premise Docker 2004 Pool
Use Custom Agent Reason
• 加快Pull Code 速度
• 加快Build Container速度
• 避免.NET Core / .NET Framework 更新問題,
導致舊系統無法Build
• Microsoft Agent 啟動速度有時太慢
• Release的環境在地端
• 省錢
Agent Pool Design
• Build 和 Release Agent 要分開不同Pool
• 地端Build 和Release Agent服務帳號要不同
• 如果資源允許, Build 和 Release Agent要不同Host
• Build Container 與 Non-Build Container Agent Pool
需要分開
• 雲端Build Agent Pool內的Agent最好設置在不同
Region
Use Custom Agent Allocation
• 除非特殊需求才使用Private Premise的Build Agent
• Build Container使用Private Premise的Build Agent
• 裝載Container Host版本不同,Build Agent也要放在對應
的Host 版本
• Release到Azure環境,使用Private Cloud Release
Agent
• Release到On-Premise,使用Private Premise Release
Agent
Agent Version Challenge
• Agent 版本最好能自動更新
• 無法自動更新時,務必要定期手動離線更新Agent
• Build Agent 不更新,會導致新版本.NET或是相關
套件無法進行編譯
• 若發生Azure DevOps Service找不到Agent,多半是
Agent版本過舊
Pipeline Practice
Pipeline Design Patten
• CI 僅處理Build & Unit Test Process
• CI 編譯時間能越短越好
• CI 設計盡量與Agent的OS相依性低
• CI 設計要能隨時可以切換Agent Pool
此相片 (作者: 未知的作者) 已透過 CC BY-NC 授權
Pipeline Design Patten
• Release 僅處理應用程式佈署或是進行環境佈署
• 敏感參數的安全性,用Library管理與置換
• Build Artifacts不要Keep在Local Host,一律用
Upload方式Keep在Azure DevOps
• 即使一個PowerShell Script可以完成,也要區分
Task處理
Pipeline Design Flow
Menu
手動執行模擬
Process
建立Task
Test
測試CI
Review
觀察執行時間
Build Common Rule
• 用Library做DEV、UAT和PRD參數置換
• 所有Build結果,必須上傳到Pipeline Artifacts
• Container: 先Build Application,再Build
Container
• 不同版本Host編譯的Container不能共用
• 不同Branch都要有Build Pipeline
Build Type
• .NET Framework
• ASP.NET MVC
• API
• Container
• Console App
• VSTO
• SQL Project
• Hexo Web Site
• .NET Core
• Vue.js & ASP.NET Core
• API
• Container
• Console App
• Component
• Azure Function
• WPF
Build .NET Framework
• 順序
• NuGet Retore : 版本過舊,可能會造成還原失敗
• Regex : 自動更新AssemblyInfo內版本號
• Replace Parameter : 更換Web.config的設定參數
• SonarQube: Scan Code
• MS Build : 編譯
• UT : Unit Test
• Publish Artifact : 上傳編譯好後的檔案
• 這裡並未封裝成ZIP檔案做部署
Build .NET Core
• 順序
• .NET Core : 還原Package
• Replace Parameter : 更換appsettings.json的設定參
數
• SonarQube: Scan Code
• .NET Core : 編譯
• Publish Artifact :上傳編譯後的檔案
• 可以用ArchiveFiles@2,封裝檔案成
ZIP File
• 由小到大版本,安裝.NET Core SDK
Build Vue.js & .NET Core
• 順序
• .NET Core : 還原套件
• Npm : 用CI Command還原npm套件
• Replace Tokens : 置換Appsetting參數
• Replace Tokens : 置換Webpack參數
• Npm : 用Run Command建置前端程式
• .NET Core : 編譯ASP .NET Core
• Publish Artifact :上傳編譯後的檔案
• npm run 的參數要在package.json設
定好
Build .NET Core & Container
• 順序
• 與Build .NET Core 順序相同
• Copy File : Copy Dockerfile 到Artifact資料夾
• Publish Artifact :上傳編譯後的檔案和Dockerfile
• Download build artifacts : 下載編譯後檔案和
Dockerfile
• Build Docker : 將檔案Copy到Container並編譯
Docker
• Push Docker : Push Container到ACR
Build .NET Core & Container
• 分批建置Container Application
• Application Agent
• Docker Agent
• 不需要Container時候,可以單獨發布
• 能單獨針對編譯後的Application除錯
• Container編譯時候,帶入版本號
Build SQL Project
• 順序
• SQL Enlight Code Analysis : Scan SQL
• Publish Test Results : 上傳Test Result
• MS Build : 編譯
• Copy File : Copy Dacpac到Artifact資料夾
• Publish Artifact :上傳編譯後的檔案
• 首先必須先用SQL Project,針對資料庫程式進
行版控
Release Common Rule
• 所有編譯後的檔案,一律從Build
Artifact取得
• 正式環境部署皆需要人員Approve
• 非Container的佈署,大多用Copy
File方式處理
• 佈署用的參數也存放在Library
• Release Agent不放在被佈署的Host
• Compose File額外Repos管理
Release Type
• NuGet Package
• On-Premise
• Container by Docker Host
• Windows Service by Server & Single PC
• Trigger FTP
• Web Site
• API
• Single DLL File
• MS SQL Database
• VSTO Application
• WPF / Windows Form Application
• Azure
• Azure Web App Service
• Azure Function
• Azure SQL Database
Release Container
• 順序
• 先從IaC Repos下載該Container的Compose.yml
• 置換Compose file的Docker版號
• docker-compose Pull : 下載 Container
• docker-compose Down : 停掉Container
• docker-compose Up : 啟動Container
• 從UAT到PRD,僅Container轉移Host,並用
不同IaC啟動Container
Release Container
• 每次Release的Container必須要有版號,才可以進行管理與快速復原
• 用$(Release.Artifacts.Pipeline Name.BuildNumber) 取得CI 版本
• Compose的image版本號碼是用Buildnumber
Release Windows Service
• 順序
• PowerShell : 停止WS在遠距Host
• Command Line : 卸載WS
• Copy File : 複製新的Application
• PowerShell : 安裝WS到遠距Host
• Command Line : 啟動WS
• 目前並無專門Task,必須透過
Command處理
Compare PRD Database
• 順序
• Download Build Artifacts : 下載需要佈署DB
相關的Script
• PowerShell : 執行佈署Script
• Delete files : 刪除佈署DB相關的Script
• Send email : 差異化檔案用Mail寄出
• 前提DB程式碼要用SQL Project
做管理
• Agent Host要安裝sqlpackage.exe
Compare PRD Database
• 差異化比較屬性,用DB.Publish.xml
管理
• 執行差異化比較的Script,用
PowerShell執行
• 在PowerShell內執行DB.Publish.xml
如果可以,就讓Pipeline做自動化的平台
Azure DevOps Notifications
Build & Release Notifications
• 所有Build / Release 的資訊都要通知到團隊頻道
• 訊息發送到Microsoft Teams
• Azure DevOps Connector
• Webhook方式傳送
• Azure Pipelines
• Azure DevOps bot
Build & Release Notifications
• 所有Build / Release 的資訊都要通知到團隊頻道
• 訊息發送到Microsoft Teams
• Azure DevOps Connector
• Webhook方式傳送
• Azure Pipelines
• Azure DevOps bot
Build & Release Notifications
• Advance
• Build Fail 通知到個人 Teams Chat
• Service Hooks + Power Automate
另類使用方式
非關DevOps,使用模式僅參考,因此,使用前要深思
Schedule Controller
• 透過Release定時驅動功能,作為系統 / 維運 的排程器
• 不需要使用Windows Schedule
• 有完整歷程記錄
• 可以設定執行排程的流程
• 如果用Azure DevOps Service,還可以雲端手動啟動地端排程
Backup All Repos File
• 基於ISO需求,需要將雲端
Repos File 備份到地端
• 用PowerShell & Git 指令
• 呼叫Azure DevOps API
• 搭配Release排程功能
$PATToken="$(PAT)"
$base64AuthInfo=
[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("
:$($PATToken)"))
$AzureDevopsOrg=“Org"
$AzureDevOpsProject=“Name"
$LocalfilePath="$(BackupFilePath)"
$ProjectUrlAPI =
"https://dev.azure.com/$($AzureDevopsOrg)/$($AzureDevOpsProject)/_apis/g
it/repositories?api-version=6.1-preview.1"
$Repo = (Invoke-RestMethod -Uri $ProjectUrlAPI -Method Get -
UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f
$base64AuthInfo)})
$RepoName= $Repo.value.name
Backup All Repos File
• 基於ISO需求,需要將雲端
Repos File 備份到地端
• 用PowerShell & Git 指令
• 呼叫Azure DevOps API
• 搭配Release排程功能
ForEach ($name in $RepoName)
{
$ReposUrl="https://anything:$($PATToken)@dev.azure.com/$($AzureDevopsOrg)/$($AzureDevOp
sProject.Replace(" ","%20"))/_git/$($name.replace(" ","%20"))"
$FilePath="$($LocalfilePath)$($name)"
if(Test-Path $FilePath)
{
cd $FilePath
write $ReposUrl
git pull origin UAT
git pull origin master
}
else {
write $ReposUrl
git clone $ReposUrl $FilePath -b master
}
}
Trigger CI on Release Stage
• 當某個重要Package被Release後,必
須自動驅動某系統的CI,讓系統重新
編譯取得最新的Package 版本
Trigger CI on Release Stage
• 當某個重要Package被Release後,必
須自動驅動某系統的CI,讓系統重新
編譯取得最新的Package 版本
• CI 必須要在NuGet Package添加取得
最新版本Package
Use NuGet Task
Command : Custom
Command and arguments:
update “Project.sln" -Id “NuGet Package Name" -
ConfigFile "nuget.config"
常用的Marketplace套件
Often Extension
• SQL Enlight Code Quality Task
• 掃描SQL語法是否有符合SQL撰寫規範
• SonarQube Task
• 整合SonarQube服務,進行Code掃描
• Trigger Build Task
• 在現有Pipeline 流程,驅動其他CI Pipeline流程
Often Extension
• Regex Replace Task
• 用Regular Expression替換掉Code資訊,如: AssemblyInfo.cs
• Replace Token Task
• 透過#{變數名稱}#,將資訊注入到File,常搭配Library使用
• Send Mail Task
Summary
Our Challenge
• 不容易明白的錯誤訊息
• 介面與功能常常改變
• 網路穩定性
• 不一定能Work的Preview功能
• 有部分功能可能沒有,但是在.NET世界,基本上都具備
• Pipeline Task版本更新或是Deprecated
• Pipeline的管理
• Pipeline 失敗不一定是Application問題
Use YAML
• 使用YAML
• CI 使用YAML,可以讓有相同CI流程系統,可以快速建立Pipeline
• YAML讓Pipeline具有版控
• YAML支援CD,但功能尚不完善,不建議使用
• 可以離線編輯Pipeline
• 挑戰
• 語法需要熟悉,遇到第三方Task的YAML,不容易撰寫
• 沒有可視化流程
• 除非很熟悉,不然需要比對文件才知道Task屬性
Azure DevOps CLI & API
• 搭配CLI
• 使用CLI可以擴展Azure DevOps,從命令行管理許多Azure DevOps服務。
• 搭配API
• 透過REST API提供對服務的創建,檢索,更新或刪除
Azure DevOps 可以是DevOps工具
也可以是一個應用平台
Reference
• https://docs.microsoft.com/en-us/azure/devops/cli/?view=azure-devops
• https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-
devops-rest-6.1
• https://github.com/edwardkuo/AzureDevOpsPipelineSample
Thanks for joining!
Ask questions on Twitter using #dotNETConf
特別感謝

More Related Content

What's hot

Database in DevOps
Database in DevOpsDatabase in DevOps
Database in DevOpsEdward Kuo
 
DevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyCA Technologies
 
Azure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストAzure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストKuniteru Asami
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅Rick Hwang
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with KarateTakanori Suzuki
 
Introduction to Azure DevOps
Introduction to Azure DevOpsIntroduction to Azure DevOps
Introduction to Azure DevOpsLorenzo Barbieri
 
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發Edward Kuo
 
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | EdurekaAzure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | EdurekaEdureka!
 
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...whywaita
 
What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...
What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...
What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...Edureka!
 
[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOps[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOpsNaoki (Neo) SATO
 
Cloud Foundryは何故動くのか
Cloud Foundryは何故動くのかCloud Foundryは何故動くのか
Cloud Foundryは何故動くのかKazuto Kusama
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.jsStefan Stölzle
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
DevOps Introduction
DevOps IntroductionDevOps Introduction
DevOps IntroductionRobert Sell
 

What's hot (20)

Azure devops
Azure devopsAzure devops
Azure devops
 
Power of Azure Devops
Power of Azure DevopsPower of Azure Devops
Power of Azure Devops
 
Azure DevOps
Azure DevOpsAzure DevOps
Azure DevOps
 
Database in DevOps
Database in DevOpsDatabase in DevOps
Database in DevOps
 
DevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than Technology
 
Azure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストAzure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステスト
 
Azure DevOps
Azure DevOpsAzure DevOps
Azure DevOps
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
 
Introduction to Azure DevOps
Introduction to Azure DevOpsIntroduction to Azure DevOps
Introduction to Azure DevOps
 
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
 
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | EdurekaAzure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
Azure DevOps Tutorial | Developing CI/ CD Pipelines On Azure | Edureka
 
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
 
DevOps introduction
DevOps introductionDevOps introduction
DevOps introduction
 
What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...
What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...
What is DevOps | DevOps Introduction | DevOps Training | DevOps Tutorial | Ed...
 
[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOps[JAZUG Tohoku Azure DevOps] Azure DevOps
[JAZUG Tohoku Azure DevOps] Azure DevOps
 
Cloud Foundryは何故動くのか
Cloud Foundryは何故動くのかCloud Foundryは何故動くのか
Cloud Foundryは何故動くのか
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.js
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
DevOps Introduction
DevOps IntroductionDevOps Introduction
DevOps Introduction
 

Similar to [2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛

twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用謝 宗穎
 
docker intro
docker introdocker intro
docker introkoji lin
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
GDG Taichung: What is new in Firebase
GDG Taichung: What is new in Firebase GDG Taichung: What is new in Firebase
GDG Taichung: What is new in Firebase Duran Hsieh
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
GitHub Action Introduction
GitHub Action IntroductionGitHub Action Introduction
GitHub Action IntroductionDuran Hsieh
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲ChinaNetCloud
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Gelis Wu
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 TaiwanAzure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 TaiwanWill Huang
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)Will Huang
 
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式升煌 黃
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍Tianwei Liu
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
 
前端转行 DevOps 经验分享
前端转行 DevOps 经验分享前端转行 DevOps 经验分享
前端转行 DevOps 经验分享Yan Wang
 

Similar to [2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛 (20)

twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
docker intro
docker introdocker intro
docker intro
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
GDG Taichung: What is new in Firebase
GDG Taichung: What is new in Firebase GDG Taichung: What is new in Firebase
GDG Taichung: What is new in Firebase
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
GitHub Action Introduction
GitHub Action IntroductionGitHub Action Introduction
GitHub Action Introduction
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 TaiwanAzure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
前端转行 DevOps 经验分享
前端转行 DevOps 经验分享前端转行 DevOps 经验分享
前端转行 DevOps 经验分享
 

More from Edward Kuo

應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務
應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務
應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務Edward Kuo
 
如何使用微軟Power系列服務的看法
如何使用微軟Power系列服務的看法如何使用微軟Power系列服務的看法
如何使用微軟Power系列服務的看法Edward Kuo
 
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊Edward Kuo
 
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環Edward Kuo
 
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用Edward Kuo
 
[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...
[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...
[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...Edward Kuo
 
[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步
[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步
[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步Edward Kuo
 
ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能Edward Kuo
 
大型製造業實踐DevOps 團隊之路
大型製造業實踐DevOps 團隊之路大型製造業實踐DevOps 團隊之路
大型製造業實踐DevOps 團隊之路Edward Kuo
 
[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐
[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐
[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐Edward Kuo
 
[2018 DevOps Days]大型企業如何推行DevOps
[2018 DevOps Days]大型企業如何推行DevOps[2018 DevOps Days]大型企業如何推行DevOps
[2018 DevOps Days]大型企業如何推行DevOpsEdward Kuo
 
建構Windows混合現實應用程式
建構Windows混合現實應用程式建構Windows混合現實應用程式
建構Windows混合現實應用程式Edward Kuo
 
2018 Experience for Microsoft Teams
2018 Experience for Microsoft Teams2018 Experience for Microsoft Teams
2018 Experience for Microsoft TeamsEdward Kuo
 
微軟 Hololens 混合現實平台開發
微軟 Hololens 混合現實平台開發微軟 Hololens 混合現實平台開發
微軟 Hololens 混合現實平台開發Edward Kuo
 
How to use Microsoft Teams
How to use Microsoft Teams How to use Microsoft Teams
How to use Microsoft Teams Edward Kuo
 
Microsoft Tech Summit 2017 - 制造业运用微软研发云实现云到端的 DevOps 架构
Microsoft Tech Summit  2017 - 制造业运用微软研发云实现云到端的 DevOps 架构Microsoft Tech Summit  2017 - 制造业运用微软研发云实现云到端的 DevOps 架构
Microsoft Tech Summit 2017 - 制造业运用微软研发云实现云到端的 DevOps 架构Edward Kuo
 
[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops
[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops
[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的DevopsEdward Kuo
 
2016 Azurebootcamp 中國Azure 使用經驗
2016 Azurebootcamp 中國Azure 使用經驗2016 Azurebootcamp 中國Azure 使用經驗
2016 Azurebootcamp 中國Azure 使用經驗Edward Kuo
 
ICP備案流程演示
ICP備案流程演示ICP備案流程演示
ICP備案流程演示Edward Kuo
 
中國阿里雲與Azure比較
中國阿里雲與Azure比較中國阿里雲與Azure比較
中國阿里雲與Azure比較Edward Kuo
 

More from Edward Kuo (20)

應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務
應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務
應用 Azure Platform-as-a-Service & DevOps 打造彈性企業服務
 
如何使用微軟Power系列服務的看法
如何使用微軟Power系列服務的看法如何使用微軟Power系列服務的看法
如何使用微軟Power系列服務的看法
 
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
 
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
 
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
 
[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...
[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...
[Agile Tour Hsinchu 2019] Our practice in the DevOps Process for Manufacture ...
 
[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步
[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步
[Study4.TW .NET Conf 2019]看,用 Azure 建立工業 4.0 的第一步
 
ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能
 
大型製造業實踐DevOps 團隊之路
大型製造業實踐DevOps 團隊之路大型製造業實踐DevOps 團隊之路
大型製造業實踐DevOps 團隊之路
 
[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐
[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐
[MonkeyFest 2018 ] App 開發與 DevOps 上的實踐
 
[2018 DevOps Days]大型企業如何推行DevOps
[2018 DevOps Days]大型企業如何推行DevOps[2018 DevOps Days]大型企業如何推行DevOps
[2018 DevOps Days]大型企業如何推行DevOps
 
建構Windows混合現實應用程式
建構Windows混合現實應用程式建構Windows混合現實應用程式
建構Windows混合現實應用程式
 
2018 Experience for Microsoft Teams
2018 Experience for Microsoft Teams2018 Experience for Microsoft Teams
2018 Experience for Microsoft Teams
 
微軟 Hololens 混合現實平台開發
微軟 Hololens 混合現實平台開發微軟 Hololens 混合現實平台開發
微軟 Hololens 混合現實平台開發
 
How to use Microsoft Teams
How to use Microsoft Teams How to use Microsoft Teams
How to use Microsoft Teams
 
Microsoft Tech Summit 2017 - 制造业运用微软研发云实现云到端的 DevOps 架构
Microsoft Tech Summit  2017 - 制造业运用微软研发云实现云到端的 DevOps 架构Microsoft Tech Summit  2017 - 制造业运用微软研发云实现云到端的 DevOps 架构
Microsoft Tech Summit 2017 - 制造业运用微软研发云实现云到端的 DevOps 架构
 
[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops
[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops
[ Study4TW Visual Studio Everywhere ] Vsts + microsoft teams 建構企業的Devops
 
2016 Azurebootcamp 中國Azure 使用經驗
2016 Azurebootcamp 中國Azure 使用經驗2016 Azurebootcamp 中國Azure 使用經驗
2016 Azurebootcamp 中國Azure 使用經驗
 
ICP備案流程演示
ICP備案流程演示ICP備案流程演示
ICP備案流程演示
 
中國阿里雲與Azure比較
中國阿里雲與Azure比較中國阿里雲與Azure比較
中國阿里雲與Azure比較
 

[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛

  • 2. Edward Kuo • 2020 宏碁科技 DevOps 講師 • 2020 啟碁科技 Azure DevOps 講師 • 2020 Azure Monitor with TSMC Form 講師 • 2019 台灣 恩智浦半導體 DevOps 培訓講師 • 2019 .NET Conf Taipei 講師 • 2019 中原大學 資料科學實務 客座講師 • 2019 中原大學 資工系 雲端計算平台實務 客座講師 • 2019 Agile Tour Hsinchu DevOps 講師 • 2019 DevOps Days Taipei 講師 • 2019 DevOps Expo @Trend Micro 講師 • 2019 翻轉營運契機 Azure DevOps 趨勢與實務研討會 講師 • 2019 Insider Dev Tour 台北站 講師 • 2018 DevOps Days Taipei 講師 • 2018 DOIS DevOps 國際峰會 深圳站 講師 • 2018 Insider Dev Tour 台北站 講師 • 2018 .NET Core Conf 台北站 講師 • 2018 Agile Tour Taichung 講師 • Global Azure Bootcamp 台灣 & 廣州 講師 • 微軟 北京 Tech Summit 講師 Microsoft Regional Director Microsoft Azure MVP Kingston IT Manager https://profile.edwardkuo.dev/ 2
  • 3.
  • 4. Help Us Something • 時間花在創造商業價值,降低整合異質平台帶來的不便性 • 尤其對 .NET 或是微軟技術開發者 • 從需求管理、開發到發佈採用同一個平台工作 • 因應開發技術的不斷更新,自動擴充和支持 • Service版本才能做到即時性更新 • 彈性且容易整合非Microsoft的平台
  • 5. Azure DevOps • Team Foundation Server • Azure DevOps Server 是基於SQL Server的地端產品 • Visual Studio Team Service • Azure DevOps Service 是基於Azure的SaaS級的雲端服務平台 5
  • 6. Azure DevOps • Server & Service 兩者區別 • Scope and scale data • Authentication • Users and groups • Manage user access • Security and data protection • Service無法透過SSRS做DevOps數據報表 • 兩者迭代速度不同 6
  • 8. Architect Base On Azure DevOps Our Azure DevOps Ecosystem
  • 9. DevOps Map Azure DevOps 9
  • 10. Design Azure DevOps Architect • 80% 系統是佈署在企業內部 • 20% 系統是佈署在Azure Services • 必須能符合企業應用情境模式進行佈署
  • 11. Design Hybrid DevOps Architect
  • 12.
  • 13. Artifacts Service • 解耦 • 系統拆解 • 拆分到耦合性最小元件,透過共用元件 或是核心元件,並重複使用與增加被測 試可能性 • 降低CI時間 • 系統程式碼越多,每次編譯拉下程式碼 重新編譯時間就會越長 • 元件化 • 在分散開發與快速迭代下,不影響他人, 耦合性降低,持續整合也會加快且更好 釐清問題
  • 14. Artifacts Service • 建立團隊/企業的Feed • 能放上第三方元件的nupkg 檔案 • 透過CI / CD 建立 nupkg 檔案 • 只需要使用NuGet Push Task
  • 15. Artifacts Service • 避免企業使用過期元件 • 設定Package 保留週期 • 設定最多Package版本數量 • 設定保留天數
  • 17. Azure DevOps Agent Pool • Microsoft Agent Pool • Azure Pipeline • Hosted macOS • Hosted Windows Container • Custom Agent Pool • Agent Pool →Agent →Host 17 Custom Azure Pipeline Microsoft托管代理 自托管代理 本地環境
  • 18. Agent Pools • 我們設置以下Agent Pool • Azure Pipeline • Private Cloud Build Pool • Private Cloud Release Pool • Private Premise Build Pool • Private Premise Release Pool • Private Premise Docker 1803 Pool • Private Premise Docker 2004 Pool
  • 19. Use Custom Agent Reason • 加快Pull Code 速度 • 加快Build Container速度 • 避免.NET Core / .NET Framework 更新問題, 導致舊系統無法Build • Microsoft Agent 啟動速度有時太慢 • Release的環境在地端 • 省錢
  • 20. Agent Pool Design • Build 和 Release Agent 要分開不同Pool • 地端Build 和Release Agent服務帳號要不同 • 如果資源允許, Build 和 Release Agent要不同Host • Build Container 與 Non-Build Container Agent Pool 需要分開 • 雲端Build Agent Pool內的Agent最好設置在不同 Region
  • 21. Use Custom Agent Allocation • 除非特殊需求才使用Private Premise的Build Agent • Build Container使用Private Premise的Build Agent • 裝載Container Host版本不同,Build Agent也要放在對應 的Host 版本 • Release到Azure環境,使用Private Cloud Release Agent • Release到On-Premise,使用Private Premise Release Agent
  • 22. Agent Version Challenge • Agent 版本最好能自動更新 • 無法自動更新時,務必要定期手動離線更新Agent • Build Agent 不更新,會導致新版本.NET或是相關 套件無法進行編譯 • 若發生Azure DevOps Service找不到Agent,多半是 Agent版本過舊
  • 24. Pipeline Design Patten • CI 僅處理Build & Unit Test Process • CI 編譯時間能越短越好 • CI 設計盡量與Agent的OS相依性低 • CI 設計要能隨時可以切換Agent Pool 此相片 (作者: 未知的作者) 已透過 CC BY-NC 授權
  • 25. Pipeline Design Patten • Release 僅處理應用程式佈署或是進行環境佈署 • 敏感參數的安全性,用Library管理與置換 • Build Artifacts不要Keep在Local Host,一律用 Upload方式Keep在Azure DevOps • 即使一個PowerShell Script可以完成,也要區分 Task處理
  • 27. Build Common Rule • 用Library做DEV、UAT和PRD參數置換 • 所有Build結果,必須上傳到Pipeline Artifacts • Container: 先Build Application,再Build Container • 不同版本Host編譯的Container不能共用 • 不同Branch都要有Build Pipeline
  • 28. Build Type • .NET Framework • ASP.NET MVC • API • Container • Console App • VSTO • SQL Project • Hexo Web Site • .NET Core • Vue.js & ASP.NET Core • API • Container • Console App • Component • Azure Function • WPF
  • 29. Build .NET Framework • 順序 • NuGet Retore : 版本過舊,可能會造成還原失敗 • Regex : 自動更新AssemblyInfo內版本號 • Replace Parameter : 更換Web.config的設定參數 • SonarQube: Scan Code • MS Build : 編譯 • UT : Unit Test • Publish Artifact : 上傳編譯好後的檔案 • 這裡並未封裝成ZIP檔案做部署
  • 30. Build .NET Core • 順序 • .NET Core : 還原Package • Replace Parameter : 更換appsettings.json的設定參 數 • SonarQube: Scan Code • .NET Core : 編譯 • Publish Artifact :上傳編譯後的檔案 • 可以用ArchiveFiles@2,封裝檔案成 ZIP File • 由小到大版本,安裝.NET Core SDK
  • 31. Build Vue.js & .NET Core • 順序 • .NET Core : 還原套件 • Npm : 用CI Command還原npm套件 • Replace Tokens : 置換Appsetting參數 • Replace Tokens : 置換Webpack參數 • Npm : 用Run Command建置前端程式 • .NET Core : 編譯ASP .NET Core • Publish Artifact :上傳編譯後的檔案 • npm run 的參數要在package.json設 定好
  • 32. Build .NET Core & Container • 順序 • 與Build .NET Core 順序相同 • Copy File : Copy Dockerfile 到Artifact資料夾 • Publish Artifact :上傳編譯後的檔案和Dockerfile • Download build artifacts : 下載編譯後檔案和 Dockerfile • Build Docker : 將檔案Copy到Container並編譯 Docker • Push Docker : Push Container到ACR
  • 33. Build .NET Core & Container • 分批建置Container Application • Application Agent • Docker Agent • 不需要Container時候,可以單獨發布 • 能單獨針對編譯後的Application除錯 • Container編譯時候,帶入版本號
  • 34. Build SQL Project • 順序 • SQL Enlight Code Analysis : Scan SQL • Publish Test Results : 上傳Test Result • MS Build : 編譯 • Copy File : Copy Dacpac到Artifact資料夾 • Publish Artifact :上傳編譯後的檔案 • 首先必須先用SQL Project,針對資料庫程式進 行版控
  • 35. Release Common Rule • 所有編譯後的檔案,一律從Build Artifact取得 • 正式環境部署皆需要人員Approve • 非Container的佈署,大多用Copy File方式處理 • 佈署用的參數也存放在Library • Release Agent不放在被佈署的Host • Compose File額外Repos管理
  • 36. Release Type • NuGet Package • On-Premise • Container by Docker Host • Windows Service by Server & Single PC • Trigger FTP • Web Site • API • Single DLL File • MS SQL Database • VSTO Application • WPF / Windows Form Application • Azure • Azure Web App Service • Azure Function • Azure SQL Database
  • 37. Release Container • 順序 • 先從IaC Repos下載該Container的Compose.yml • 置換Compose file的Docker版號 • docker-compose Pull : 下載 Container • docker-compose Down : 停掉Container • docker-compose Up : 啟動Container • 從UAT到PRD,僅Container轉移Host,並用 不同IaC啟動Container
  • 38. Release Container • 每次Release的Container必須要有版號,才可以進行管理與快速復原 • 用$(Release.Artifacts.Pipeline Name.BuildNumber) 取得CI 版本 • Compose的image版本號碼是用Buildnumber
  • 39. Release Windows Service • 順序 • PowerShell : 停止WS在遠距Host • Command Line : 卸載WS • Copy File : 複製新的Application • PowerShell : 安裝WS到遠距Host • Command Line : 啟動WS • 目前並無專門Task,必須透過 Command處理
  • 40. Compare PRD Database • 順序 • Download Build Artifacts : 下載需要佈署DB 相關的Script • PowerShell : 執行佈署Script • Delete files : 刪除佈署DB相關的Script • Send email : 差異化檔案用Mail寄出 • 前提DB程式碼要用SQL Project 做管理 • Agent Host要安裝sqlpackage.exe
  • 41. Compare PRD Database • 差異化比較屬性,用DB.Publish.xml 管理 • 執行差異化比較的Script,用 PowerShell執行 • 在PowerShell內執行DB.Publish.xml
  • 44. Build & Release Notifications • 所有Build / Release 的資訊都要通知到團隊頻道 • 訊息發送到Microsoft Teams • Azure DevOps Connector • Webhook方式傳送 • Azure Pipelines • Azure DevOps bot
  • 45. Build & Release Notifications • 所有Build / Release 的資訊都要通知到團隊頻道 • 訊息發送到Microsoft Teams • Azure DevOps Connector • Webhook方式傳送 • Azure Pipelines • Azure DevOps bot
  • 46. Build & Release Notifications • Advance • Build Fail 通知到個人 Teams Chat • Service Hooks + Power Automate
  • 48. Schedule Controller • 透過Release定時驅動功能,作為系統 / 維運 的排程器 • 不需要使用Windows Schedule • 有完整歷程記錄 • 可以設定執行排程的流程 • 如果用Azure DevOps Service,還可以雲端手動啟動地端排程
  • 49. Backup All Repos File • 基於ISO需求,需要將雲端 Repos File 備份到地端 • 用PowerShell & Git 指令 • 呼叫Azure DevOps API • 搭配Release排程功能 $PATToken="$(PAT)" $base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(" :$($PATToken)")) $AzureDevopsOrg=“Org" $AzureDevOpsProject=“Name" $LocalfilePath="$(BackupFilePath)" $ProjectUrlAPI = "https://dev.azure.com/$($AzureDevopsOrg)/$($AzureDevOpsProject)/_apis/g it/repositories?api-version=6.1-preview.1" $Repo = (Invoke-RestMethod -Uri $ProjectUrlAPI -Method Get - UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}) $RepoName= $Repo.value.name
  • 50. Backup All Repos File • 基於ISO需求,需要將雲端 Repos File 備份到地端 • 用PowerShell & Git 指令 • 呼叫Azure DevOps API • 搭配Release排程功能 ForEach ($name in $RepoName) { $ReposUrl="https://anything:$($PATToken)@dev.azure.com/$($AzureDevopsOrg)/$($AzureDevOp sProject.Replace(" ","%20"))/_git/$($name.replace(" ","%20"))" $FilePath="$($LocalfilePath)$($name)" if(Test-Path $FilePath) { cd $FilePath write $ReposUrl git pull origin UAT git pull origin master } else { write $ReposUrl git clone $ReposUrl $FilePath -b master } }
  • 51. Trigger CI on Release Stage • 當某個重要Package被Release後,必 須自動驅動某系統的CI,讓系統重新 編譯取得最新的Package 版本
  • 52. Trigger CI on Release Stage • 當某個重要Package被Release後,必 須自動驅動某系統的CI,讓系統重新 編譯取得最新的Package 版本 • CI 必須要在NuGet Package添加取得 最新版本Package Use NuGet Task Command : Custom Command and arguments: update “Project.sln" -Id “NuGet Package Name" - ConfigFile "nuget.config"
  • 54. Often Extension • SQL Enlight Code Quality Task • 掃描SQL語法是否有符合SQL撰寫規範 • SonarQube Task • 整合SonarQube服務,進行Code掃描 • Trigger Build Task • 在現有Pipeline 流程,驅動其他CI Pipeline流程
  • 55. Often Extension • Regex Replace Task • 用Regular Expression替換掉Code資訊,如: AssemblyInfo.cs • Replace Token Task • 透過#{變數名稱}#,將資訊注入到File,常搭配Library使用 • Send Mail Task
  • 57. Our Challenge • 不容易明白的錯誤訊息 • 介面與功能常常改變 • 網路穩定性 • 不一定能Work的Preview功能 • 有部分功能可能沒有,但是在.NET世界,基本上都具備 • Pipeline Task版本更新或是Deprecated • Pipeline的管理 • Pipeline 失敗不一定是Application問題
  • 58. Use YAML • 使用YAML • CI 使用YAML,可以讓有相同CI流程系統,可以快速建立Pipeline • YAML讓Pipeline具有版控 • YAML支援CD,但功能尚不完善,不建議使用 • 可以離線編輯Pipeline • 挑戰 • 語法需要熟悉,遇到第三方Task的YAML,不容易撰寫 • 沒有可視化流程 • 除非很熟悉,不然需要比對文件才知道Task屬性
  • 59. Azure DevOps CLI & API • 搭配CLI • 使用CLI可以擴展Azure DevOps,從命令行管理許多Azure DevOps服務。 • 搭配API • 透過REST API提供對服務的創建,檢索,更新或刪除
  • 62. Thanks for joining! Ask questions on Twitter using #dotNETConf

Editor's Notes

  1. 用Azure DevOps Service 非正規玩他 企業真實做法
  2. Thanks for joining us! Have a great conference!