GitHub ActionsでGauge Test(Kotlin)を実行する
はじめに
仕事ではGaugeを使うことが多いのですが、GitHub Actionsを使って動かすにはどうすればいいんだろうかというところに興味が少しわきました。 そもそもGitHub Actionsをそんなに使ったことも無かったのでHello Worldも兼ねてやってみようかと思います。
やってみる
環境
Gauge(といくつかのプラグイン)は事前にインストールしています。
Gaugeのプライグインに関しては今回はgauge-javaだけでよい想定です。
$ uname -srvmpio Linux 5.4.0-77-generic #86-Ubuntu SMP Thu Jun 17 02:35:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal yuya-hirooka@yuya-hirooka:~/source/sleepy $ java --version openjdk 11.0.10 2021-01-19 OpenJDK Runtime Environment 18.9 (build 11.0.10+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9, mixed mode) $ gauge version Gauge version: 1.3.1 Commit Hash: c76b761 Plugins ------- html-report (4.0.8) java (0.7.15) screenshot (0.0.1) xml-report (0.2.2)
プロジェクトを作成する
まずは、Gaugeのプロジェクトを作成します。
まずは、Maven Javaでプロジェクトを作成し、Kotlinで動作させるように変更します。
gauge init
コマンドでプロジェクトの作成を行います。
$ mkdir gauge-kotlin $ cd gauge-kotlin/ $ gauge init java_maven Initializing template from https://github.com/getgauge/template-java-maven/releases/latest/download/java_maven.zip . Copying Gauge template java_maven to current directory ... Successfully initialized the project. Run specifications with "mvn clean test" in project root.
プロジェクトができたら、src/test/java
とspecs/example.spec
は消してしまって大丈夫です。
Kotlinでコードを記述できるようにするために、Pomに以下の記述を追加します。
<properties> <kotlin.compiler.incremental>true</kotlin.compiler.incremental> <java.version>11</java.version> <kotlin.version>1.5.20</kotlin.version> <kotlin.compiler.jvmTarget>${java.version}</kotlin.compiler.jvmTarget> </properties> <dependencies> // もともとあった依存は省略 <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>${kotlin.version}</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-test</artifactId> <version>${kotlin.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> // もともとあったGaugeのプラグインは省略 <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <configuration> <args> <arg>-Xjsr305=strict</arg> </args> <jvmTarget>11</jvmTarget> </configuration> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs> <source>src/test/kotlin</source> </sourceDirs> </configuration> </execution> </executions> </plugin> </plugins> </build>
次にsrc/test/kotlin
ディレクトリを作成し、以下のクラスを作成します。
import com.thoughtworks.gauge.Step class HelloGitHubActions { @Step("Hello, GitHub Actionの文字列を出力する") fun hello(){ println("Hello, GitHub Action") } }
対応するSpecを記述します。
specs/example.spec
を作成し以下の記述を行います。
# Hello GitHub Actions ## GitHub Actionsに入門する * Hello, GitHub Actionの文字列を出力する
テストを実行します。
$ mvn test (省略) # Hello GitHub Actions ## GitHub Actionsに入門する Hello, GitHub Action ✔ Successfully generated html-report to => /home/yuya-hirooka/source/kotlin/gauge-kotlin/reports/html-report/index.html Specifications: 1 executed 1 passed 0 failed 0 skipped Scenarios: 1 executed 1 passed 0 failed 0 skipped Total time taken: 42ms Updates are available. Run `gauge update -c` for more info. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.569 s [INFO] Finished at: 2021-07-10T15:46:47+09:00
ここまででProjectの準備は完了です。
GitHub Actionsの設定をおこなう
GitHub Actionsの概要
GitHub Actionsは、ほぼはじめてであるためまずは簡単に概要をまとめます。
GitHub Actionsは開発のライフサイクルを自動化してくれるSaaSです。
イベント駆動で、指定されたイベントが発生した際に定義してある一連のコマンドが実行されます。
GitHub Actionsを構成する要素として以下のような概念が存在します。
- Workflow
- リポジトリに追加する。一連の自動化されたプロセスです。1つ以上のJob(後述)で構成され、スケジュールかもしくは設定されたイベントの発起をトリガーに実行されます。Workflowでプロジェクトのビルド、テスト、デプロイ等を行なうことができます。
- Event
- Workflowのトリガーとなるアクティビティです。コミットのPush、Issueの作成 、プルリクなど様々なアクティビティがあります(他のアクティビティに関してはこちらをご覧ください)。
- Job
- 同一のRunnerで実行される一連のStep(後述)の集合です。Workflowが複数Jobを持つ場合はデフォルトでJobを並行で実行します。シーケンシャルにJobを実行させることも可能です。
- Step
- Job内で実行される単一のタスクです。StepはAction(後述)もしくはShellコマンドとなります。
- Action
- Stepに結合されているスタンドアローンなコマンド。Workflow内での最小の構成要素となります。独自アクションの作成が可能ですし、GitHubコミュニティによって提供されるアクションを利用することも可能です。
- Runnler
- Workflowが実行されるGitHub Action Runnerがインストールされているサーバ。自分でホストすることも可能ですし、GitHubでホストされているものを利用することも可能です。Workflowの各Jobは新しい仮想環境で実行されます。自分のRunnerをホストしたい場合はこちらを参照してください。
GitHub ActionsではWorkflowはyamlファイルで定義します。
name: learn-github-actions on: [push] jobs: check-bats-version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 - run: npm install -g bats - run: bats -v
例えば上記のyamlは以下のように定義されています。
- name:Workflowの名前。Actionsタブに表示される
- on: [push]:Workflowのトリガーとなるうイベント上記の場合Pushされた際に発火される。
- jobs:Workflowを構成する一連のJobをグループ化する
- check-bats-version:Jobの名前。
- runs-on: ubuntu-latest:Jobが実行されるRunnerを定義。上記の場合Ubuntu Linuxのランナーで実行される。
- steps:
check-bats-version
Jobで実行されるStepのグループ化する - uses: アクションの定義
- actions/checkout@v2:コミュニティアクションの v2 を取得するようにジョブに指示。リポジトリをランナーにチェックアウトしてアクションを実行できるようにする。
- actions/setup-node@v1:Nodeのソフトウェアパッケージをインストールしnpmコマンドを利用できるようにしている。
- run: npm install -g bats:Runnnerでコマンドを実行する。上記の場合npmでbatsをインストールしている。
- run: bats -v:Runnerでコマンドを実行する。上記の場合batsのバージョンを表示している。
ベースとなるJavaのVersionを表示するWorkflowを定義する。
一通り、まとめて早速使っていきたいと思います。
まずはリポジトリを作成して先程作成したプロジェクトをPushしておきます。
次にベースとなるWorkflowを定義します。
.github/workflows/gauge-test.yaml
を作成して以下のようなyamlを記述します。
name: gauge-test on: [push] jobs: gauge-test: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v2 with: distribution: 'adopt' java-version: '11' - run: java --version
上記のActionはリポジトリをチェックアウトして、Javaのセットアップを行い、Versionを表示しているだけです。
JavaのセットアップはSetup Java JDKを用いています。
上記の図のように✓のバッチが付いているAcitonはGitHubがアクションの作成者をパートナーオーガナイゼーションとして認めたものになるみたいです。
このアクションは大きく以下のようなことを行ってくれます。
Javaに関してはZulu OpenJDK
、Adopt OpenJDK Hotspot
、Adopt OpenJDK OpenJ9
から選べるみたいで、またそのバージョンは 8
、 11
、15
の中から選択可能なようです(その他の細かいJavaのバージョンはこちらで確認してください)。
このWorkflowをpushしGitHubリポジトリのActions
セクションを確認します。
何度かミスってしまってますが、無視してください。 最新の成功している実行を確認すると以下のように表示されます。
ちゃんとJavaのバージョンが表示されていますね。 クリーンの処理も走っているみたいです。
Gaugeを実行するWorkflowを定義する
ベースとなるWorkflowはできたので、Gauge Testを実行するようにWorkflowを修正します。
name: gauge-test on: [push] jobs: gauge-test: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v2 with: distribution: 'adopt' java-version: '11' - run: curl -SsL https://downloads.gauge.org/stable | sh -s -- --location-[custom path] - run: gauge install java --version 0.7.15 - run: gauge version
先程のWorkflowから gaugeをインストールしてバージョンを表示するように修正しています。
pushしてActionsの実行結果をみてみます。
いい感じにできてるみたいですね。
最後に、テストを実行してみます。
name: gauge-test on: [push] jobs: gauge-test: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v2 with: distribution: 'adopt' java-version: '11' - run: curl -SsL https://downloads.gauge.org/stable | sh -s -- --location-[custom path] - run: gauge install java --version 0.7.15 - run: gauge version - run: mvn test
pushしてActionsの実行結果をみてみます。
テストの実行まで行えましたね。