rcmdnk's blog

20190926_appveyornewproject_200_200

AppVeyor はWindows環境を使えるCI/CDサービスです。 (今はLinux環境も使えますが。)

ちょっと使う機会があったので、 Windows用のアプリとかをGitHubでコード管理して そのビルドしたものをGitHubのリリース領域に追加する、ということについてのメモ。

Sponsored Links

AppVeyor

AppVeyorは Windows環境を使えるCI/CDサービスで、 Windows環境を使えるものがあまりないのでWindows用としてはよく使われているサービスだと思います。

勿論GitHubとも連携でき、登録などはTravis CIなどと似た感じ。

とりあえずGitHubのアカウントで登録してGitHubと連携して レポジトリを読み込めばレポジトリ毎にAppVeyorに登録出来ます。

テストレポジトリ

今回作ったのはこれ。

rcmdnk/appveyor_example: appveyor release exaple

.appveyor.ymlというのはAppVeyor用の設定ファイルですが、 それ以外はbat/build.batというファイルがあって、これが build/test.txtというファイルを作成するだけのものです。

このbuild.batをAppVeyorでコミットのたびに実行するようにします。 また、タグが作られたときだけそのタグを元にリリースとして作成し そのリリースに作成されたtest.txtを添付する、というのが目的。

一応出来たtest.txtの中身をチェックするテストを tests/test.batとして入れています。

実際には何かアプリ的なxxx.exeとかを作ってそれをテストしてGithubに貼り付ける感じです。

プロジェクト作成

GitHub側のAppVeyor設定で Repository accessをAll repositoriesにしておけば AppVeyor側のNew Project ページですべてのレポジトリが見える様になります。

20190926_appveyornewproject.jpg

もしくは特定のレポジトリだけをAppVeyorから見える様にすることもできます。

ここで連携したいレポジトリを選択してAppVeyor側にプロジェクトを作っておきます。

プロジェクトページのSettingsから色々と設定することが出来ますが、 今回必要なのはGitHubにファイルをアップロードするために必要なアクセストークンの登録だけです。

アクセストークンの登録

GitHub側でSettingsDeveloper settings Personal access tokensに行って New personal access token します。

必要最低限としてはrepoの中のrepo_deploymentだけですが、 commitとかもするとしたらrepo全体をチェックして作成します。

20190926_githubtoken.jpg

ここで取得したアクセストークンを AppVeyorに戻って使いたいプロジェクトの SettingsEnvironmentに行って Environment Variablesの欄でAdd variableします。

nameは適当にgithub_accessとかにしてvalueの欄に取得したトークンを入れます。

この際、該当の入力欄にフォーカスがあたっていると右側に鍵マークが出るので、 それを押すことで環境変数を暗号化することが出来ます。

20190926_appveyorenvironment.jpg

今回のトークンの様なものは暗号化しておきます。

暗号化した値はPull Requestとかからは使えない様になります。

Build configuration AppVeyor

のSecure variablesの欄をみると古いのか、ちょっと仕様が違っていて、 今のSettingsでは暗号化すると appveyor.ymlの中でenvironmentとして設定しなくても 直接登録時に指定した名前で使えます。 (そのためのnameの登録だと思うので多分ドキュメントが古い。)

これでAppVeyor側の設定が出来たのでレポジトリ側に設定ファイルを作成します。

appveyor.yml

設定ファイルはレポジトリトップにappveryor.yml.appveyor.ymlという名前で置きます。

もしくはAppVeyorの該当プロジェクトでSettingsGeneralにある Custom configuration .yml file nameで名前を指定して使います。

今回の内容はこんな感じ。

.appveyor.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: 0.1.{build}

artifacts:
  - path: ./build/test.txt
    name: Test file

build_script:
  - cmd: ./bat/build.bat

test_script:
  - cmd: ./tests/test.bat

deploy:
  provider: GitHub
  release: $(APPVEYOR_REPO_TAG_NAME)
  description: ''
  auth_token: $(github_access)
  artifact: 'Test file'
  draft: false
  prerelease: false
  on:
    APPVEYOR_REPO_TAG: true

最初のversionはGitHubのタグとかとは直接関係なくAppVeyor側の管理ようです。 これだとビルドが行われるたびに0.1.10.1.20.1.3とビルド番号がつくようになります。

