Upgrade to Pro — share decks privately, control downloads, hide ads and more …

仕事でGoで書いたWindows向けの小さなアプリをAppVeyorを使ってCIした話

 仕事でGoで書いたWindows向けの小さなアプリをAppVeyorを使ってCIした話

第8回ゆるはち.it: CI/CDについてゆるく話す - https://yuruhachi-it.connpass.com/event/123888/
での LT 資料です。

Fcea5bbe60bd15b3b64e67c9003f4499?s=128

Daichi Hioki

March 27, 2019
Tweet

More Decks by Daichi Hioki

Other Decks in Technology

Transcript

  1. 仕事でGoで書いたWindows 向けの小さなアプリを AppVeyorを使ってCIした話

  2. 自己紹介 - 株式会社クリプラでクラウド電子カルテを開発している Rails エンジニア - https://clipla.jp/ - 最近は Go

    で Windows 向けアプリを作成中 - こちらにまつわる CI のご紹介
  3. AppVeyor とは - Windows 環境の CI ができるやつ - (Windows 以外も対応してるけど・・)

    - 価格 - Public なリポジトリなら無料 - 2019年3月時点で Private なリポジトリ は $29/month
  4. 設定方法 - Web からでも YAML でも 設定可能 - Web の場合は→

    - YAMLの場合は appveyor.yml で
  5. 設定方法 - Web で設定したものを YAML へ Export するこ とも可能

  6. Build Worker Image - 現時点でのデフォルト: - Visual Studio 2015 -

    ubuntu 等も選択可能 - ubuntu を Worker Image に 使った Getting started ページも ある - Getting started with AppVeyor for Linux | AppVeyor
  7. Stack (※ 今回は使わず) - stack: go 1.11 のように指定すること で公式の用意した Go

    を使える
  8. Build Cache - 指定したディレクトリやファイルの内容をビルド間で保持できる 機能

  9. AppVeyor でテストを行う例

  10. appveyor.yml に変更があったら cache からの restore を skip する こちらは Windows

    のコマンド > https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/if if [not] exist <FileName> <Command> [else <Expression>] 公式でまだ Go1.12 がサポートされていないためソースからインストール msiexec /i でインストール https://docs.microsoft.com/ja-jp/windows/desktop/Msi/command-line-options あらかじめ environment の箇所で環境変数 GOBIN を c:\gobin に設定しているため、$ go install した時に c:\gobin 以下にツールをインストールしてくれる どこでもよさそう。Go の Modules 導入以前は制限があったかも。 Go のモジュールシステムが過渡期なのでこのような指定が必要 詳細: https://github.com/golang/go/wiki/Modules
  11. AppVeyor に GoReleaser を組み合わせることで tag を push した時に自動で GitHub Releases

    に Publish する例
  12. if %APPVEYOR_REPO_TAG% equ true <コマンド> で tag を push した時だけ実行したいコマンドを定義できる

    deploy_script 内での goreleaser release の実行
  13. GoReleaser の設定ファイルは .goreleaser.yaml - builds の goos と goarch で

    指定した組み合わせをすべ て生成してくれる - 右の例では 6 通り
  14. GoReleaser には環境変数 GITHUB_TOKEN が必要 - GoReleaser を使ってリリースするためには repo の scope

    を 持った GitHub token を環境変数 GITHUB_TOKEN に設定 する必要がある
  15. GitHub token の作成 - https://github.com/settings/tokens/new で作るだけ

  16. AppVeyor で環境変数 GITHUB_TOKEN を指定する

  17. あとは tag を push するだけ - tag を push するだけで

    GitHub Releases にリリース が作成される
  18. まとめ

  19. - 話したこと - AppVeyor の概要: - 設定方法、Build Worker Image、Stack、Build Cache

    - プロジェクトでの実例: - Go1.12 をソースからインストールして statik もインストールしてテスト - AppVeyor + GoReleaser: - AppVeyor と GoReleaser を組み合わせて、tag を push した時に自動で GitHub Releases に publish - その他 - 今回試していなかったけれど、コードが大きい場合は Azure Pipelines の方が良い かも? - https://azure.microsoft.com/ja-jp/services/devops/pipelines/ - Public なリポジトリなら無料で 10 個の並列ジョブ(時間制限なし)を実行可能ら しい