Launchable Advent Calendar 12日目 - record sessionコマンド
Launchableの各機能の利用方法を紹介する Launchable Advent Calendar 12日目です。
はじめに
ここまで launchable record build
, launchable subset
, launchable record tests
コマンドを紹介してきました。また、これまでのサンプルではこれらのコマンドを同一のマシン上で実行する想定になっていました。
しかし、環境によってはテストをインスタンスサイズの大きいスポットインスタンスで実行したり、複数のマシンで並列に実行したりする環境もあるでしょう。
今日紹介するlaunchable record sessionコマンドはテストを実行するマシンが分かれている様な環境で利用するコマンドになります。
今日まで launchable record session
というコマンドは出ていませんでしたが、実は launchable subset
や launchable record build
コマンドの内部で launchable record session
コマンドが実行されていました。launchableコマンドの実行ディレクトリに .launchable
がファイルが生成されそこに情報が保存されています。興味がある人は確認してみて下さい。
launchable record session
それでは launchable record session
コマンドについて紹介します。
基本的な使い方はこの様になります。
launchable record session --build <BUILD NAME>
builds/<BUILD NAME>/test_sessions/1616806
--build
オプションに launchable record build
コマンドの --name
オプションに指定したビルド名を指定します。
example
$ launchable record build --name try-record-session
Launchable recorded 0 commits from repository /Users/yabuki-ryosuke/src/github.com/Konboi/launchable-java-example
Launchable recorded build try-record-session to workspace konboi/advent-calendar-2022 with commits from 1 repository:
| Name | Path | HEAD Commit |
|--------|--------|------------------------------------------|
| . | . | 1e896f8860c8b8965c1205ed5e66efc7db2116ca |
$ launchable record session --build try-record-session
builds/try-record-session/test_sessions/1616806
GitHub Actionsでの例
Day 6サンプルを元にPrimary Node 1台、テストを実行するWorker Node 1台という構成を想定して変更します。
完了するとbuild1台で全て実行していたのがPrimary Node, Worker Noteの2台で実行するようになります。
※GitHub Actionsを使う関係上リソースを別のマシンへ転送する際に outputs
というGitHub Actions特有の機能を使いますが、適宜利用しているCI環境のものをお使いください。
LAUNCHABLE_TOKEN: ${{ secrets.LAUNCHABLE_TOKEN }}
jobs:
- build:
+ primary-node:
runs-on: ubuntu-latest
+ outputs:
+ test_session: ${{ steps.issue_test_session.outputs.test_session}}
steps:
- uses: actions/checkout@v3
with:
...
run: launchable verify
- name: record build
run: launchable record build --name ${GITHUB_RUN_ID}
+ - name: record session
+ id: issue_test_session
+ run: |
+ launchable record session --build ${GITHUB_RUN_ID} > test_session.txt
+ test_session=$(cat test_session.txt)
+ echo "test_session=$test_session" >> $GITHUB_OUTPUT
+ worker-node:
+ runs-on: ubuntu-latest
+ needs: [primary-node]
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: "3.10"
+ - name: Set up JDK 1.8
+ uses: actions/setup-java@v3
+ with:
+ distribution: 'adopt'
+ java-version: '8'
+ - name: Install launchable command
+ run: |
+ pip install launchable
+ - name: Restore test session
+ run: echo -n '${{needs.primary-node.outputs.test_session}}' > test_session.txt
- name: subset
- run: launchable subset --target 80% maven src/test/java > launchable-subset.txt
+ run: launchable subset --session $(cat test_session.txt) --target 80% maven src/test/java > launchable-subset.txt
- name: Run tests
run: mvn test -Dsurefire.includesFile=launchable-subset.txt
- name: launchable record tests
- run: launchable record tests maven target/surefire-reports/TEST-example.*.xml
+ run: launchable record tests --session $(cat test_session.txt) maven target/surefire-reports/TEST-example.*.xml
if: always()
さいごに
本日は launchable record session
コマンドの紹介と複数台に跨ってlaunchableコマンドを使用する例を紹介しました。今回はPrimary NodeとWorker Nodeが1対1でしたが、Primary Node 1, Worker Noteが複数の場合の設定を後日紹介する予定です。
明日はtest sessionのオプションflavorについて紹介します。
Discussion