GitHub Actions入門
はじめに
CI/CD周りのツールとして、普段はScrewdriverを使っています。 screwdriver.cd
別のものをちょっと試しみようと思い、いまさらながらGitHub Actionsを試してみます。
GitHub Actionsについて
こちらが公式のガイドです。 GitHub Actionsのドキュメント - GitHub Docs
動かし方
プロジェクトのルート直下に以下の構成でディレクトリを作成し、ymlファイルを配置しておきます。
.github/workflows/
動かし方は、ymlに定義したトリガーに従ってGitHub Actionsが動作します。 たとえばpushをトリガーにActionが実行されるということが可能です。
入門
入門にあたって公式の以下のあたりが良さそうと思ったのでこちらを参考にすすめてみます。 https://docs.github.com/ja/actions/learn-github-actions/understanding-github-actions
まずはGitHub Actionsを動かしてみる。
ガイドを見ながら以下のようなものを作成しました。
name: hello-github-actions on: [push] jobs: hello: runs-on: ubuntu-latest steps: - run: echo 'hello'
動作を書くと以下のものになります。
hello-github-actions
という名前のワークフロー(name)です。
pushをトリガーに(on)hello
というjobが、ubuntuの最新版を使った仮想環境(runs-on)でecho helloするというものになります。
実行結果
以下のように、「Actions」タブにワークフローの結果が表示されます。
さらにこの詳細を確認すると、echo hello
の結果がわかります。
トリガー
GitHub Actionsに定義したjobが起動するトリガーを定義していますがいろいろ設定があるようです。 以下の部分がトリガーになっています。
on: [push]
上記を例にするとリポジトリにpushされたタイミングでjobが動くというトリガーになります。
これ以外のトリガーについては以下のところに記載があります。 https://docs.github.com/ja/actions/learn-github-actions/events-that-trigger-workflows
記載を見るとプルリクエストのタイミングでトリガーすることができたり、 または複数のトリガーを設定することができるようです。 以下がプルリクエストまたはpushをトリガーにするサンプルです。
on: [push, pull_request]
実行環境
本記事内で以下のようにGitHub Actionsを動かす環境をubuntu latestという形で指定していました。
runs-on: ubuntu-latest
上記以外にも色々な環境で動作させることができます。
以下に環境のことについて記載があります。 About GitHub-hosted runners - GitHub Docs
windows、ubuntu、後はmac osのサポートがあるのが面白いところですね。
さらに別のjobを作成
より実用的なサンプルとして、gradleでビルドするkotlin,SpringBootアプリケーションのテストを行うjobを作成してみます。 作成したのは以下になります。
name: gradle-test-actions on: [push] jobs: test: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v2 - name: setup jdk uses: actions/setup-java@v2 with: java-version: '11' distribution: 'adopt' - name: gradle test run: gradle test
これをpushすると以下のようにactionが実行されます。 ※ここではわざとtestが失敗するコードを書いています。
uses
とwith
というものがあるのでそれぞれ何をするものか確認します。
uses
今回は以下のように2つの指定しています。
uses: actions/checkout@v2
uses: actions/setup-java@v2
いろいろなサンプルを見る中でactions/checkout@v2
というのはほぼ必ずでてくるかなと思います。
用途としてはリポジトリからソースコードをチェックアウトするという理解です。
なのでテストを実行するとか、buildを行うなどをする際にはこのactionsを指定する形になりそうです。
v2というのはこのactionのversion2という意味のようでv1をあえて指定することもあるのか?というのは調べていません。
またsetup-javaについては使うJDKのバージョンを指定することを行っています。その際にwithを使って対象のversionや jdkのディストリビューションを指定することをしています。 ※このgradle buildにあたっての参考はこちら docs.github.com
local実行について
GitHub Actionsを動かす際に実際にGitHub上にイベントが発生した際に動作を試すこと以外に ローカルで動きを試すことができるようなのでこの方法を次の機会に試してみたいと思います。
※以下参考 dev.classmethod.jp
まとめ
GitHub Actionsを動かしてみました。 ここにきて手でactionsのymlを作る方法以外にGitHub上でいろいろなテンプレートから 生成できることに気づきました。 https://github.com/hiro21/sampleaction/actions/new
今回は少しの機能しか見ていないので少しずつ試していきたいと思います。
※以下に試した際のソースをおいています。 github.com