Azure DevOpsオンライン Vol.3
Azure Pipelines
かめがわ かずし(@kkamegawa)
自己紹介
personal:
name: かめがわ かずし
alias: kkamegawa
community:
MVP: Microsoft MVP for Developer Technologies(2009-)
UsersGroup: Team Foundation Server Users Group
URL: https://dev.azure.com/tfsug/tfsuginfo
Blog: はてなブログ
URL: https://kkamegawa.hatenablog.jp
This contents based on 2020/9/22
https://aka.ms/AA98bey
お品書き
Azure Pipelinesについて
登場、Azure DevOps Server 2020
Azure Pipelines
対応レポジトリ(Azure以外も)にあるファイルをビルド、デプ
ロイするサービス。
自前で管理(Self-hosted)
1+Visual Studio Enterpriseのライセンス分並列
Azure DCで提供(Microsoft-hosted)
プライベートrepoでは1800分/月が無償。超えると有償
OSSでは10並列まで無償。
プライベートrepoで並列度あげる場合は有償
インフラはGitHub Actions / VS App Centerと共通
Azure Pipelines vs GitHub Actions
Azure Pipelines GitHub Actions
形式 YAML / Classic GUI YAML
課金 OSS : 10並列。無制限
プライベート : プランによる
OSS : 10並列。無制限
プライベート : プランによる
コミュニティフロー marketplaceでタスク単位提供 Marketplaceでの提供(多い)
指定したエージェントに入れる Capabilities(環境変数か明示) Label
コマンドシェル Windowsではcmd.exe WindowsではPowerShell
(shell: cmdを指定すれば
cmd.exe)
Multi-Stage Pipeline 一つのYAML 明示的に分割
https://docs.github.com/en/actions/learn-github-
actions/migrating-from-azure-pipelines-to-github-actions
※:他にもAzure DevOpsにしかない機能(Environmentsなど)がある
Azure Pipelinesが提供する環境
OS version Latest
Windows • Windows Server 2016-VS2017
• Windows Server 2019-VS2019
Windows Server 2019-
VS2019
macOS • 10.14
• 10.15
10.15
Linux • 16.04
• 18.04
• 20.04
18.04
(20.04はプレビュー)
参考:Microsoft-hosted agent
TIPS:
.NET CoreやJavaScriptベースといったクロスプラットフォームであればmacOSのエージェントを指定するのがおすすめ。
実機で動いていると思われ、ディスク性能などがかなり違う
Ecosystem
タスクを作成・追加で、
これら以外のプラット
フォームもサポート
引用:Azure Pipelines ecosystem support
Pipelinesの仕事
対象レポジトリを監視、イベントに応じてソース取得
レポジトリから取得したソースを手順に従って処理
生成結果を手順に従って発行
レポジトリの監視・取得
多様なレポジトリをサポート(Git / Subversion / TFVC)
Azure Repos / GitHub (Enterprise Server) /
BitBucket(Server/Cloud)
複数レポジトリからの同時チェックアウト(マルチチェック
アウト)も可能
Gitベースとそれ以外ではサポート機能に若干差異
YAMLのサポート有無でも差異あり
マルチチェックアウトの定義
対象の外部レポジトリを
resourcesに登録
複数のレポジトリ(異なる
サービスでもOK)からgit
cloneする
参考:Check out multiple repositories in your pipeline
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
- repository: MyAzureReposGitRepository
endpoint: MyAzureReposGitServiceConnection
type: git
name: OtherProject/MyAzureReposGitRepo
steps:
- checkout: self
- checkout: MyGitHubRepo
- checkout: MyAzureReposGitRepository
自動checkoutなし
外部からcheckout
service connection
endpoint
GitHub/Azure
Repos/Bitbucket
マルチチェックアウトの動作とユースケース
Gitベースのレポジトリのみ
使用可能な機能
様々な理由でレポジトリを
分散せざるを得ない場合
に便利
身近なユースケースとして
は、YAMLのTemplateを集中
管理したい場合
MultiStageの動画でも解説しています
https://youtu.be/d2FevFzDzPY
ソースに対する手続きを記述 - YAML vs Classic
2018/9(Azure DevOpsへの改名)のタイミングで登場
YAMLのMulti-Stageも一般公開になって、準備が整って
います
GUIのClassic Editorは今後強化されない予定
TFVCを使う場合はGUIでもOK
YAMLサポートしない機能があるため
Classic vs YAML
YAMLとClassicの機能比較
YAML Classic
Work Itemとの関連付け ✔(コミット時指定、ブランチ指定)
キャッシュ指定 ✔
コンテナージョブ ✔
Deployment group Job Environmentで代替 ✔
リリースゲート Environmentで一部代替 ✔
Service Container ✔
Task Groups Templateで代替 ✔
PR Tigger ✔ Releaseのみ
Stage ✔ Releaseのみ
Automated Tests ✔
• 管理が分散しておすすめはしないが、YAML Build + Classic Releaseという組
み合わせも考えられる 参考:Use Azure Pipelines
Stage to Run Automated Test
Test Plansの”Stage to
run automated tests”は
YAMLのマルチステー
ジを認識しない(現状
の制限?)
使う場合はClassic
Build/Releaseが必要
YAMLの書き方がわからない!
Azure DevOpsの機能をサポートするためかなり複雑
GitHubにサンプルがあるので参照
https://github.com/microsoft/azure-pipelines-yaml
Multi-Stage Pipelinesの作り方解説しています
https://www.youtube.com/playlist?list=PLH-SCfepAr4oWJ8VQwJUa3svQSHajI41o
参考:YAML Schema
YAMLの構造
trigger:
- master
pool:
vmImage: 'ubuntu-latest’
variables:
buildConfiguration: 'Release'
SolutionFiles: '**/*.sln’
Resources:
repositories:
- repository: templates
type: git
name: SessionDemo/Pipelines
stages:
- stage: Build
displayName: 'Build Solution'
jobs:
- job: Build
pool:
vmImage: 'Windows-latest'
demands:
- msbuild
- visualstudio
steps:
- task: UseDotNet@2
displayName: 'Install 3.x .NET Core'
inputs:
packageType: 'sdk'
version: '3.x'
- task: NuGetToolInstaller@1
inputs:
versionSpec: '5.x'
checkLatest: true
- task: DotNetCoreCLI@2
displayName: 'Restore Nuget Package'
inputs:
command: 'restore'
projects: '$(SolutionFiles)'
feedsToUse: 'select'
YAMLの構造
セクション 代表的なキーワード 役割
Pipeline Trigger
Resources
Environments
ビルドトリガー
参照リソース(外部)
ビルド関連の情報を管理
Stages Stage
Jobs
ビルド・リリースを管理(なくてもよい)
ビルド・リリースを実行する範囲
Jobs Job
Steps
Services
Strategy
ビルド・リリースを実行する範囲
具体的な処理を記載
接続するサービスを記載
ジョブを実行するための方式を定義
Steps Task ビルドやリリースの具体的な処理手順
Deployment Strategy
Jobs
ジョブを実行するための方式を定義
ビルド・リリースを実行する範囲
共通 Pool
Variables
Condition
ビルドを実行する環境を指定
変数定義
ビルド実行する条件を指定
最小限のYAML
.NET Coreのビルドのみ
trigger/pool/variablesを定義
job配下に実行するコマンド
タスクを列挙
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
solutionFiles: '**/*.sln'
jobs:
- job: Build
steps:
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'select'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '$(solutionFiles)'
YAMLの育て方
1. Try & Error
2. 少なくともJobsの単位で動くようになってから次
のJobsやStageへ移行
3. 長くなりすぎたらTemplateへ切り出し。
4. 1へ戻る
Azure Pipelinesが動くタイミング
手動
YAMLのtrigger指定に一致したとき
GUIで設定されたtrigger指定に一致したとき
Azure CLI / REST APIで呼び出し
pull request含めたtriggerの挙動
トリガー 挙動
trigger: none パイプラインの実行が手動のみ。
trigger:
- master
- dev
master / devブランチに対して変更があった場合、パイプラインが実行される。
ただし、この二つのブランチに対してpull requestがあった場合もパイプラインが
呼び出される。
pr: none masterにコミットされた場合は実行してほしいけど、pull requestではパイプライ
ンが動いてほしくない場合に指定。
pr: master 同じ設定だが、masterにpull requestがあった場合はパイプラインを実行する場合
に指定。
trigger:
branches:
include:
- master:
paths:
include:
- src/*
exclude:
- azure-pipelines.yml
masterブランチのsrc配下のパスに何かのファイルがコミットされた場合、パイプ
ラインを実行する。
azure-pipelines.ymlが変更されてもビルドは実行されない。
pull requestのときだけビルドしたい
#YAMLのトリガーは無効
trigger: none
Pull Requestでビルド開始
PR時のみビルドしたいケースもうちょっと解説
YAMLのtriggerはnoneを指定する
対象のブランチにブランチポリシーを設定
ビルドで使用するパイプラインを指定
TriggerはAutomatic
Policy requirementはRequired
masterに直コミットしてもビルドは実行されません
複数の構成を一度にビルドする
複数プラットフォーム/構成のビ
ルドしたい場合に使用する
strategy/matrixを指定すると対
象のvariablesに対して一度にビ
ルドできる
並列数も指定可能
pool:
vmImage: 'Windows-latest'
strategy:
matrix:
x64:
BuildPlatform: 'x64'
x86:
BuildPlatform: 'x86'
AnyCPU:
BuildPlatform: 'Any CPU'
variables:
buildConfiguration: 'Release'
solutionFiles: '**/*.sln'
jobs:
- job: Build
steps:
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
デプロイ戦略の違い
ビルド→本番デプロイというケースは多くない
RunOnece/ Rolling / Canaryというデプロイ戦略をサポート
ビルド
検証
本番 P1 P2 P3 P4 P1 P2 P3 P4
ビルド ビルド
検証 検証
P1~P4:本番用インスタンス
RunOnece Rolling Canary
数%ずつトラフィック見て展開順番に展開
機密情報の扱い方
Libraryに格納(パスワード、各種証明書等)
さらに機密性の高いものはAzure Key Vaultに格納
オンプレミスのAzure DevOpsでもSQL Server内で暗
号化されています。
YAMLの注意点
YAMLは上から下に解釈される
YAMLで上に位置するジョブが下のジョブに依存すると
エラーになる
Trigger/Schedule/VariablesはGUIで上書きできるの
で、動かないときはGUIも確認する
YAMLの展開後のサイズには制限がある
いつでもリリースされたくない - Environments
Environmentsにリソース定義
必要なチェックを指定する
展開する前/後の状態確認
勤務時間内か
承認があるか
外部のREST APIの結果が問題ないか
…等
Agent Poolの仕組み
Azure DevOpsでのPipelineエージェントプール
Pipelines
Agent Pool
Default Hosted
Microsoft Hosted
1 2 3
Visual Studio 2017 / 2019
macOS 10.15 / Ubuntu 16/18/20
Self Hosted
1 2 3
オンプレミスエージェント
Target Servers
1 2 3
デプロイ先
Pipelinesのエージェントが配置可能な構成
• オンプレミス、クラウドにエージェントの配置
が可能
• Firewall/proxyの背後でも443/tcpだけ通って
いれば問題ない
• 宛先のアドレスまで絞る場合は以下を参照
Allowed address lists and network connections
• Proxy経由する場合は以下を参照
Run a self-hosted agent behind a web proxy
どうしてもビルドがうまくいかない…
よくある…以下のタスクは特にはまりやすい
copy files
download xx
upload xx
シェル系
publish xx
エージェントのどの場所で動いているか、成果物が
生成された場所を理解してないと時間を溶かす
エージェント内のフォルダー構成
{agent_work}¥{index}¥a
{agent_work}¥{index}¥s
{agent_work}¥{index}¥TestResults
{agent_work}¥r{index}¥a
{agent_work}¥{index}¥b
値 意味
Build.ArtifactStagingDir
ectory
Build.StagingDirectory
成果物をコピー
する前のフォル
ダー
Build.SourcesDirectory
System.DefaultWorking
Directory
ソースファイル
がダウンロード
されるフォル
ダー
Build.BinariesDirectory コンパイルされ
たバイナリー用
フォルダー
Agent.ReleaseDirectory Classic用リリース
フォルダー
Common.TestResultsDir
ectory
テスト結果格納
用
エージェントのフォルダーに気を付ける
Build.SourcesDirectoryにソースをダウンロード
コンパイルする場合はBuild.SourcesDirectory配下に出力されるの
で、必要なファイルだけBuild.StagingDirectoryへコピー
Build.StagingDirectoryに対してpublish
わからなければSelf-hostedを立てて、どこのフォルダーに生成されている
か調べる
variablesでsystem.debugをtrueにしておくのもよい
参考:Review logs to diagnose pipeline issues
どっち使う?
Microsoft-hosted Self-hosted
CI環境のメンテナンスしたくない ✔
クラウドサービスへ展開したい ✔
上限なく並列度を上げたい(※) ✔
巨大(10GB超)なファイルを使いたい ✔
多コアで高速ビルドしたい ✔
古い/ベータ版環境を使いたい ✔
オンプレミスにデプロイしたい ✔
クラウド対応していないソフトがあ
る(ライセンス等)
✔
※:ただし、並列数分のエージェントの購入が必須
Microsoft-HostedとSelf-Hostedの中間 - scale set agents
高速な環境で大きなファイルを使いたいけど、オン
プレミスに用意できないような場合にどうぞ
参考:Azure Virtual Machine scale set agents
よくある質問
もっと高性能なMicrosoft-Hosted提供されない? 残念ながら今のところ…
Scale set agentを使ってください。
AzureにデプロイするときPublic IP使わないとダメ? 12月にService Tagがサポートされることになったので、そ
れまで待つか、Scale set agentを使ってください
Self-hostedに何が入ってるの? GitHubにMicrosoft-Hostedのイメージ作るためのスクリプト
が公開されているので、こちらをみてください。
イメージはいつ更新されるの? 基本毎週更新しているそうです。
古くなったOSのイメージは毎月更新になります。
イントラの中でも大丈夫? 443/tcpといくつかのアドレスが通っていれば大丈夫
どうしてもYAML使わないとダメ? MSの伝統で”Classic”とつくと投資が悪化するので、早めの
移行でフィードバックしましょう。
ArtifactとAzure Artifactsって何が違う? ビルドの生成物がArtifact
パッケージ管理と生成物を管理するサービスがAzure
Artifactsです。
YAMLとClassicで機能差ないの? 割となくなってきたはずです。回避方法があるものも多い
です。
(参考)パイプライン実行時セキュリティ調査
成果物に対してOSSの脆弱性監査を実施する
WhiteSource Bolt
Black Duck
Secure DevOps Kit for Azureのようなツールでスキャ
ンする
(参考)より高度なコンプライアンス&ガバナンス
Azure BluePrintsとの連携
パッケージがBluePrint定義にパッケージングされる
あれデプロイしたっけ?という調査が楽になる
Azure Policyとの連携
リソースのルールを定義しておく
参考資料
Azure Pipelines Documentation
https://docs.microsoft.com/en-us/azure/devops/pipelines/

