AppVeyor?
AppVeyor
Windows and Linux用のSass系のCIツールです。
.NETに強い印象です。
対象
GoのCLIツールをWindowsで動作確認したいが、手動は流石に面倒だと思っている方
モチベーション
- WindowsとMacで使える業務効率化の社内ツールを作成する必要があった
- 筆者は基本的にMacを利用しているため、Windowsの動作確認が面倒だった
- OSSのREADMEでAppVeyorのバッジをよく見かけたので試したかった
環境
- go 1.12.x
appveyor.ymlの全体構成
appveyor.ymlの構成は、最終的に以下のようになりました。
# appveyor.yml
# defaultだと、MSBuildモードになるのでoff
# MSBuildモードについては、参考記事参照願います
build: off
clone_folder: c:\mycoolcmd
environment:
GO111MODULE: on
stack: go 1.12.3 x64
install:
- cinst -y make sed zip
build_script:
- scripts\windows\build.bat
- zip -l -r -j mycoolcmd.zip build/* # change to CRLF
test_script:
- scripts\windows\test.bat
- dir
artifacts:
- path: mycoolcmd.zip
ポイント解説
Chocolatey
- cinst -y make sed zip
ビルドやテストで必要となるコマンド類を一通り落とします。
Chocolatey
は、Windowsのパッケージ管理ツールでAppveyorのイメージに標準で入っています。
choco install
を略してcinst
とすることが可能です。
Go modules
environment:
GO111MODULE: on
stack: go 1.12.3 x64
...
build_script:
- scripts\windows\build.bat
- zip -l -r -j mycoolcmd.zip build/* # change to CRLF
GOPATH mode
ではくmodule-aware mode
でビルドしています。
go build
で依存のあるライブラリを一通りダウンロードし、ビルドしてくれます。
ビルド後は、設定ファイルをCRLF形式にしたいので、zip
の-l
オプションをつけて圧縮しています。
(バイナリに対しては無視されます)
これは、ユーザーがメモ帳で設定ファイルを開いた際に、設定ファイルが一行に見ないようにするためです。
補足ですが、ビルドスクリプトは、以下のような形です。
go build -o .\build\mycoolcmd.exe
cp settings.toml .\build\settings.toml
因みにGOPATH mode
の場合は、環境変数に$GOPATH
を設定し、その中にプロジェクトをクローンする必要があります。
テスト
テストとはいえ、正常系のコマンドを実行してエラーにならないか程度を確認しています。
test_script:
- scripts\windows\test.bat
- dir
# ビルドしたディレクトリをコピー
XCOPY /Y /I build wintest
# 設定ファイルを書き換え
TYPE settings.toml |sed -e s/hogehoge@/%email%/g -e s/hogehoge/%password%/g>.\wintest\settings.toml
cd .\wintest
# GoのCLIアプリを実行
mycoolcmd.exe
%email%
と%password%
は、AppVeyorの設定で外部から見えないようしている環境変数です。
TYPE
はwindowsのコマンドで、linuxのcat
をイメージしてください。
TYPE
とsed
の共同作業で、設定ファイルを書き換えています。
artifacts
artifacts:
- path: mycoolcmd.zip
とても便利な機能、path
で指定したファイル群をアップロードしてくれます。
AppVeyorのコンソール上からダウンロードします。
リビジョンごとのビルド済み資材の管理出来ます。
appveyor使ってみた感想
-
install
やartifacts
のフェーズでVM側の問題でエラーになることがあった、ymlが原因かVMが原因か分からず切り分ける必要があった - chromeが標準で入っており、chromedriver.exeを落とせば、クローリング・スクレイピングをするツールのテストはすぐ出来る
- 割とサクッとwindowsで動作確認ができるので、非常に便利