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」タブにワークフローの結果が表示されます。 f:id:set21set21:20211023211722p:plain

さらにこの詳細を確認すると、echo helloの結果がわかります。 f:id:set21set21:20211023211912p:plain

トリガー

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

windowsubuntu、後はmac osのサポートがあるのが面白いところですね。 f:id:set21set21:20211027214921p:plain

さらに別の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が失敗するコードを書いています。 f:id:set21set21:20211028210641p:plain

useswithというものがあるのでそれぞれ何をするものか確認します。

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