More Related Content

PDF
3分でわかるAzureでのService Principal
PDF
オープンソースのAPIゲートウェイ Kong ご紹介
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
Ingress on Azure Kubernetes Service
PPTX
JAZUG12周年 俺の Azure Cosmos DB
PPTX
BuildKitによる高速でセキュアなイメージビルド
PPTX
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
3分でわかるAzureでのService Principal
オープンソースのAPIゲートウェイ Kong ご紹介
新入社員のための大規模ゲーム開発入門 サーバサイド編
コンテナの作り方「Dockerは裏方で何をしているのか?」
Ingress on Azure Kubernetes Service
JAZUG12周年 俺の Azure Cosmos DB
BuildKitによる高速でセキュアなイメージビルド
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話

What's hot (20)

PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
PDF
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Infrastructure as Code (IaC) 談義 2022
PPTX
Redisの特徴と活用方法について
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
PDF
コンテナにおけるパフォーマンス調査でハマった話
PPTX
initとプロセス再起動
PDF
SSIとDIDで何を解決したいのか?(β版)
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
Azure load testingを利用したパフォーマンステスト
PPTX
Azure Cosmos DB のキホンと使いドコロ
PDF
インフラ廻戦 品川事変 前夜編
PDF
Spring Day 2016 - Web API アクセス制御の最適解
PDF
ASP.NETの進化とASP.NET Core Blazorの凄さ
PDF
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
PDF
インフラ野郎 Azureチーム at クラウド boost
PDF
今改めて学ぶ Microsoft Azure 基礎知識
PDF
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
Infrastructure as Code (IaC) 談義 2022
Redisの特徴と活用方法について
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
コンテナにおけるパフォーマンス調査でハマった話
initとプロセス再起動
SSIとDIDで何を解決したいのか?(β版)
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Azure load testingを利用したパフォーマンステスト
Azure Cosmos DB のキホンと使いドコロ
インフラ廻戦 品川事変 前夜編
Spring Day 2016 - Web API アクセス制御の最適解
ASP.NETの進化とASP.NET Core Blazorの凄さ
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
インフラ野郎 Azureチーム at クラウド boost
今改めて学ぶ Microsoft Azure 基礎知識
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Ad

