はじめに
Azure Pipelinesでローカル環境をAgentにする方法を紹介します。
環境
- OS:macOS
ローカル環境をAgentにすることのメリデメ
メリット
ワークフォルダがローカルに残る
これはかなり大きなメリットです。
パイプラインの実行中に生成されたファイルを全て確認できるので、失敗時の調査がしやすいです。
Xcodeプロジェクトの場合、Carthageでビルドしたライブラリなども残るので、 2回目以降のビルド時間を大幅に短縮できます 。
デメリット
個人の環境に依存する
他のローカルCI/CD環境と同様のデメリットです。
個人の環境に依存してしまうため、本番で運用するにはCI/CD用のマシンを用意すべきです。
ローカル環境のCPUやメモリを圧迫する
当たり前ですがCPUやメモリを圧迫します。
そのため、開発用のマシンを本番用のAgentにするのは避けるべきです。
Agentのセットアップ
Agent Poolの作成(任意)
まずAgent Poolを作成します。
「Default」のAgent PoolにAgentを作成することもできるので、作成は任意です。
しかし、複数チームで使う場合はどのチームが何の目的で作成したAgentかわからなくなるため、作成すべきです。
1つのAgent Poolに複数のAgentがあるとランダムに使われるようなので、そういった意味でも作成すべきです。
Azure DevOps > Project Settings > Pipelines > Agent pools
[Add pool]をクリックします。
Agentのダウンロードと設定
Agent Poolを選択 > [Agents]タブ
[New agent]をクリックします。
[macOS]タブが選択されていることを確認し、[Download]をクリックします。
ローカル環境のターミナルで以下のコマンドを実行します。
# Agent用の適当なフォルダを作成して移動する
$ mkdir myagent && cd myagent
# ダウンロードしたAgentを解凍する
# 自動で解凍されてゴミ箱に移動されていることもある
$ tar zxvf ~/Downloads/vsts-agent-osx-x64-2.155.1.tar.gz
# Agentを設定する
$ ./config.sh
ライセンス契約の同意
→y
サーバーURL
→https://dev.azure.com/{your-organization}
参考:https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-osx?view=azure-devops#server-url
認証の種類
→PAT
個人用アクセストークン(Personal Access Token, PAT)
→以下を参考にPATを生成
参考:https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-osx?view=azure-devops#permissions
エージェントプール
→任意のエージェントプール
エージェント名
→任意
作業フォルダー
→そのままEnter( _work
フォルダ)
Azupre Pipelinesで対象Agentを使う
Azure Pipelines側で、[Agent pool]に対象Agentが含まれているAgent Poolを指定します。
Agentの実行
ローカル環境のターミナルで以下のコマンドを実行します。
$ ./run.sh
ツール機能をスキャンしています。
サーバーに接続しています。
2019-09-04 08:03:20Z: ジョブをリッスンしています
一覧のステータスが「Online」になっていればAgentの起動に成功しています。
この状態で対象Agent poolを指定したAzure Pipelinesを実行すると、ローカル環境のAgentが使われます。
2019-09-04 08:18:34Z: 実行中のジョブ: Xcode xcode102
Password:2019-09-04 08:21:19Z: ジョブ Xcode xcode102 が完了しました。結果: Canceled
2019-09-04 08:22:03Z: 実行中のジョブ: Xcode xcode102
2019-09-04 08:28:19Z: ジョブ Xcode xcode102 が完了しました。結果: Failed
2019-09-04 08:32:02Z: 実行中のジョブ: Xcode xcode102
おわりに
これでローカル環境をAzure PipelinesのAgentにすることができました!
ローカル環境をAgentにすることはパイプライン構築のトライアンドエラーにうってつけです。