Azure DevOps のwikiにAzure CLIを使ってページを生やす!

こんにちは、さとはるです。

Azure DevOpsはパイプラインやタスク管理が有名ですが、wiki機能もあります。

DevOpsのwikiはマークダウンで書ける上に、多重にネストできるページやタスクとの連携等便利機能も色々あります。

さて、今回はそんなDevOpsのwikiをAzure CLI を用いて操作する方法についてご紹介しますす。

きっかけ

自分のチームでは毎週作業報告をwikiに書いています。

週ごと親となるページを生やし、その下にチームごとの子ページを生やしていきます。

親ページには見出し的に子ページへのリンクを張っています。

作ってしまえば便利なんですが、wikiの画面でポチポチ作っていくのは結構な手間です。

どうにか楽ができないかと調べてみたところ、Azure CLIにDevOps用コマンドがあることを知りました。

Azure CLI の DevOps コマンドを使ってみる!

今回は 「DevOps」の「wiki」 の 「ページ」 を 「作成」したいわけですが、そのものなコマンドが存在します。

az devops wiki page create

前提として、az loginは済ませておく必要があります。

また、初めてaz devops~ 系のコマンドを使用した際には関連コマンドのインストールが促されるのでインストールしてください。

基本は以下の公式リファレンスを参考にしてもらえればOKですが、一部パラメータについて補足します。

参考:CLI を使用して Wiki を管理する – Azure DevOps | Microsoft Docs

–path

wikiのルートから見たパスです。

「パス」と言いつつページ名そのものになるので注意。

サンプルに従ってクォートで囲むとクォートごと追加されるので、スペースとか挟まないページ名の場合はそのままがおすすめです(実行環境によるかも?僕はコマンドプロンプトでした)

–content

省略可能となってますが、↓のfile-pathとどちらかは必須な様子。

「–content ””」 とかで空文字渡そうとしても怒られますので、なんかは書く必要あるっぽいです。

–file-path

ページの中身を事前に用意できるならこちらの方が良さそう。

デフォルトの文字コードはutf8なのも良き。

–project ,–organization

az loginの仕方によるかもですが必要になることもあります。

つけ忘れたときには、Azure CLIくんが「こんな感じでパラメータよこせ!」って例付きで教えてくれるので安心ですね。

Azure CLI コマンドを実行するアプリを作る

C#のコマンドラインアプリでサクッと作りました。

基本方針は、必要なものを生成し、実行し、クリアにするです。

using System.Diagnostics;

// ページ情報の設定
string BASE = "テストページ"; // 親ページのタイトルです
string[] APPEND_ITEMS = new string[] { "aaa", "bbb", "ccc" };// 追加したいページのタイトルです
string APPEND_TEMPLATE_PATH = "append.md"; // 追加したいページの初期値です

// 接続情報の設定
string WIKI = "<Wikiの接続情報>";
string ORGANIZATION = @"<organization>"; // https:から始まるやつです
string PROJECT = "<project >";


string curDict = Directory.GetCurrentDirectory();
string batfilePath = Path.Combine(curDict, "Start.bat");
string templatePath = Path.Combine(curDict, "baseTemplate.txt");
string[] batfileData = new string[APPEND_ITEMS.Length + 2];
string[] templateData = new string[APPEND_ITEMS.Length];

// バッチファイルに書き込むデータ作成
batfileData[0] = "chcp 65001 > nul"; // バッチ実行時の文字コードをUTF-8に変更する
batfileData[1] = "cmd /c az devops wiki page create --path " + BASE + " --wiki " + WIKI + " --file-path baseTemplate.txt --organization " + ORGANIZATION + "  --project " + PROJECT;
for (int i = 0; i < APPEND_ITEMS.Length; i++)
{
    batfileData[APPEND_ITEMS.Length - i + 1] = "cmd /c az devops wiki page create --path " + BASE + "/" + APPEND_ITEMS[i] + " --file-path " + APPEND_TEMPLATE_PATH + "  --wiki " + WIKI + " --organization " + ORGANIZATION + " --project " + PROJECT;
    templateData[i] = "[" + APPEND_ITEMS[i] + "](" + BASE + "/" + APPEND_ITEMS[i] + ")";
}

File.WriteAllLines(batfilePath, batfileData);
File.WriteAllLines(templatePath, templateData);


// プロセスの開始
Process cmd = new Process();
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.FileName = batfilePath;

cmd.Start();
// 終わるのを待ってからファイルを削除
cmd.WaitForExit();
cmd.Close();
File.Delete(batfilePath);
File.Delete(templatePath);
### [やったこと]

### [やること]

### [共有事項]

wikiのサブページは後に追加したものが一番上にくるため、25行目のindexを弄って逆順に実行されるようにしています。

実行結果は以下です。

無事に追加されていることがわかります。

まとめ

今回はAzure CLI を使ってDevOpsのwikiのページ追加をプログラム化しました。

CLIコマンドが用意されていると、ツールの自作とかが現実的でよいですね。

上記のツールで作業が楽になるかは微妙ですが、もうちょっと改良して使いやすくしていきたいと思います!

本記事が少しでも誰かの手助けになれば幸いです。