こんにちは、さとはるです。
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コマンドが用意されていると、ツールの自作とかが現実的でよいですね。
上記のツールで作業が楽になるかは微妙ですが、もうちょっと改良して使いやすくしていきたいと思います!
本記事が少しでも誰かの手助けになれば幸いです。