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 資料です。

Daichi Hioki

March 27, 2019
Tweet

More Decks by Daichi Hioki

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 自己紹介
    - 株式会社クリプラでクラウド電子カルテを開発している Rails
    エンジニア
    - https://clipla.jp/
    - 最近は Go で Windows 向けアプリを作成中
    - こちらにまつわる CI のご紹介

    View full-size slide

  3. AppVeyor とは
    - Windows 環境の CI ができるやつ
    - (Windows 以外も対応してるけど・・)
    - 価格
    - Public なリポジトリなら無料
    - 2019年3月時点で Private なリポジトリ
    は $29/month

    View full-size slide

  4. 設定方法
    - Web からでも YAML でも
    設定可能
    - Web の場合は→
    - YAMLの場合は
    appveyor.yml で

    View full-size slide

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

    View full-size slide

  6. Build Worker Image
    - 現時点でのデフォルト:
    - Visual Studio 2015
    - ubuntu 等も選択可能
    - ubuntu を Worker Image に
    使った Getting started ページも
    ある
    - Getting started with AppVeyor for
    Linux | AppVeyor

    View full-size slide

  7. Stack (※ 今回は使わず)
    - stack: go 1.11 のように指定すること
    で公式の用意した Go を使える

    View full-size slide

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

    View full-size slide

  9. AppVeyor でテストを行う例

    View full-size slide

  10. appveyor.yml に変更があったら cache からの restore を skip する
    こちらは Windows のコマンド
    > https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/if
    if [not] exist [else ]
    公式でまだ 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

    View full-size slide

  11. AppVeyor に
    GoReleaser を組み合わせることで
    tag を push した時に自動で
    GitHub Releases に Publish する例

    View full-size slide

  12. if %APPVEYOR_REPO_TAG% equ true <コマンド> で tag
    を push した時だけ実行したいコマンドを定義できる
    deploy_script 内での goreleaser release の実行

    View full-size slide

  13. GoReleaser の設定ファイルは .goreleaser.yaml
    - builds の goos と goarch で
    指定した組み合わせをすべ
    て生成してくれる
    - 右の例では 6 通り

    View full-size slide

  14. GoReleaser には環境変数 GITHUB_TOKEN が必要
    - GoReleaser を使ってリリースするためには repo の scope を
    持った GitHub token を環境変数 GITHUB_TOKEN に設定
    する必要がある

    View full-size slide

  15. GitHub token の作成
    - https://github.com/settings/tokens/new で作るだけ

    View full-size slide

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

    View full-size slide

  17. あとは tag を push するだけ
    - tag を push するだけで
    GitHub Releases にリリース
    が作成される

    View full-size slide

  18. - 話したこと
    - 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 個の並列ジョブ(時間制限なし)を実行可能ら
    しい

    View full-size slide