Similar to Azure DevOps Online Vol.3 - Inside Azure Pipelines (20)

PDF
Ignite 2021秋 recap - 開発者向け新機能紹介
PPTX
Dev Containers Customization Short version
PPTX
機械学習 / Deep Learning 大全 (5) Tool編
PDF
Getting Start for Azure Pipelines
PPTX
Data Factory V2 新機能徹底活用入門
PDF
Azure Kubernetes Service Overview
PDF
Oracle Cloud Infrastructure:2023年4月度サービス・アップデート
PPTX
Tech Night Recap Sapporo - Ignite & .NET Conf -.pptx
PPTX
AKS と ACI を組み合わせて使ってみた
PDF
Visual StudioやAzureからAzure DevOpsを使う
PDF
20190201 Cloud Native Kansai AKS Azure
PDF
デスクトップ アプリ開発における Visual Studio の進化
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PDF
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
PDF
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
PDF
Windows PowerShell 5.0 と Windows Server vNext の管理
PPTX
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
PDF
Recap: Windows Server 2019 Failover Clustering
PDF
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
PPTX
Sql azure入門
Ignite 2021秋 recap - 開発者向け新機能紹介
Dev Containers Customization Short version
機械学習 / Deep Learning 大全 (5) Tool編
Getting Start for Azure Pipelines
Data Factory V2 新機能徹底活用入門
Azure Kubernetes Service Overview
Oracle Cloud Infrastructure:2023年4月度サービス・アップデート
Tech Night Recap Sapporo - Ignite & .NET Conf -.pptx
AKS と ACI を組み合わせて使ってみた
Visual StudioやAzureからAzure DevOpsを使う
20190201 Cloud Native Kansai AKS Azure
デスクトップ アプリ開発における Visual Studio の進化
はてなにおける継続的デプロイメントの現状と Docker の導入
開発者なのに運用で手がいっぱい? そんなあなたに贈る、 クラウド時代に最適な OSS の RDBMS ! Azure Database for MySQL...
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
Windows PowerShell 5.0 と Windows Server vNext の管理
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Recap: Windows Server 2019 Failover Clustering
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
Sql azure入門
Ad

