Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今からでも遅くない!GitHub Actions入門 - NIFTY Tech Talk #15

今からでも遅くない!GitHub Actions入門 - NIFTY Tech Talk #15

ニフティ株式会社

November 02, 2023
Tweet

Video


Resources

今さら聞けない!GitHub Actions超入門 - NIFTY Tech Talk #15

https://nifty.connpass.com/event/299800/

More Decks by ニフティ株式会社

Other Decks in Programming

Transcript

  1. 自己紹介 宮本達矢 • @niftyトップページ開発/運用担当 • 趣味:読書 • 過去に参加したTech Talk ◦

    SvelteKit, Next.jsの導入事例紹介など 〜ニフティ のフロントエンドの今とこれから〜 • Tech Day 2023にも出る予定です ◦ 飛び出せ!フロントエンド知見共有会 ~Next,Astro,Sveltekitを使ったエンジニアたちの 声~ • 最近あったこと ◦ 喉に穴子の骨が刺さり病院で抜いてもらう
  2. CLIから実施できることは大抵なんでもできる - プルリク作成時に自動テスト - Jest - GO testing - pytest

    - 特定ブランチへのpushで自動デプロイ - Terraform - AWS CDK - AWS SAM - Docker Image push - プルリクエストを作成したら自動レビュアー追加 - デプロイ完了時にwebhook経由のSlack通知 etc. 注:やってはいけないことも定められている https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features#actions
  3. name: Run unit test on: pull_request: branches: - master -

    develop jobs: tests: runs-on: ubuntu-latest timeout-minutes: 5 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '18.x' - name: Install packages run: yarn install - name: Run test run: yarn test 例:Jestのテストを 実施するGitHub Actions リポジトリの.github/workflows配下に yamlファイルを配置 - Actionを実行するトリガー条件の指定 - プルリクエストオープン・更新時・再オープン - マージ対象がmaster or developの場合 - Actionsの実施内容の記述 - ubuntuの最新版で実行 - タイムアウト5分 - 実施内容 i. checkout(actionからリポジトリアクセス) ii. Node.jsを実行環境に準備 iii. パッケージインストール iv. テスト実行
  4. on: で始まる部分がトリガー設定 - 設定できるトリガー:35種類 - 各項目内でも細かくタイミングが存在 - 例:pull request -

    作成時 - commit時 - ラベル追加時 etc. - 特定のブランチに対する更新で制限 - 特定のパス/ファイルの更新が含まれる 場合のみ発火 トリガー設定 https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows on: pull_request: types: [opened] branches: - develop paths: - "sample_app/**" - "!sample_app/README.md"
  5. jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 5 steps: - uses: actions/checkout@v3

    - uses: actions/setup-node@v3 with: node-version: '18.x' - name: Install packages run: yarn install ... deploy-pages: runs-on: ubuntu-latest timeout-minutes: 5 steps: … ジョブ設定 jobs: で始まる部分がワークフローで 動作するジョブ設定 - 一つのワークフロー内で複数のジョブを 定義可能 - 本番デプロイするジョブ - GitHub Pagesデプロイするジョブ - ジョブの実行環境設定 - ホストランナー - タイムアウト設定 - (省略可能だけどおすすめしません!) - stepに実行内容を記述 - step名 - 実行コマンド - 利用カスタムアクション
  6. カスタムアクション - 定義済みの特定の処理を再利用できる機能 - GitHub Marketplaceには20,516 件のActionsが登録(2023/10/23時点) - 各種ツールのセットアップ用Action -

    各種クラウドの認証情報設定用Action - 定番Actionの他にも便利Actionが登録 - 多くのActionはコミュニティ製なので、利用前に確認 - 利用するためには一行(+必要に応じて設定)を書くだけ - 公開されたカスタムアクション以外にも自分で作成可能 - action.yml or action.yamlという名前のファイルを作って読み込むだけ - CI/CD前に必要な共通の手順を切り出し # Node.jsのセットアップ - uses: actions/setup-node@v3 with: node-version: '18.x'
  7. 環境変数・secret 環境変数や、機密情報の 登録が可能 - 環境変数 - yaml内での定義 - ワークフロー全体 -

    job内限定 - step内限定 - コンソール上から事前定義 - ワークフロー内での定義 - secrets - コンソールから設定 - よく機密情報として扱うもの - IAM ロール、IAM アクセ スキー/シークレットアク セスキー - API Key - uses: aws-actions/configure-aws-credentials@v2 with: aws-region: ap-northeast-1 role-to-assume: ${{ secrets.AWS_ACCESS_IAM_ROLE }} env: node-version: '14.x' ... - name: Get Environment Config working-directory: .github/workflows/conf run: | API_ROOT=`cat prod.json | jq ".api_root" -r` echo "API_ROOT=$API_ROOT" >> $GITHUB_ENV - uses: actions/setup-node@v3 with: node-version: ${{ env.node-version }}
  8. 利用料金 - 課金は実行時間とストレージ基準 - 実行時間 Linux(vCPU 2): 0.008USD/分 - ストレージ

    1GB: 0.008USD/日 - パブリックリポジトリでは標準のホステッドランナーなら無料 - プライベートリポジトリではプランごとに一定の無料利用枠 - Freeプランで月2000分、500MBのストレージ - OSによって実行時間には倍率がかかる - 無料利用枠を超えた場合は課金が必要 - タイムアウト設定で異常発生時の余計な時間消費を防ぐ - 無料利用枠を超える課金分も事前に上限の設定が可能 - うっかり使いすぎてクラウド死!という事態は防止 2023/10/31時点の情報 https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions https://docs.github.com/ja/billing/managing-billing-for-github-packages/about-billing-for-github-packages
  9. まとめ - CLIからできることは大体なんでもできるGitHub Actions - リポジトリの.github/workflowsディレクトリ内のyamlファイルで 定義 - トリガーと実行内容を指定 -

    GitHub コミュニティで作成されたカスタムアクションが存在 - 料金はパブリックリポジトリなら標準の実行環境なら無料 プライベートリポジトリはプランごとに一部無料枠が存在