Github Actionsってなんだ
CI/CD関連で使われるサービスのようです。
CI/CDとは
継続的インテグレーション Continuous Integration
継続的デリバリー デプロイ Continuous Delivery Deployment
だそうです。単語の意味はよく分かりませんが
自動でテストして自動でデプロイすることです。
自分も何となく自動でやってくれるというあいまいな認識でしたが、興味だけはありました。
他のCI/CD関連のサービスは
- Jenkins,
- GitLab CI
- CircleCI
- AWS CodePipeline
どれも聞いたことないです...
とりあえず適当にリポジトリ作って使ってみます
.github/workflows/hoge.ymlを作成する
まずはGitHubのドキュメントに倣ってHelloWorld的なコードを実行してみます。
リポジトリに .github/workflowsディレクトリを作成します
.github/workflowsにあるymlファイルはワークフローファイルという名前で呼ばれているようです。
ワークフローファイルが実行されるのはワークフローファイルに記述したgithubのイベントがトリガーしたときです
pullRequestされたとき、pushされたときなど、実行するタイミングをワークフローファイルで設定できます
処理の内容もワークフローファイルに書いていきます。
.github/workflows/hoge.yml というワークフローファイルを作成しました。
name: test no warkflow
run-name: ${{ github.actor }} test
on: [push]
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "${{ github.event_name }}"
- run: echo "${{ runner.os }}"
- run: echo " ${{ github.ref }} ${{ github.repository }}."
- name: repo code check
uses: actions/checkout@v4
- run: echo "${{ github.repository }} "
- name: file list
run: |
ls ${{ github.workspace }}
コードの内容はGithubのドキュメントとほぼ一緒です。echoの内容を変えただけです。
自分は、コピペでそのまま実行したくない病なのでなにかしら変更を加えてしまいます。
初見のコードでしたが、身に覚えがあるというか、Dockerfileに似てなくもないかなという印象でした。
ワークフローはホステッドランナーと呼ばれる仮想マシンで実行されるようです。
run-on:
などはランナーのOSを定義しているようです。
Ubuntu Windows macOS の中から選べるようです。
on:push
これがgitのイベントです。
つまりpushされたときにこのワークフローは実行されるということです。
他にも
on:pushpull_request
プルリクされたとき
on:workflow_dispatch
githubから手動実行されたとき
などがあるようです。
調べているとmergeというイベントがないことに気づきました。
mergeもpushの一部ということでないようです。
branchやディレクトリを指定することもできて
on:
push:
branches:
- develop
paths:
- 'src/**'
このように記述すると
develop
ブランチのsrc
ディレクトリにpush
されたときに実行するようになります
jobs:
はここからワークフローの処理を定義しますよの文言
Explore-GitHub-Actions:
jobの任意の名前
steps:
ワークフロー構成する一つの処理単位
run:
ランナーでコマンドたたく
name:
コメント的な感じ。steps
を実行中にログに出力される
uses:
アクションを実行する
アクションとは再利用可能なコードの単位だそうです。
あらかじめ定義してあるアクションや、自前で定義したアクションを実行できるということです。
今回はあらかじめ定義されているactions/checkout
を使用して
レポジトリをランナーにクローンしています。
with:
を使って引数を渡せるようです。
jobs:
steps:
- uses: action/checkout@v4
with:
ref:
- develop
これはdevelopブランチを指定してクローンするコードです。
pushしてみる
githubにこのような出力があり正しく動作していることが確認できました。
CI/CDのCDだけなら結構簡単に使えそうな印象でした。
CIは難しそうです。そもそもテストってどうやるんでしょうか...
githubに出力されたワークフローのログを見て思い出したのですが、専門学校時代に教員が課題を自動でテストするときにつかってました。
CIに関してはまた調べます