Go
AppVeyor

Goで.NETに強いCIツールAppVeyorを試す


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

# 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


appveyor.yml

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オプションをつけて圧縮しています。

(バイナリに対しては無視されます)

これは、ユーザーがメモ帳で設定ファイルを開いた際に、設定ファイルが一行に見ないようにするためです。

補足ですが、ビルドスクリプトは、以下のような形です。


build.bat

go build -o .\build\mycoolcmd.exe

cp settings.toml .\build\settings.toml

因みにGOPATH modeの場合は、環境変数に$GOPATHを設定し、その中にプロジェクトをクローンする必要があります。


テスト

テストとはいえ、正常系のコマンドを実行してエラーにならないか程度を確認しています。


appveyor.yml

test_script:

- scripts\windows\test.bat
- dir


test.bat

# ビルドしたディレクトリをコピー

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をイメージしてください。

TYPEsedの共同作業で、設定ファイルを書き換えています。


artifacts


appveyor.yml

artifacts:

- path: mycoolcmd.zip

とても便利な機能、pathで指定したファイル群をアップロードしてくれます。

AppVeyorのコンソール上からダウンロードします。

リビジョンごとのビルド済み資材の管理出来ます。


appveyor使ってみた感想



  • installartifactsのフェーズでVM側の問題でエラーになることがあった、ymlが原因かVMが原因か分からず切り分ける必要があった

  • chromeが標準で入っており、chromedriver.exeを落とせば、クローリング・スクレイピングをするツールのテストはすぐ出来る

  • 割とサクッとwindowsで動作確認ができるので、非常に便利


参考

AppVeyor Build configuration