Visual Studio Team Servicesで実装されていないBuild Taskを使えるようにする


Visual Studio Team Servicesファンの皆さまこんにちわ。今週のDevOpsハッカソン(12月9日, 10日)のためだけにこのエントリを書きます。本Tipsは、12/9 - 12/12までの間しか意味がありません。

ただし、この手順は、マイクロソフトが公開しているビルドタスクのうち、自分のプロジェクトから見えないタスクを組み込む手順としては有効かもしれません。それはこの記事とまったく同じ手順です。

Visual Studio Team Servicesで、現在(2015/12/8)Linux上でBuild Agentを実行するとCopyPublicBuildArtifactという、ビルドタスクが動きません。これは、ビルドタスク間で、ファイルを共有するためのタスクなので、致命的な欠陥です。私のほうでこの問題を発見して、GitHubのIssueとして報告しており、既にほかの方がPull Requestを送っており、マージされて、今週末後にリリース予定です。

その間、Visual Studio Team ServicesのLinux用Build Agentを使いたい人のための手順です。

Visual Studio Onlineのビルドタスクを作成するの手順と同様ですが、初めての方のために具体的に書いておきます。

1. VSO Tasksの取得

Visual Studio Team Servicesで定義されているビルドタスクは実はGitHubにあります。
このCopy and Publish Build Artifactsの部分にバグがあるので、これを改修してアップロードすれば終わりです。

まず、このリポジトリを取得しておきましょう。Gitがインストールされている前提です。

$ git clone https://github.com/Microsoft/vso-agent-tasks.git
$ cd vso-agent-tasks

2. tfx-cliのインストール

Visual Studio Team Services用のコマンドラインツールをインストールします。

Nodeとnpmがインストールされている必要があります。Windowsの人はchocolateyをインストールしたのち次のようにインストールしましょう。Macの人はhomebrew等でnodejsをbrew install nodeでインストール可能です。

$ choco install nodejs.install

3. tfs-cliのインストール

TFS Cross Platform Command Lineツールをインストールすると、Taskを自作できるようになります。

$ npm install -g tfx-cli

4. Personal Access Tokenの取得

コマンドラインツールが、Visual Studio Team Servicesにアクセスできるように、Personal Access Tokenを取得します。Visual Studio Team Servicesの右上の自分のアカウントをクリック > My Profile > Security > Personal access tokens を選択し、Addのリンクを押して、Access Tokenを取得します。

5. task.jsonの修正

今回のバグは、task.jsonというファイルでのCopyPublishBuildArtifacts.jsというファイル指定が小文字になっており、Unix系のOSでは、大文字と小文字を区別するため、このファイルが見つからずエラーになるというものです。
現在のGitHubリポジトリはこの問題が修正済みのようですので、このタスクをアップロードしなおせば、問題は修正されます。

vso-agent-tasks/Tasks/CopyPublishBuildArtifacts/task.json

実際には先ほどクローンした、リポジトリから移動します。そしてまずはVSTSにログイン

$ tfx login
Enter collection > https://<ここにVSOのアカウント名を書く>.visualstudio.com/DefaultCollection
Enter personal access token > xxxxxxxx

このGitHubにあるタスクを自分のVSTSに反映させるのは簡単で、そのタスクのディレクトリに行ってからtfx build tasks uploadコマンドを
実行して終了です。今回--overwriteオプションをつけているのは、既にそのビルドタスクは、VSTSに登録済みなので、それを上書きしてもらうために
つけています。

$ cd Tasks\CopyPublishBuildArtifacts
$ tfx build tasks upload --overwrite
TFS Cross Platform Command Line Interface v0.3.6
Copyright Microsoft Corporation
> Task path: .
.

Task at C:\Users\tsushi\Codes\vststasks\vso-agent-tasks\Tasks\CopyPublishBuildArtifacts uploaded successfully!

という感じですね。これで、CopyPublishBuildArtifactsのバグが修正されます。ほかにもいろいろな面白さそうなビルドタスクがあるので、自分で試してみるのもいいかもしれませんね。

ただし、正式リリースされていないものなので、問題はあるかもしれませんし、Windows系でのみしか動かないものもありますのでご注意ください。
その見分け方は、.js(Javascript)と.ps(PowerShell)が両方あるか否かで判断すればいいです。たまに.psファイルしかないものがあって、そのタスクはWindowsでしか動かないと思ったほうがいいです。(エラーメッセージも出ないので最初はびっくりするかもです)

では、ハックをお楽しみください!