「TFS/VSTSのビルドタスク作成:拡張機能インストーラーの作成/展開」の続きです。
通常、機能を変更した場合はバージョン番号を変更して再インストールすればOKですが、お試しで動かしてみた後など、クリーンな状態にしたいときは拡張機能をアンインストールする必要があります。ストアアイコンから「拡張機能の管理」を選択し、管理画面の一覧で3点リーダーメニューから「アンインストール」を選択します。
いろいろ引っかかったこととかネタとかの保存用。最新技術ネタもある?? 最近はAzure DevOps Service(旧Visual Studio Team Services)とAzure DevOps Server(旧Team Foundation Server)多め。
「TFS/VSTSのビルドタスク作成:拡張機能インストーラーの作成/展開」の続きです。
通常、機能を変更した場合はバージョン番号を変更して再インストールすればOKですが、お試しで動かしてみた後など、クリーンな状態にしたいときは拡張機能をアンインストールする必要があります。ストアアイコンから「拡張機能の管理」を選択し、管理画面の一覧で3点リーダーメニューから「アンインストール」を選択します。
「TFS/VSTSのビルドタスク作成:前準備/各種ファイルの作成」の続きです。
「TFS/VSTSのビルドタスク作成:全体概要」の続きです。各種ライブラリの準備や構成ファイルの作成を行っていきます。
ちょっとビルドタスクとして作ってみたい処理があったので、ビルドタスクの作成方法について調べてみたら、結構ハマったのでまとめてみました。
Visual Studio Team Services(VSTS)でXamarinの自動ビルドとかHockeyAppとかについて確認しているところですが、すぐにまとめられるネタが出てきたのでちょっと公開します。
(今回のネタはAndroidですが、りんごさん系は全くの初心者なこともあり、ハマリ続けてます(;´Д`))
Xamarinで簡単なアプリを作成して、とりあえずVisual StudioからAndroidエミュレータでちゃんと動くことを確認。→VSTSのビルド定義でビルド成功まで確認。→HockeyApp経由でアプリをインストールして起動したところ、一瞬画面が生成されたあとにアプリが終了。
再度エミュレータで実行してもちゃんと動作するし、VSから実機デバッグしても動作するという状態。Xamarin初心者(というか、スマホアプリ初心者)なのに・・・と頭を抱えてましたが、「Android Device Monitor」という便利な機能に出会いました。
トレース情報や、Thread/Heap/ネットワーク状態/システム情報/ファイル一覧などいろんな情報が確認できるデバッグツールなのですが、自分はエミュレータだけで動作するものだと思い込んでましたが、実機に対しても使えるツールです。
とりあえず、Device Montorを起動して、HockeyApp経由でインストールしたアプリを実機で実行してみました。 ※画面下側にトレースログが出力されるのですが、システム全体の情報が出力されるので、青枠のところにフィルタする単語(アプリ名とか)を入れないと収拾がつきません。
すると、赤い文字でこんな怪しいログが・・・。
Assembly ‘assemblies/[アプリ名].dll’ is located at a bad address 0xa16f6bb7
どうも、DLLをローデングするアドレスの調整がうまくできてないようです。「こんなの初心者の領域を完全に超えてるよ・・・」と思いながら、インターネット様のお力をお借りすると、「VSTSでのビルド時に、zipalignを有効にすればいい」とのこと。
VSTSのビルド定義で、APKファイルへの証明書埋め込みタスクで「Zipalign Option」枠に「Zipalign」があるので、有効にしてビルドを再実行です。
・・・今度はビルドがエラーに(;´Д`)
(ログ出力が化けてるのはご愛嬌ということで)
「ANDROID_HOME」が定義されていないということなので、環境変数にandroid sdkへのパス(64bitOSのデフォルトだと「C:\Program Files (x86)\Android\android-sdk」)をセットして、VSTSのビルドエージェントを再起動(※コマンドプロンプトから起動している場合は、コマンドプロンプト自身も再起動しないと、変更した環境変数が反映されません)して、ビルドを再実行です。
・・・同じエラーが(;´Д`)
もう一度インターネット様のお力をお借りすると、「PATHに%ANDROID_HOME%\toolsが設定されていないとだめだよ」とのこと。「エラーメッセージおかしい!」と思いながらPATHに追加して、ビルドエージェント再起動→ビルド再実行すると、ようやく正常にビルド完了。
実機にインストールして起動すると、ちゃんと実行できるようになりました。
Xamarin.iOSでもいろいろハマってるので、後でVSTS+Xamarin+HockeyApp全体を通した環境構築の概要とかをまとめてみたいなと思います。(ハマってるところが解決できるのがいつになるかが怪しいので、まとめられる時期も不明です(;´Д`))
ちょっとしたバグに引っかかったので、メモ書きです。
TFS2015では、Subversionのリポジトリからソースコードを取得してビルドが実行できます。
これを使って、他チームが使ってるSubversionのリポジトリからソースコードを取ってきて、SonarQubeで分析してみるテストをしようと思ったところ・・・
ソースコードが取得できない (;゚Д゚)
Visual C++ 2010 再配布可能パッケージが必要なんですね・・・。
ここからダウンロードしてきます。
32bit: https://www.microsoft.com/ja-jp/download/details.aspx?id=5555
64bit: https://www.microsoft.com/ja-jp/download/details.aspx?id=14632
・・・なぜっ! (;゚Д゚)(;゚Д゚)(;゚Д゚)
いくら考えてもわからないので、Microsoft Connectにバグ報告。
何回かやり取りしたところ、この回避策やってみてくれと。
reg add HKLM\Software\Microsoft\VisualStudio\10.0\VC\VCRedist\x32 /v Installed /t reg_dword /d 1
(これって、単にパッケージのインストール判定するときのレジストリキーを単純に間違えてる(32bit版は「x86」)だけじゃ…)
通ったぁ~~
ちなみに、ビルドエージェントが32bitOSのときに発生します。(64bitOSでは正常に動作します)
次のバージョンで修正してほしいところですが、GitHubのビルドエージェントのリポジトリ(https://github.com/Microsoft/vsts-agent)にある最新版は64bitしか提供されていないのと、「Team Foundation Server "15" RC1」が出てる状態なので、このままかもしれません。
今までのソースの静的解析ツールと言えば、FxCop/CheckStyle/FindBugsなどの個別ツールを使って確認する感じでしたが、TFS2015 Update1で連携できるようになった「SonarQube」なるツールがいいらしいとの噂。
なんと単純な静的解析だけでなく、解析の履歴を蓄積してどれだけ改善できたかが簡単にわかるとのこと。
個別ツールだと前回との比較が面倒(前回の解析結果との比較を人がしないといけない)なところがありますが、SonarQubeだと一目でわかるので、継続的に使用するにはすごくいいツールだと思います。
以前から触ってみたいとは思っていましたが、間でいろいろあってなかなか触ることができなかったのですが、ようやく時間が取れるようになったのでUpdate3が出てきたタイミングで今更感がありますが、お試しでASP.NETのプロジェクトで実際に使ってみようとしたらまんまとハマってしましました。
なんとなくですが、日本語でのSonarQubeのビルドタスクに関する話があまり流れていないようなので、簡単な設定手順とバグ回避策についてまとめてみます。
※2016/07/03時点の情報です。最新の情報は自身で確認をお願いします。
ちなみに、英語ではMSとSonarQubeの両方に設定手順があります。
(SonarQube側の方が「MSBuild」という枠でTFS2013やコマンドラインでの実行方法も併せてまとまっているので、そちらを見ていただくほうがよさそうです)
○Build Tasks for SonarQube Analysis
https://blogs.msdn.microsoft.com/visualstudioalm/2015/08/24/build-tasks-for-sonarqube-analysis/
○Analyzing with SonarQube Scanner for MSBuild
http://docs.sonarqube.org/display/SONARQUBE53/Analyzing+with+SonarQube+Scanner+for+MSBuild
あと、ビルドエージェントにJava 7u75以上と.NET Framework 4.5.2以上が必要です。
さて、TFS2015日本語版での手順です。
事前準備として、SonarQubeへの接続情報(サービスエンドポイント)を登録します。
ブラウザでチームプロジェクトに移動した状態で、画面右上にある(歯車みたいな)サーバの管理アイコンをクリックしてコントロールパネル画面を表示します。
タブの中に「サービス」があるのでクリックし、左側に表示される「新しいサービスエンドポイント」から「汎用」を選択します。
「新しい汎用接続の追加」という子画面が表示されるので、各項目を入力します。
・接続名:ビルド定義でSonarQubeの接続先を指定するときに使う名前です。適当でかまいません。
・サーバーURL:接続先SonarQubeサーバのURLを指定します。
・ユーザ名:解析結果を登録するSonarQubeのプロジェクトにログイン可能なユーザ名を指定します。
・パスワード/トークンキー:上記ユーザに対するログインパスワード、もしくはSonarQubeサーバの「MyAccount」の「Generate Tokens」で発行したトークンを入力します。
次に、普通のビルド定義に対して、先頭に「MSBuild用のSonarQube – 分析開始」を、最後に「MSBuild用のSonarQube – 分析終了」を追加します。
一番最後にタスクが追加されますが、タスクをドラッグすると順番は変更てきます。
「MSBuild用のSonarQube – 分析開始」に対して、SonarQube側の情報を設定します。
・SonarQubeエンドポイント:事前準備のところで指定した「接続名」を指定します。(コンボボックスから選択)
・プロジェクトキー
SonarQubeのプロジェクト作成時に「Key」に指定した内容を設定します。
分からないときは、SonarQubeのメニューの「設定」から、「Projects」-「Management」で表示されるプロジェクト一覧の真ん中あたりに出てくるのがキーです。(イメージだと青枠のところ)
・プロジェクト名
SonarQubeのプロジェクト名を設定します。
・プロジェクト バージョン
とりあえず、「1.0」としておきます。
・DB接続文字列/DBユーザー名/DBユーザーパスワード
SonarQubeが5.2以上であれば、設定不要です。5.1以下の場合は、sonar.propertiesで指定した「sonar.jdbc.url」「sonar.jdbc.username」「sonar.jdbc.password」の内容を設定します。
・詳細設定
個別にパラメータを指定する場合、「/d:[パラメータ名]=[設定内容]」と設定します。
・設定ファイル
各種設定をまとめた「SonarQube.Analysis.xml」を使用する場合は、ここで設定します。
※設定時はバージョン管理に登録されている内容から選択するので、あらかじめSonarQube.Analysys.xmlはバージョン管理に登録しておく必要があります。
・品質ゲートのエラー時にビルドを失敗とする(SQ 5.3+)
SonarQubeの品質ゲート(Quality Gate)が「Failed」となったときにTFSのビルドを失敗とする場合は、これをONにします。
※この項目はTFS2015 Update1/2/2.1では存在しません。
ここまで設定してビルドを実行すれば、SonarQubeの静的解析が実行されて・・・のはずだったんですが...続きは次のブログで。
その1の続きです。
※2016/07/03時点の情報です。最新の情報は自身で確認をお願いします。
SonarQubeのビルドタスクを設定して実行すると、こんなエラーがでることがあります。
(正常に動作する方もいらっしゃるので、何かしらの環境依存かもしれませんが、今のところ不明です)
「バッチ ファイル: 1から予期しない終了コードを受け取りました」とかいう意味不明な日本語訳は置いときまして、次の行がエラーの原因のようです。
「summary.md」はSonarQubeの解析結果が格納されるファイルですが、ビルドエージェントを直接確認しても格納フォルダすら作成されていません。
数日間悩みましたが、結論は、とあるスクリプトのたった1文字がおかしいことで発生する日本語版固有(2バイト文字圏なら日本語以外でも発生するかも?)の問題です。
ビルドエージェントの内部動作で、ビルドが開始されるとビルドエージェントに対して実行するビルド定義で使用するタスクのモジュール/スクリプトがダウンロードされます。
「MSBuild用のSonarQube – 分析開始」で使用されるモジュール/スクリプトは「[エージェントのベースフォルダ]\tasks\SonarQubeReBuild\[バージョン番号(ex. 1.0.44)]」に展開されるのですが、その中にある「SonarQubePreBuild.ps1」の最終行が問題です。
このファイルを日本語環境で開くと、
(;゚Д゚)(;゚Д゚)(;゚Д゚)
「泡rguments」って何ですか?
最初は自分か作成した環境が悪いと思ってTFSサーバを作り直したり、ネットを検索したりしましたが、文字化けということで英語環境を作成してみるとちゃんと動作します。
ちなみに、英語環境で開くとこう見えます。
試しに、日本語環境のファイルをメモ帳で(見た目上)英語環境と同じ状態に変更してみるとちゃんと動作します。
?なので、変更前後のファイルをバイナリ比較すると、1バイトだけ違ってました。
上が変更前、下が変更後ですが、「-」の文字コードが違います。このせいで、スクリプトに引数がちゃんと渡せなくなってました。
※ちなみに、シフトJISで0x96は定義されていません。どうやって英語の人が入力したんでしょうか・・・。
回避策ですが、
1.ビルドエージェントが固定化されている場合は、さきほどの「SonarQubePreBuild.ps1」を修正すれば動作します。
但し、バージョンアップしたり、違うビルドエージェントや違うフォルダで実行したり、「tasks\SonarQubeReBuild」フォルダを削除した場合は、サーバが持っている間違ったスクリプトが展開されるので、またエラーになります。
2.「MSBuild用のSonarQube – 分析開始」の次に、改めてSonarQubeのタスクランナーを実行する。
スクリプトで最終的に実行したいのはMSBuild用のSonarQubeタスクランナー「MSBuild.SonarQube.Runner.exe」なので、バッチファイルを1つ用意し、それを実行することで回避します。
<サンプル>
○バッチファイルの中身
○バッチスクリプト実行タスクの設定
バッチファイルの引数に、プロジェクトキー/プロジェクト名/プロジェクトバージョンを指定するようにしてます。
「MSBuild.SonarQube.Runner.exe」の絶対パスと接続URLは、「MSBuild用のSonarQube – 分析開始」の実行後であればビルドエージェントのOS環境変数に格納されているので、それで対応してます。
(絶対パスは「%MSBUILD_SONARQUBE_BOOTSTRAPPERPATH%」、接続URLは「%MSBUILD_SONARQUBE_HOSTURL%」)
ちなみに、VSTS+日本語のローカルビルドエージェントでは正常に動作します。
ちょっと味見程度に思ってたところに時間を取られたので、とっとと本命のJava系(多分、Gradleから)での連携を確認しないと。
VS2015/TFS2015が登場してしばらく経ちましたが、以前から気になることが1つあったのですが、ようやく確認できたのでメモ。
※この情報は、これを書いた2015/10/20時点の情報ですので、必ず最新の情報を確認するようにしてください。
以前のTFSでは、Visual Studioをインストールしない環境でOffice連携を使用する際はOffice Professionai+Team Explorer(無償)をインストールすれば使用できていましたが、VS2015/TFS2015では単体のTeam Explorerが提供されなくなっています。
→TFS2010以降のシステム要件や互換性が記述されているページ(Requirements and compatibility)にも、Visual Studio 2015版のTeam Explorerの記述はありません。
いろいろ調べてみましたが、結論はBrian Harryのブログに書いてある内容になります。
※というか、書いてあるのは認識していたのですが、ブログの記載内容が公式見解と思ってませんでしたよ
「Licensing and packaging changes for TFS 2015」の「Team Explorer」のところに記載されているのですが、「Team Explorer 2015の単体版は出す気ないから、VS2015の製品版とかTeam Explorer EverywhereとかWebポータル使ってねん」ということです。
となると、Office連携環境をどう作成すればいいか?ということになるのですが、現時点では「Team Explorer 2013を使う」ということになります。
ただし、TFS2015 Update1に合わせて、Office連携機能「だけ」をインストールするインストーラーが提供される予定です。
→こちらもBrian Harryのブログにあります。(TFS Office Integration Installer)
Visual Studio 2015 Update 1 CTP版と合わせて、英語版Office連携機能のインストーラーもRC版として公開されていて、ブログの記事にある「TFS Office Integration Installer」のリンクからダウンロードできます。
お試しで入れてみましたが、今までと何も変わらず使えます。
英語版ですが、日本語のTFSに接続して日本語データを取り出すこともできます。
なお、Visual Studio 2015 Expressを入れても機能的には連携できるのですが、ライセンス条項に「マイクロソフトへの登録を行わない場合は30日の試用期間後に実行を停止する」と記載されているので、登録をしたくないという人はライセンス的に使えないということになります。
→「Visual Studio 2015 Expressのライセンス条項」に試用版の記載があります。
また、Visual Studio Communityは、ライセンス的にTFSに接続することができないようなので使えません。
→「Visual Studio 2015製品の比較」のTeam Foundation Serverへの比較項目で、Communityに対しては何も印が付いていませんが、Visual Studio Onlineには一部付いています。通常TFS/VSOへの接続は接続先のURLが違うだけなので、機能的にTFSだけ接続できないということではなく、ライセンス的に接続できないという制約と思われます。
ちなみに、Visual Studio 2015 Professional以上を使う人は何の問題もなくOffice連携できます。
昨日のブログについて、MVP ALMの亀川さんからこんなフォローを頂きました。
ということで、1台でエージェントが複数立ち上げれるか、実機で確認してみます。
Visual Studio Online(VSO)のサイトを複数作成するのはちょっと面倒かな?(ユーザを複数作成しないといけない気がします)というのと、自分にしてはめずらしく、オンプレミスのTeam Foundation Server2015の環境がまだ構築できていないので、1つのVSOサイトに対して複数のエージェントを登録してみました。
まず、Windowsから。
Visual Studio Online(VSO)のサイトからエージェントをダウンロードしておき、「ZIP展開→フォルダ名変更→ConfigureAgent.ps1で設定&起動」を繰り返すだけです。
別々のフォルダ名で展開し、エージェント名をユニークに設定すれば複数立ち上がりました。
次にLinux(CentOS7)。
※実環境を持っていないので確認できていませんが、たぶんMacでも同じだと思います。
‘sudo npm install vsoagent-installer -g’まで完了していれば、「ディレクトリ作成&移動→’vsoagent-installer’→’node agent/vsoagent’で設定&起動」を繰り返すだけです。
こちらも別々のディレクトリ名で作成し、エージェント名をユニークに設定すれば複数立ち上がりました。
自分の環境での参考値ですが、エージェント1つあたりの消費メモリは、Windowsで約100MB、Linuxで約20MiBぐらいでした。
複数のプロジェクトが平行で走っているけどビルド用端末が複数構築できないとか、開発用ライブラリのライセンスの都合上複数台用意できないような時にはこんな感じで構築してみてはどうでしょうか?
※ライブラリのライセンスによってはNGな場合のありえますので、構築前にちゃんと確認はしてください。