artifactsはビルドしてアウトプットにしたいものを指定します。 今回はtest.textnameは指定しなくても良いですが、 後でGitHubに送ったりする時にnameを正規表現で指定して送ることも出来るので 複数ファイルをまとめて送る際には設定しておくと便利です。

build_scriptはビルド用コマンド。今回はbuild.batを実行するだけ。

これ以外にもbefore_build/after_buildなども設定できます。

appveyor.yml Reference AppVeyor

その後でテストをします。 test_scripttest.batを実行していますが、これは単にtest.txtの中身がbuild.batで作ったものかどうか(単にtest fileという内容)チェックするだけ。

最後にdeploy

  • provider: ファイルを送る先
    • GitHub ReleasesにdeployしたいのでGitHubを指定。
    • それ以外にもAWSやAzure、もしくは単にFTPサーバーなども指定できます。(Deployment AppVeyor)
    • 以下の設定はdeploy先によって変わるものもあります。
  • release: リリース名
    • ここではAPPVEYOR_REPO_TAG_NAMEというAppVeyorによって予め設定される値を使っています。
    • AppVeyorの設定ファイルの中で変数を値として使う場合には$()で表現します。
    • APPVEYOR_REPO_TAG_NAMEはビルドのトリガーがタグだった場合にそのタグ名が入ります。(Environment variables AppVeyor)
    • タグでない場合にはundefinedになります。
    • 今回はタグの場合だけリリースを作るのでタグの名前でリリースを作る様にしています。
  • description: リリースの説明
    • 指定しないとエラーになりますが、''を指定するとタグを作る時に付けた説明がリリースの説明にも使われます。
  • auth_token: GitHubへのアクセストークン
    • 上で登録したアクセストークンの名前を指定します。
  • artifact: deployするオブジェクト
    • GitHub Releasesに送りたいファイルの指定。
    • ,で分けて複数指定可能。また/.*file/みたいな感じで正規表現を使って複数をまとめて送ることも出来ます。
  • draft: リリースをドラフト状態にするかどうか
  • prelelease: リリースをプレリリース状態にするかどうか
  • on: deployを実行する条件
    • APPVEYOR_REPO_TAGもAppVeyorによって設定される値でタグがトリガーだとtrueになります。
    • 条件のところで使う場合には$()は使いません。

です。

これでレポジトリにpushすればビルドとテストが走ります。

タグを作って送るとさらにそのタグからリリースを作ってtest.txtをそのリリースに送ってくれます。

実際にやったもの

Releases · rcmdnk/appveyor_example

ここにv0.0.1のリリースがありますが、Soruce codeのzip/tar.gzファイルに加えてtest.txtが付いています。 AppVeyorで作られて送られてきたものです。

GitHub Actions

GitHub ActionsでもWindows環境が使える様なので、 こういったGitHubに追加する様なものはGitHub Actionsでやった方が楽です。

Appveyorからファイルを追加したい場合にはGitHubのアクセストークンを 作ってそれをAppveyorに登録しないといけませんが、 GitHub Actionsであれば特にその様なことをしなくても中で処理してくれます。

多分AppVeyroでやったことと同じ様なことが出来るんじゃないかな、と思うのでそのうち試して見るかも。

vim_ahk

今回これを採用したのはvim_ahkです。

Remove executables and add buildscript + appveyor setup by BlueDrink9 · Pull Request #26 · rcmdnk/vim_ahk

だいぶ前にPull Requestをもらってたんですが、ちょっと設定ファイルとかがそのままだと動かなくて、 面倒だったので手が付けられてませんでした。

とは言え実際ちゃんと自分で説明書読んでやってみたら上に書いたような感じで簡単に出来ることだったんですが。

ちょっとWindows上でGUIを使ったテストが上手く行かない状態で、それも合わさってビルド自体も上手く行かないと思ってたところが悪いところでした。

まとめ

AppVeyorを使ってWindows用のアプリをビルドとかしてGitHubのリリースに送ることが出来る様になりました。

とはいえ、恐らくGitHub Actionsでも同じ様なことが出来るはずなので 出来るならそっちのが良いかな、とは思います。

あと、AppVeyorで上手く行かないテストも上手いことできると良いのですが。

Sponsored Links
Sponsored Links

« 100円ショップで買ったmicro USBとLightningケーブルが一本で使えるケーブル sentakuでファイルの中身を選択中に表示する »