GitHubとAzure DevOps Pipelineで無料のCI/CD環境を構築する

Azure DevOps,CI/CD

Azure DevOps
Azure DevOps

Azure DevOpsを利用すれば、GitHubで管理しているリポジトリに無料でCI/CDを追加する事が出来ます。プライベートリポジトリにも無料で利用する事が出来るのでとても便利です。


Azure DevOpsの利用登録

Azure DevOps Services | Microsoft Azure

Azure DevOpsのサイトから"GitHub の使用を無料で開始する“を選択して、Azure DevOpsとGitHubを連携します。

新しいプロジェクトを追加

Azure DevOps new project
Azure DevOps new project

Azure DevOpsとGitHubの連携が完了したらNew projectを選んでプロジェクトを追加します。

Azure DevOps Create Sample project
Azure DevOps Create Sample project

任意の名前を付けてプロジェクトを作成します。

Pipelineを作成

Azure DevOps Create Pipeline
Azure DevOps Create Pipeline

プロジェクトが出来たので、左側のメニューからPipelineを選択してCreate Pipelineを選んでPipelineを追加します。

Azure DevOps Pipeline Connect GitHub
Azure DevOps Pipeline Connect GitHub

GitHubと連携したいので、GitHubを選択します。初めてGitHubと連携する時はAzure DevOpsからGitHubへのアクセス許可の認証画面が出るはずです。許可しないと連携出来ないので許可しましょう。

Azure DevOps Pipeline Select ripository
Azure DevOps Pipeline Select ripository

次に連携するリポジトリを選択します。public、privateどちらも無料で連携出来ます。

Azure DevOps Pipeline Configure
Azure DevOps Pipeline Configure

次に主な開発言語を選びます。私はWindows Desktop用に設定するのでUniversal Windows Platformを選択します。

これはPipeline設定用のyamlの初期コードを決めるだけだと思うので、間違っても後で自分で修正するだけ済みます。

Azure DevOps Pipeline yaml
Azure DevOps Pipeline yaml

最後のPipelineの設定ファイルのazure-pipelines.ymlの編集・確認画面が出ます。このままでは使えないので、自分の環境に合わせて編集します。

後でいつでも変更可能なので、とりあえずはデフォルトの状態でSave and runを選択しても問題ありません。

Azure DevOps Create Pipeline Save and Run
Azure DevOps Create Pipeline Save and Run

Azure DevOpsのPipelineでは必ずcommitしないとPipelineの動作確認が出来ません。ですので、ここではcommitメッセージを入力してSave and runを再度選択します。

これでPipelineのセットアップは完了です。

azure-pipeline.ymlのサンプル

私のsamplesリポジトリだとこのようなyamlになります。

https://github.com/meltybk/samples

# Universal Windows Platform
# Build a Universal Windows Platform project using Visual Studio.
# Add steps that test and distribute an app, save build artifacts, and more:
# https://aka.ms/yaml

trigger:
- master

pool:
  vmImage: 'windows-latest'

jobs:
- job:
  strategy:
    matrix:
      AddressSanitizer Debug:
        MSBuildConfiguration: Debug
      AddressSanitizer Release:
        MSBuildConfiguration: Release
  steps:
    - task: MSBuild@1
      displayName: 'MSBuild AddressSanitizer'
      inputs:
        solution: 'AddressSanitizer/AddressSanitizer.sln'
        msbuildArchitecture: 'x64'
        configuration: '$(MSBuildConfiguration)'
- job:
  strategy:
    matrix:
      Likely Debug:
        MSBuildConfiguration: Debug
      Likely Release:
        MSBuildConfiguration: Release
  steps:
    - task: MSBuild@1
      displayName: 'MSBuild Likely'
      inputs:
        solution: 'Likely/Likely.sln'
        msbuildArchitecture: 'x64'
        configuration: '$(MSBuildConfiguration)'

こちらのyamlを実行するとこうなります。

Azrure DevOps Pipeline Build
Azrure DevOps Pipeline Build

各プロジェクトのDebug、Releaseビルドがそれぞれ並列にJobとして実行されているのが分かるかと思います。

GitHubにPipelineのBuildステータスを表示する

リポジトリのREADME.mdに以下のようにURLを追加する事でビルドステータスが表示されるようになって便利です。

Azure PipelinesからStatus badgeを選ぶとコードを取得できます。

Azure Pipelines  Status badge
Azure Pipelines Status badge
# samples
[<img src="https://melty.visualstudio.com/Sample/_apis/build/status/meltybk.samples?branchName=master"/>](https://melty.visualstudio.com/Sample/_build/latest?definitionId=1&branchName=master)
Azure DevOps Pipeline State in GitHub
Azure DevOps Pipeline State in GitHub

Privateリポジトリの場合は、Status budgeへのアクセスを許可します。

Azure Pipelines Status Budgeへのアクセスを許可する
Azure Pipelines Status Budgeへのアクセスを許可する