Slide 1

Slide 1 text

GitHub Actionsのハンズオン

Slide 2

Slide 2 text

GitHub Actionsについて 概要 GitHubリポジトリ上で、開発ワークフローを自動化するプラットフォーム ⇨CICDの実現 実体 GitHubリポジトリ内の”/.github/workflows”配下に存在するYAMLファイル ワークフローファイルなどとも呼ばれる YAMLの書き方などは後述 複数のYAMLファイルをworkflowsに配置して、複数のアクションを定義可能

Slide 3

Slide 3 text

ワークフローファイルの最小構成 「mainブランチへのプッシュをトリガーに、ジョブ実行環境で、"Hello, World!"を出力する」ワークフロー name: Echo HelloWorld # ワークフローの名前(UIに表示される) on: push # トリガー設定(いつ実行するか) branches: - main # mainブランチにpushされたとき jobs: # 実行するジョブ(複数定義可能) echo-hello: # ジョブ名(任意) runs-on: ubuntu-latest # ジョブ実行環境 steps: # ジョブ内で順番に実行されるステップ(複数定義可能) - run: echo "Hello, world!" # 実行するコマンド (複数あるとき)基本的にワークフローとジョブは並列実行、ステップは直列実行 stepsでは、"run"の他にも、"uses"でAction MarketPlaceにて公開されているアクションを使用可能 job内で生成したファイルなどは、"Artifacts"にアップロードして、ユーザーや他jobがダウンロード可能

Slide 4

Slide 4 text

ワークフロー作成ハンズオン 前提 準備するもの PC gitコマンドが実行可能(gitユーザ設定済み) GitHubアカウント作成済み ハンズオンで作るワークフロー Golangプログラムの「静的解析、単体テスト→ビルド→実行確認」パイプライン 今回は、静的解析と単体テストは並列に実行して、ビルドはその両方が成功したら行い、実行確 認はビルドが成功したら行う このワークフローのゴールは、対象プログラムをビルドして、実行ファイルが正常に動作するこ とを確認すること

Slide 5

Slide 5 text

ハンズオン 1. PCで、以下のGitHubリポジトリにアクセスする GitHub-Actions_HandsOn 1-1. リポジトリのトップ画面の右上あたりの緑色ボタン「Use this template」をクリック 1-2. 「Create a new repository」をクリック 1-3. Repository templateに"macka-long/GitHub-Actions_HandsOn”が選択されてることを確認する 1-4. 以下のリポジトリ情報を設定    - Repository name : MyActionsTest    - 公開設定 : private 1-5. 緑色ボタン「Create repository」クリック 2. 前手順で作成した"MyActionsTest"をローカルにgit clone 3.~5.の手順は、このローカルリポジトリで作業する 3. "MyActionsTest"内に、 ”/.github/workflows”を作成する

Slide 6

Slide 6 text

4. "/sample-workflow”内の以下のファイルを前手順で作成した”/.github/workflows”にコピーする go-ci-workflow.yaml 何をやってるかは当ファイルのコメントで書いておいたので、それを読んでください 5. これまでのローカル作業の内容をgit add→commit→push 6. GitHubで、"MyActionsTest"リポジトリにアクセスして、 「Actions」を確認する 今回実行されたアクションの各ジョブ、ステップのログを見てみる "Run Built Binary"ジョブのログを見て、ちゃんと"Hello, Go Action"が出力されたか(実行ファイルの 正常性)を確認する

Slide 7

Slide 7 text

発展課題 1. ジョブの実行順序を以下に変更する すべて直列に、 「静的解析=>単体テスト=>ビルド=>実行確認」 2. ワークフローのトリガーを以下に変更する mainブランチへのpush&すべてのブランチからのpull_request 3. デイリービルドのワークフローファイルを作成する 実行スケジュールは毎日24時、ジョブは任意 生成された成果物のアップロード先は、ArtifactsでもGitHubリリースでもどちらでも良い 4. 好きな言語で、ワークフローを考えて、リポジトリを作る