Azure Pipelines Task の拡張機能を開発する
前回は Azure DevOps の拡張機能の Hello World を実施しました。
今回は Azure DevOps の中でも最も利用されるであろう Azure Pipelines に自作した Task を追加していきます。
参考ページ
今回は上記のページに沿って拡張機能を作っていきます。 ただ、上記では Node.js + TypeScript を使って開発されています。単純に手順に沿って作っていけば普通に作れてしまうため、あまりこのエントリで紹介する意味がありません。
なので、ちょっと趣向を変えて Node.js ではなく、PowerShell を使って開発していきます。 PowerShell を使った Task 拡張機能の作り方は Microsoft 公式では見当たらなかったため、以下のページを参考にしています。
環境構築
各種ツールを適宜インストールします。今回は Visual Studio Code を使っていますが、エディタはお好みのものを使ってください。
- Node.jsをインストールする
- TypeScript Compilerをインストールする
- VS Codeをインストールする
npm i -g tfx-cli
を実行してtfx-cli
をインストールする
Azure Pipelines Task を開発する
今回作るもの
はじめに今回作るものをお見せしておきます。 サンプルなので特にタスクそのものが意味を持つわけではありませんが、画面で入力した値を作成した Task が受け取ってビルドログに表示します。
タスク設定画面
ビルドログ
カスタムタスクを作る
カスタムタスクを作るまでの手順は上記参考ページに従っていきます。
以下のリンク見出しのCreate task scaffolding
を実行します。
次に、task.json
を作成します。こちらも上記のページからコピーして作ってください。
適宜編集した後、最後のexecution
のみ以下のように変更します。
target
には、実行する PowerShell スクリプト名を記載してください。
{ "$schema": "https://raw.githubusercontent.com/Microsoft/azure-pipelines-task-lib/master/tasks.schema.json", "id": "{{GUID}}", "name": "{{タスクの名称(英数字のみ、半角スペース使用不可)}}", "friendlyName": "{{タスクの表示名(ユーザーに見えるタスク名はこっち。未入力なら name が使われる}}", "description": "{{タスクの説明}}", "helpMarkDown": "", "category": "{{タスクのカテゴリ。Build とか Utility とか。}}", "author": "{{publisher 名と同じにする}}", "version": { ...省略... }, "instanceNameFormat": "{{ここはパイプラインやビルドログに表示する内容。$(変数)で変数も使える。}}", "inputs": [ ...省略... ], "execution": { "PowerShell3": { "target": "powershell.ps1", "platforms": ["windows"], "workingDirectory": "$(currentDirectory)" } } }
VstsTaskSdkを使う
VstsTaskSdk を Node.js で使用する場合は参考ページの手順に従ってください。 ここでは PowerShell の VstsTaskSdk を使用する方法について説明します。
VstsTaskSdkのモジュールをインストールする
以下のコマンドを実行してローカル端末に VstsTaskSdk をインストールします。
Install-Module -Name VstsTaskSdk -AllowClobber
インストールしたモジュールを拡張機能のps_modulsフォルダに保存する
インストールできたら拡張機能のフォルダ配下にあるps_modules
フォルダ上で以下のコマンドを実行します。
Save-Module -Name VstsTaskSdk -Path "<ps_modules フォルダ>" -Force
これを実行するとps_modules
フォルダ配下にVstsTaskSdk
フォルダが作成されます。
その配下にバージョン番号名のフォルダが出来上がりますが、このバージョン番号フォルダ配下のファイルをVstsTaskSdk
フォルダに移動させてください。
以下のようになるのが正解です。
PowerShellスクリプトからVstsTaskSdkを呼び出す
スクリプトは次のように書いたらOKです。
以下はGet-VstsInput
を呼び出しています。
[CmdletBinding()] param() try { $samplestring = Get-VstsInput -Name "samplestring" } finally { Trace-VstsLeavingInvocation $MyInvocation }
なお、SDK のモジュールはそこそこの数があります。 以下のページを参照するとちょっとしたヘルプが記載されているので参考にしてください。
manifestファイルを作ってパッケージを公開する
manifest ファイル(vss-extension.json
)の作り方とパッケージの公開方法は前回の記事を参照してください。
作ったTaskを実行する
ここは特に迷いませんね。Azure Pipelines のビルドパイプラインからタスクを追加するだけです。
このように割と簡単に Azure Pipelines Task を作ることができました。 PowerShell に慣れている方ならわざわざ Node.js を使う必要もありません。