Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Azure DevOps Microsoft

Azure DevOpsのビルドパイプラインの例

投稿日:2023年8月16日 更新日:

 

<目次>

Azure DevOpsのビルドパイプラインの例
 やりたいこと/概要
 STEP0:前提条件
 STEP1:Gitのリポジトリを用意する
 STEP2:プロジェクトのビルド&疎通
 STEP3:パイプライン作成&疎通
 STEP4:ビルドタスクの追加
 STEP5:Gitへのプッシュ→パイプラインの再実行
 STEP6:ビルドした資産をAzure Pipeline内に保存

Azure DevOpsのビルドパイプラインの例

やりたいこと/概要

●やりたいこと
・Azure DevOpsのビルドパイプラインについて理解する
・ハンズオンで試してみる
 
●概要
・ソースコード(例:C#)をビルドしてバイナリ(例:exe)を作る。
・ビルドサーバー不要(ビルドサーバーのパッチやセキュリティアップデートだけでも大変・・)
 
(図101)
(表)

Tasks ・ビルド、テスト、展開の手順がどのように実行されるかを定義するスクリプトのようなものと
Code ・コードの変更があるとパイプラインが実行される。
・パイプライン実行は自動/手動の両方が可能
・パイプラインをGitHub、Bitbucket、Subversionのようなソースリポジトリに接続します。
Build Agent ・コードのビルドやデプロイを行います。
・1つ以上のジョブが実行される
・Azure PipelinesならMicrosoftホストエージェントを使用できる
→パイプラインを実行する度に「新しくVMが生成される」。
→VMは色んな種類から選べる。Ubuntu 22.04も選択可能。
→VMは自動テストでの使用が完了したら、自動で破棄される
・エージェントは「セルフホスト」も使用可能(自身でVM立てて設定&管理するタイプ)
・エージェントを束ねる「エージェントプール」を設定できる。
Artifact ・パイプラインのアウトプット
・デプロイできる成果物
・(例)Javaなら.jarファイル
・(例)JavaScriptのライブラリ
・(例)Dockerイメージ
超ざっくり書くと、こんな感じです。
(図102)

STEP0:前提条件

・GitHubのアカウントを保有していること
 
以降はこちらのトレーニングを実際に手を動かしてやってみました。
(参考)

STEP1:Gitのリポジトリを用意する

今回はMicrosoftが用意したリポジトリをForkします。Fork(コピー)すればで原本に影響なく、編集ができる。

STEP1-1:Microsoftの学習用リポジトリのFork

・①リポジトリにアクセス
・②「Fork」
(図112)
・③「Create Fork」
(図113)

STEP1-2:ForkしたリポジトリをCloneする

Cloneはローカルで作業するために、ローカルにコピーする操作のこと。
 
・①「Code」→HTTPSのURLをコピー
(図121)
・②VSCodeのターミナル等で「git clone [①でコピーしたURL]」コマンドを実行
(図122)
・③Clone完了
(図123)
・④ディレクトリ移動
(図124)

STEP2:プロジェクトのビルド&疎通

STEP2-1:ビルド

(コマンド)
> dotnet build --configuration Release
→疎通目的なのでDebugではなくRelease
 
(図131)
 
(出力例)
SBuild version 17.3.2+561848881 for .NET
  復元対象のプロジェクトを決定しています...
  C:\Git\Rainbow-Engine\mslearn-tailspin-spacegame-web\Tailspin.SpaceGame.Web\Tailspin.SpaceGame.Web.csproj を復元しました (56 ms)。
  Tailspin.SpaceGame.Web -> C:\Git\Rainbow-Engine\mslearn-tailspin-spacegame-web\Tailspin.SpaceGame.Web\bin\Release\net6.0\Tailspin.SpaceGame.Web.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:05.16
 

STEP2-2:疎通

・①実行
(コマンド)
> dotnet run --configuration Release --no-build --project Tailspin.SpaceGame.Web
(図132)
(図133)
・②ブラウザで確認
https://localhost:5001/
(図134)
 

STEP2-3:SSL設定

・①下記コマンドを実行
(コマンド)
> dotnet dev-certs https --trust
(図135)
・②鍵付きになった(自己証明書が有効になった)
(図136)

STEP3:パイプライン作成&疎通

・①「New pipeline」押下
(図211)
・②コード管理ツールを選択(例ではGitHubを選択)
(図212)

・③リポジトリを選択
(図213)
(図214①②)

~中略~
・④パイプラインの設定を選択(例では「ASP.NET Core」)
(図215)
・⑤「Save & Run」
(図216)

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- main

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
 
・⑥「Save & Run」
(図217)

・⑦結果確認
(図218)
 

STEP4:ビルドタスクの追加

STEP4-1:ブランチ作成

・①最新の変更を取得
(コマンド)
> git pull origin main
(図311)
・②YAMLファイルなど追加されている
(図312)

STEP4-2:azure-pipelines.yml修正

・①ブランチ変更
(コマンド)
> git checkout -B build-pipeline
(図321)

・②「azure-pipelines.yml」を修正
 
(サンプルプログラム)
trigger:
- '*'

pool:
  vmImage: ubuntu-latest

variables:
  buildConfiguration: 'Release'

steps:
- task: UseDotNet@2
  displayName: 'Use .NET SDK 6.x'
  inputs:
    packageType: sdk
    version: '6.x'

- task: Npm@1
  displayName: 'Run npm install'
  inputs:
    verbose: false

- script: './node_modules/.bin/node-sass Tailspin.SpaceGame.Web/wwwroot --output Tailspin.SpaceGame.Web/wwwroot'
  displayName: 'Compile Sass assets'

- task: gulp@1
  displayName: 'Run gulp tasks'

- script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt'
  displayName: 'Write build info'
  workingDirectory: Tailspin.SpaceGame.Web/wwwroot

- task: DotNetCoreCLI@2
  displayName: 'Restore project dependencies'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Build the project - Release'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration Release'
    projects: '**/*.csproj'

(図322)コンパイルなど追記している

(図323)

STEP5:Gitへのプッシュ→パイプラインの再実行

・①修正をプッシュ
(図411)
・②パイプラインが実行された
(図412)
・③先ほどと処理内容が変わっている(gulp@1でJavaScript圧縮したり)
(図413)

STEP6:ビルドした資産をAzure Pipeline内に保存

・ここまで来たら、Space Game Webプロジェクトをパイプライン経由でビルドできる。
・ただ、現状ビルドした資産は一時サーバーに残るのみ。
→他の方が利用できるよう、資産をデプロイするor固めて共有するなど必要。
 

STEP6-1:「.zip」形式で固めるよう「.yml」を修正

(サンプルプログラム)
trigger:
- '*'

pool:
  vmImage: ubuntu-latest

steps:
- task: UseDotNet@2
  displayName: 'Use .NET SDK 6.x'
  inputs:
    version: '6.x'

- task: Npm@1
  displayName: 'Run npm install'
  inputs:
    verbose: false

- script: './node_modules/.bin/node-sass Tailspin.SpaceGame.Web/wwwroot --output Tailspin.SpaceGame.Web/wwwroot'
  displayName: 'Compile Sass assets'

- task: gulp@1
  displayName: 'Run gulp tasks'

- script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt'
  displayName: 'Write build info'
  workingDirectory: Tailspin.SpaceGame.Web/wwwroot

- task: DotNetCoreCLI@2
  displayName: 'Restore project dependencies'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Build the project - Release'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration Release'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2 displayName: 'Publish the project - Release' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration Release --output $(Build.ArtifactStagingDirectory)/Release' zipAfterPublish: true - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' condition: succeeded()
(図511)


(図512)

追加処理概要

・アプリのビルド結果をパッケージ化(zipファイル化)
・Azure Pipeline上にビルド結果を配置する
 

STEP6-2:Gitへのプッシュ

・①Gitへのコミット→プッシュ
> git add azure-pipelines.yml
> git commit -m "Add publish tasks"
> git push origin build-pipeline
(図513)
・②パイプラインが再び自動実行される
(図514)

STEP6-3:結果確認

・①「1 published」になっているはず
(図515)
・②ビルド資産と依存関係を含むzipが格納されている
(図516)
(図517)

Adsense審査用広告コード


Adsense審査用広告コード


-Azure DevOps, Microsoft
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Yammerとは?機能や利点と今後の展望予想について

<目次> (1) Yammerとは?機能や利点と今後の展望について  (1-1) Yammerとは?  (1-2) Yammerの利点  (1-3) Yammerの画面イメージや機能  (1-4) Y …

Azure DevOpsのwikiを別プロジェクトに移動する方法

<目次> (1) Azure DevOpsのwikiを別プロジェクトに移動する方法  (1-1) 概要  (1-2) 手順(wikiの移行)  (1-3) 補足(PBIの移行方法) (1) Azure …

AzureのARMテンプレートをPowerShellからデプロイする手順をご紹介

  <目次> (1) AzureのARMテンプレートをPowerShellからデプロイする手順をご紹介  (1-1) Azure Resouce Managerとは?  (1-2) ARMテ …

no image

FlaskアプリをAzure App Serviceにデプロイする手順

  <目次> (1) FlaskアプリをAzure App Serviceにデプロイする手順  やりたいこと  (1-0) 前提事項  (1-1) STEP1:Flaskアプリの準備  (1 …

Azure AD Privileged Identity Management(PIM)とは?

  <目次> (1) Azure AD Privileged Identity Management(PIM)とは?  (1-1) Azure AD Privileged Identity …

  • English (United States)
  • 日本語
Top