この記事はなむゆの個人ブログにもマルチポストされています。->こちら
どうも、パイプラインが回るとうれしいなむゆです。
Azure DevOpsのパイプラインをコードから回したくなること、ありませんか?
普段はAzure DevOpsのパイプラインは文字通りのDevOpsのためのCI/CDパイプラインを回すために使いますが、時としてこれを手動で回したい、しかもできればアプリケーション上から!ということもあるかと思います。~え、ない?~
AzureDevOpsにはそんな時に使えるAPIが用意されています。
今回はそれを使ってAPIからAzure DevOps上のパイプラインを回してみます。
Azure DevOpsパイプラインを回すAPIを叩いてみる
まずはAzure DevOpsのOrganizationとプロジェクトを作ります。
この辺りのやり方はAzure DevOpsでサクっとCI/CDを組んでみるシリーズが参考になりますのでこちらでは省略。
結果としては以下のようなOrganization名「Namuyun」プロジェクト名「Namuyuno」で作成しました。

それでは、パイプラインで使うパイプラインyamlファイルをAzure DevOpsの機能の一つのReposで作られているGitリポジトリに突っ込んでいきます。

今回作成したpipeline.yamlの中身はこんな感じです。
trigger: none
pr: none
parameters:
- name: "sample1"
type: string
displayName: "Sample1"
- name: "sample2"
type: number
default: 0
displayName: "Sample2"
jobs:
- job: sample_job
displayName: sample job
pool:
vmImage: ubuntu-16.04
steps:
- script: |
echo Sample1 Value is: ${{ parameters.sample1 }}
echo Sample2 Value is: ${{ parameters.sample2 }}
ざっくりとした意味合いとしては、
- このパイプラインはPRやマージをトリガーにしては回りませんよ~
- このパイプラインは回すときにパラメーターとして「sample1」、「sample2」という名前の引数を受け取りますよ~
- このパイプラインで実行することはパラメーターとして受け取った「sample1」、「sample2」をコマンドラインで出力しますよ~
みたいなことを書いてます。
お次はパイプラインを作ります。メニューからPipelinesを選び、右上の「New Pipeline」ボタンを押します。

pipeline.yamlのコードはAzure Reposにおいてあるのでそれを選びーの

リポジトリ名は「Namuyuno」で作ったのでそれを選びーの

今回は既に作ってあるyamlファイルを読み込むので「Existing Azure Pipelines YAML file」選びーの

「Path」で今回使うパイプラインyamlファイル選びーの

するとパイプラインyamlファイルの中身を確認できるので問題なければ右上の下↓から「Save」を選択します。これでパイプラインが作成されます。
「All」のタブを選ぶと作ったパイプラインが確認できます。今回は名前を「Namuyuno」に変えています。これをクリックします。

すると作成したパイプラインの詳細画面に映るのですがここでそのページのurlに注目。
「definitionId=○○」とありますが、この番号を覚えておきます。
あとでAPIを叩くときに回したいパイプラインのIdを指定するときに使います。

次はパイプラインを回すAPIを叩くのに必要なアクセストークンを作成します。DevOpsの画面右上の方にある心臓が歯車に置き換えられちゃった人みたいなアイコンをクリックして「Personal access tokens」をクリックします。

するとトークンの一覧の画面が開くので、左上の「New Token」をクリックします。

作成するトークンの設定する画面が開くので、名前と設定する権限、有効期限を設定します。「Scope」はトークンに与える権限を設定できるのですが「Custom defined」を選び、下に出てくるスコープの一覧から「Build」の「Read & excute」を選択し、「Create」をクリックします。
ちなみに有効期限の最大は1年なのでアプリケーションに組み込むとき等は注意です!

すると、トークンが作成され、表示されます。
作成されたトークンはこの画面にしか表示されないのできちんとコピーしておきましょう。

これでパイプラインAPIを叩く準備は完了です!
今回はPostmanを使ってパイプラインを回すAPIを叩いてみます。
このAPIのURLは、https://dev.azure.com/{Organization名}/{プロジェクト名}/_apis/pipelines/{回したいパイプラインのId}/runs?api-version=6.0-preview.1
です。HttpメソッドはPOSTです。
今回はOrganization名、プロジェクト名、回したいパイプラインのIdはそれぞれ「namuyun」、「Namuyuno」、「2」で置き換えます。
そしてさらに、アクセストークンの設定も行っていきます。
なので、Postmanでは「Authorization」のタブを開き、TYPEを「Basic Auth」と指定します。するとUsernameとPasswordの入力欄が出てくるので、Passwordの欄に先ほどコピーしたトークンを張り付けます。
Usernameは入力しなくて大丈夫です。

それができたら、メッセージの本文を作成していきましょう。
「Body」のタブに移動して、タイプは「raw」を選択します。
するとBodyの中身を書き込める欄が出てくるので、ここにメッセージの本文を書き込んでいきます。
メッセージの形式としては、
{
"resources": {
"repositories": { "self": { "refName": "refs/heads/{パイプラインを回すのに使うブランチ名}" } }
},
"templateParameters": {パイプラインに渡すパラメーター(Json)}}
}
となっています。
今回はパラメーターとして「sample1」「sample2」を渡すので、その内容はtemplateParametersに書き込んでおきます。

準備ができたら「Send」を押してリクエストを送ります。レスポンスステータス200番が返って来たら成功!
では、パイプラインがちゃんと回っているか確認するためAzure DevOpsも見てみましょう。
パイプラインの名前の横に時計アイコンが出ていればリクエストを受け付けてパイプラインを回す準備をしています。回転しているアイコンが出ていればパイプラインが回っています!

時間がたつとパイプラインの横のマークは緑のチェックマークになるはずです。パイプラインがコケたらバツ印になります・・・
どちらにせよ、処理が終わったらそのパイプラインの処理結果を見ていましょう。
「CmdLine」の項目を選択すると、処理が成功していればパイプラインyamlで記述したとおりsample1とsample2のパラメータに入力した値が出力されているはずです!

おわりに
今回はAzure DevOpsから公開されているAPIを使用してAzure DevOpsパイプラインを回しました。
Azure pipelineを回すにはほかにもaz cliを使用した方法もあります。
状況に応じて使い分けていきましょう。