More from Kazushi Kamegawa (20)

PDF
「何もしないのにCIが失敗した」を防ぐ
PDF
Azure boards for beginners
PDF
Deploy Strategy with Azure Pipelines
PDF
DevOps and compliance and security
PDF
DevOps and Compliance and Security
PDF
Ignite 2021 振り返り(DevOps)
PDF
How to create your own Azure Pipeline's image
PDF
NET5 and Diagnostics
PDF
Azure DevOps入門~TechLab編
PDF
Introduce TFSUG and Azure DevOps Server 2020
PDF
Azure Boards and Azure Test Plans inside out.
PDF
Azure DevOps's security
PDF
Azure DevOps Management in Organization
PPTX
What's new Azure DevOps in //Build 2019
PPTX
Deploy to Azure by ??? Azure Repos or GitHub
PDF
Azure DevOpsとセキュリティ
PPTX
What's Azure DevOps
PDF
はじめてのコンテナーDocker & Windows & Linux
PPTX
その後のBash on windows
PDF
Windows10時代のクロスプラットフォーム開発
「何もしないのにCIが失敗した」を防ぐ
Azure boards for beginners
Deploy Strategy with Azure Pipelines
DevOps and compliance and security
DevOps and Compliance and Security
Ignite 2021 振り返り(DevOps)
How to create your own Azure Pipeline's image
NET5 and Diagnostics
Azure DevOps入門~TechLab編
Introduce TFSUG and Azure DevOps Server 2020
Azure Boards and Azure Test Plans inside out.
Azure DevOps's security
Azure DevOps Management in Organization
What's new Azure DevOps in //Build 2019
Deploy to Azure by ??? Azure Repos or GitHub
Azure DevOpsとセキュリティ
What's Azure DevOps
はじめてのコンテナーDocker & Windows & Linux
その後のBash on windows
Windows10時代のクロスプラットフォーム開発

Azure DevOps Online Vol.3 - Inside Azure Pipelines