Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

GitHubカスタムアクションを作ってCI/CDを効率化しよう

 GitHubカスタムアクションを作ってCI/CDを効率化しよう

2023/07/25に開催された、「【福岡現地開催】CloudNative Days Fukuoka 2023 プレイベント」での登壇資料です。

https://cloudnativedays.connpass.com/event/289955/

Ken'ichirou Kimura

July 25, 2023
Tweet

More Decks by Ken'ichirou Kimura

Other Decks in Technology

Transcript

  1. 自己紹介 株式会社オルターブース クラウドソリューション部 副部⾧ 木村 健一郎(Kenichiro KIMURA) 大学院在籍中に未踏ソフトウェア創造事業に 採択され、その成果を元に設立したスタート アップに20年在籍。

    2014年頃からクラウドの世界に触れる中で サーバレスとIoTに魅せられ、JAWS-UG福岡 やSORACOM UG九州のコアメンバーとして コミュニティ活動を行っている。 2020年にオルターブースにジョイン。テッ クリードとしてお客様の支援やプロダクトの 開発に従事している。 家に帰ると6歳の娘と戯れる日々。 AWS Samurai2019受賞 SORACOM MVC2020受賞 Twitter: @show_m001(しょーちゃん) Copyright © Alterbooth Inc. All Rights Reserved. 2
  2. Copyright © Alterbooth Inc. All Rights Reserved. 3 株式会社オルターブース 会社名

    〒812-0016 福岡市博多区博多駅南2-1-9 博多筑紫通りセンタービル8F 所在地 2015年3月19日 設立 1億472万5千円 資本金 25人(役員除く) 従業員 代表取締役 CEO 小島 淳 取締役 田中 務 取締役 嘉門 健一郎 監査役 仲田 和正 役員 西日本シティ銀行 みずほ銀行 北九州銀行 取引銀行 (1)クラウドコンピューティングを活用したシステム企画・開 発及び運営 (2)インターネット関連システムの企画・開発及び運用 (3)SaaS、ASPサービス及びIT商品の企画・開発及び運営 (4)前各号に附帯又は関連する一切の事業 事業内容 インフォコム株式会社 主要株主 日本マイクルソフト株式会社オイシックス・ラ・大地株式会社 インフォコム株式会社 株式会社博報堂DYメディアパートナー ズ EYストラテジー・アンド・コンサルティング株式会社 株式 会社エフ・ジェイエンターテイメントワークス その他 主要取引先 2023年7月1日現在 Alterbooth HISTORY 福岡県福岡市中央区にて株式会社オルターブース設立 3月 2015年 福岡県北九州市にて北九州ブランチオフィス開設 5月 2016年 Microsoft Partner Network Cloud Platform Silver Competency 取得 6月 Microsoft Innovation Award サムライインキュベート賞 受賞 3月 2017年 福岡市外提供する官民連携インキュベート施設Fukuoka Growth Nextに天神ブラン チオフィス開設 4月 Japan Microsoft Partner of the Year 2017 OSS on Azure賞 受賞 8月 Microsoft Cloud Solution Indirect Reseller認定 1月 2018年 事業会社よりシードラウンド増資を実施 2月 Microsoft Partner Network Cloud Platform Gold Competency 取得 9月 Japan Microsoft Partner of the Year 2019 特別賞 受賞 8月 2019年 複数VCよりプレシリーズAラウンド増資を実施 9月 2019年 Japan Microsoft Partner of the Year 2020 App Modernization賞 受賞 LINE Biz Partner Program コミュニケーション部門にてTechnology パートナー 認定 8月 2020年 株式会社エフ・ジェイエンターテイメントワークスと事業提携 複合型施設向けLINEモバイルオーダー FooPass を共同リリース 12月 Japan Microsoft Partner of the Year 2021 OSS on Azure賞 受賞 8月 2021年 LINE株式会社、日本マイクロソフト株式会社と小売業のDX支援を目的とした共同プロ ジェクトに参画 10月 2021年 インフォコム株式会社と資本業務提携実施、インフォコムグループに参画する 2月 2022年
  3. Copyright © Alterbooth Inc. All Rights Reserved. 4 株式会社オルターブース 会社名

    〒812-0016 福岡市博多区博多駅南2-1-9 博多筑紫通りセンタービル8F 所在地 2015年3月19日 設立 1億472万5千円 資本金 25人(役員除く) 従業員 代表取締役 CEO 小島 淳 取締役 田中 務 取締役 嘉門 健一郎 監査役 仲田 和正 役員 西日本シティ銀行 みずほ銀行 北九州銀行 取引銀行 (1)クラウドコンピューティングを活用したシステム企画・開 発及び運営 (2)インターネット関連システムの企画・開発及び運用 (3)SaaS、ASPサービス及びIT商品の企画・開発及び運営 (4)前各号に附帯又は関連する一切の事業 事業内容 インフォコム株式会社 主要株主 日本マイクルソフト株式会社オイシックス・ラ・大地株式会社 インフォコム株式会社 株式会社博報堂DYメディアパートナー ズ EYストラテジー・アンド・コンサルティング株式会社 株式 会社エフ・ジェイエンターテイメントワークス その他 主要取引先 2023年7月1日現在 Alterbooth HISTORY 福岡県福岡市中央区にて株式会社オルターブース設立 3月 2015年 福岡県北九州市にて北九州ブランチオフィス開設 5月 2016年 Microsoft Partner Network Cloud Platform Silver Competency 取得 6月 Microsoft Innovation Award サムライインキュベート賞 受賞 3月 2017年 福岡市外提供する官民連携インキュベート施設Fukuoka Growth Nextに天神ブラン チオフィス開設 4月 Japan Microsoft Partner of the Year 2017 OSS on Azure賞 受賞 8月 Microsoft Cloud Solution Indirect Reseller認定 1月 2018年 事業会社よりシードラウンド増資を実施 2月 Microsoft Partner Network Cloud Platform Gold Competency 取得 9月 Japan Microsoft Partner of the Year 2019 特別賞 受賞 8月 2019年 複数VCよりプレシリーズAラウンド増資を実施 9月 2019年 Japan Microsoft Partner of the Year 2020 App Modernization賞 受賞 LINE Biz Partner Program コミュニケーション部門にてTechnology パートナー 認定 8月 2020年 株式会社エフ・ジェイエンターテイメントワークスと事業提携 複合型施設向けLINEモバイルオーダー FooPass を共同リリース 12月 Japan Microsoft Partner of the Year 2021 OSS on Azure賞 受賞 8月 2021年 LINE株式会社、日本マイクロソフト株式会社と小売業のDX支援を目的とした共同プロ ジェクトに参画 10月 2021年 インフォコム株式会社と資本業務提携実施、インフォコムグループに参画する 2月 2022年 2022年 2月 インフォコム株式会社と資本業 務提携実施、インフォコムグループに参画す る
  4. オルターブースの強み Copyright © Alterbooth Inc. All Rights Reserved. 6 オルターブースは創業以来一貫してクラウドに関する課題解決のご支援をしております。

    特にMicrosoft AzureはMicrosoft MVPが多数在籍する当社にとっての強みとなっております。 当社の特徴はレガシーアプリケーションをクラウドへモダナイズすることです。DXを実現するために 必ず必要なもの、それはクラウドです。そのクラウドで実現できるDXを強力にサポートするのがオル ターブースです。 GitHub Services and Channel Partners LINE Technology Partner
  5. • GitHub Actionsでワークフローを書く際に、必要なactionが見つからない場 合は自作を検討しましょう • 複雑なコマンドをワークフローファイルに書くよりも可読性に優れ、メンテナンスしやすく、 再利用しやすくなります。 • GitHubカスタムアクションを作るにはDockerコンテナを使う方法と JavaScriptで書く方法があります

    • 例として、SORACOM Orbitを使う開発現場での事例を紹介します • 便利なカスタムアクションは是非マーケットプレイスにも公開しましょう いきなりですが、本日のまとめです Copyright © Alterbooth Inc. All Rights Reserved. 8
  6. GitHub Actions GitHub 上で CI/CD のワークフローを構築・実行するための機能です。 “リポジトリへのプッシュ時” や “プルリクエストの作成時” など、GitHub

    での 様々なイベントを起点としたワークフローを作成することができます。 Copyright © Alterbooth Inc. All Rights Reserved.
  7. ワークフローの作り方 ワークフローの定義例 name: sample workflow on: push: branches: [master,staging] jobs:

    build: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v2 - name: build run: npm run build - name: upload assets uses: actions/upload-artifact@v2 with: name: artifacts path: build/artifacts.zip GitHub ActionsではYAML ファイルでワークフローを定 義します。 Copyright © Alterbooth Inc. All Rights Reserved. 11
  8. ワークフローの作り方 ワークフローの定義例 name: sample workflow on: push: branches: [master,staging] jobs:

    build: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v2 - name: build run: npm run build - name: upload assets uses: actions/upload-artifact@v2 with: name: artifacts path: build/artifacts.zip 実行したいことの書き方の一 つは、事前に定義されたアク ションを利用することです。 多くのアクションがGitHub で公開されていますので、そ れを組み合わせることでワー クフローを作成できます。 Copyright © Alterbooth Inc. All Rights Reserved. 12
  9. ワークフローの作り方 ワークフローの定義例 name: sample workflow on: push: branches: [master,staging] jobs:

    build: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v2 - name: build run: npm run build - name: upload assets uses: actions/upload-artifact@v2 with: name: artifacts path: build/artifacts.zip もう1つの書き方は、実行す るコマンドをそのまま記載す るものです。 実行環境(コンテナ)に含まれ ているコマンドをそのまま実 行できるので、必要なコマン ドをインストールするコマン ドを実行したりも出来ます。 Copyright © Alterbooth Inc. All Rights Reserved. 13
  10. パイプライン概要 workflow.yml パイプラインの全体象は、こ のようになります。 Copyright © Alterbooth Inc. All Rights

    Reserved. 19 on: push: branches: [master,staging] jobs: build-and-test: steps: - チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード
  11. パイプライン概要 workflow.yml この辺りはいつも通りなので 問題なし Copyright © Alterbooth Inc. All Rights

    Reserved. 20 on: push: branches: [master,staging] jobs: build-and-test: steps: - チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード
  12. パイプライン概要 workflow.yml on: push: branches: [master,staging] jobs: build-and-test: steps: -

    チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード 今回は、この部分を作ります Copyright © Alterbooth Inc. All Rights Reserved. 21
  13. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm ワークフローを実行する環境 (コンテナ)にsoracom cliを インストールして、cliコマン ドでアップロードをします。 Copyright © Alterbooth Inc. All Rights Reserved. 22
  14. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm soracom cliのインストーラ をダウンロードし、実行しま す Copyright © Alterbooth Inc. All Rights Reserved. 23
  15. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm soracom cliの実行に必要な シークレット等を定義します Copyright © Alterbooth Inc. All Rights Reserved. 24
  16. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm soracom cliでsoralets uploadコマンドを実行し、 アップロードします。 Copyright © Alterbooth Inc. All Rights Reserved. 25
  17. Dockerコンテナ Dockerfile FROM ubuntu:22.04 RUN apt-get update && apt-get install

    -y ¥ curl ¥ jq ¥ && rm -rf /var/lib/apt/lists/* RUN curl -fsSL https://raw.githubusercontent.com/soracom/sora com-cli/master/install.sh | bash COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] まずはDockerfileを作成しま す。 コンテナで最後に実行される コマンド(entrypont)が、こ のアクションの実行内容にな ります。 Copyright © Alterbooth Inc. All Rights Reserved. 29
  18. メタデータファイル action.yml name: 'アクションの名前' description: 'アクションの説明' branding: icon: upload-cloud color:

    blue inputs: soracom_auth_key: description: 'SORACOM AUTH KEY' required: true ・・・ outputs: result: description: 'Result of deployment’ runs: using: 'docker' image: 'Dockerfile’ env: SORACOM_AUTHKEY: ${{ inputs.soracom_auth_key }} action.ymlというメタデータ ファイルを作成します。 このファイルがあることで GitHubはこのリポジトリが カスタムアクションであるこ とを認識します。 Copyright © Alterbooth Inc. All Rights Reserved. 30
  19. メタデータファイル action.yml name: 'アクションの名前' description: 'アクションの説明' branding: icon: upload-cloud color:

    blue inputs: soracom_auth_key: description: 'SORACOM AUTH KEY' required: true ・・・ outputs: result: description: 'Result of deployment’ runs: using: 'docker' image: 'Dockerfile’ env: SORACOM_AUTHKEY: ${{ inputs.soracom_auth_key }} アクションに関するメタデー タを記載します。 マーケットプレイスに登録す るときにこの情報が利用され ます。 Copyright © Alterbooth Inc. All Rights Reserved. 31
  20. メタデータファイル action.yml name: 'アクションの名前' description: 'アクションの説明' branding: icon: upload-cloud color:

    blue inputs: soracom_auth_key: description: 'SORACOM AUTH KEY' required: true ・・・ outputs: result: description: 'Result of deployment’ runs: using: 'docker' image: 'Dockerfile’ env: SORACOM_AUTHKEY: ${{ inputs.soracom_auth_key }} アクションの入力値を記載し ます。 Copyright © Alterbooth Inc. All Rights Reserved. 32
  21. メタデータファイル action.yml name: 'アクションの名前' description: 'アクションの説明' branding: icon: upload-cloud color:

    blue inputs: soracom_auth_key: description: 'SORACOM AUTH KEY' required: true ・・・ outputs: result: description: 'Result of deployment’ runs: using: 'docker' image: 'Dockerfile’ env: SORACOM_AUTHKEY: ${{ inputs.soracom_auth_key }} アクションの出力値を記載し ます。 この値がワークフロー内で ${{ steps.{ステップ ID}.outputs.{出力名 }} という形で参照できます。 Copyright © Alterbooth Inc. All Rights Reserved. 33
  22. メタデータファイル action.yml name: 'アクションの名前' description: 'アクションの説明' branding: icon: upload-cloud color:

    blue inputs: soracom_auth_key: description: 'SORACOM AUTH KEY' required: true ・・・ outputs: result: description: 'Result of deployment’ runs: using: 'docker' image: 'Dockerfile’ env: SORACOM_AUTHKEY: ${{ inputs.soracom_auth_key }} アクションの実行に関するこ とを記述します。 ここではdockerを使うこと、 コンテナイメージは Dockerfileから作ること、環 境変数 SORACOM_AUTHKEYに、 入力値で受け取った soracom_auth_keyを渡す ことが書かれています。 Copyright © Alterbooth Inc. All Rights Reserved. 34
  23. エントリーポイント entrypoint.sh #!/bin/bash if [ -z "SORACOM_AUTHKEY" ] then echo

    "No SORACOM_AUTHKEY environment variable supplied" exit 1 fi … delimiter=“$(openssl rand –hex 8)” echo “result<<${delimiter}” >> “${GITHUB_OUTPUT}” /usr/local/bin/soracom ¥ --soracom-auth-key $SORACOM_AUTHKEY ¥ soralets upload ¥ 2>&1 | tee -a "${GITHUB_OUTPUT}" echo "${delimiter}" >> "${GITHUB_OUTPUT}" exit 0 今回はアクションの本体であ るエントリーポイントをシェ ルスクリプトで準備しました。 goやpythonなど他の言語で 書いても問題ありません。 Copyright © Alterbooth Inc. All Rights Reserved. 35
  24. エントリーポイント entrypoint.sh #!/bin/bash if [ -z "SORACOM_AUTHKEY" ] then echo

    "No SORACOM_AUTHKEY environment variable supplied" exit 1 fi … delimiter=“$(openssl rand –hex 8)” echo “result<<${delimiter}” >> “${GITHUB_OUTPUT}” /usr/local/bin/soracom ¥ --soracom-auth-key $SORACOM_AUTHKEY ¥ soralets upload ¥ 2>&1 | tee -a "${GITHUB_OUTPUT}" echo "${delimiter}" >> "${GITHUB_OUTPUT}" exit 0 入力値をチェックし、エラー の場合は0以外の終了コード で終了させます。 Copyright © Alterbooth Inc. All Rights Reserved. 36
  25. エントリーポイント entrypoint.sh #!/bin/bash if [ -z "SORACOM_AUTHKEY" ] then echo

    "No SORACOM_AUTHKEY environment variable supplied" exit 1 fi … delimiter=“$(openssl rand –hex 8)” echo “result<<${delimiter}” >> “${GITHUB_OUTPUT}” /usr/local/bin/soracom ¥ --soracom-auth-key $SORACOM_AUTHKEY ¥ soralets upload ¥ 2>&1 | tee -a "${GITHUB_OUTPUT}" echo "${delimiter}" >> "${GITHUB_OUTPUT}" exit 0 コマンドを実行し、その結果 を ${GITHUB_OUTPUT}と いう環境変数(自動で設定さ れる)で表されるファイルに 出力します。 ここでは特殊文字のエスケー プと複数行の値のためにデリ ミタを使っていますが、基本 的には output_id=output という形になればOKです。 Copyright © Alterbooth Inc. All Rights Reserved. 37
  26. ワークフローの記述 ワークフローファイル 作成したものをGitHubに プッシュしたら、ワークフ ローをこのように修正します。 リリースを作成した場合はコ ミットIDではなく、リリース 名での指定も可能です。 Copyright ©

    Alterbooth Inc. All Rights Reserved. 38 steps: - Artifactをダウンロード - name: upload uses: your-github-user-name/repository -name@commit-id with: soracom_auth_key: ${{ secrets.AUTH_KEY }} ……
  27. メタデータファイル action.yml name: 'アクションの名前' description: 'アクションの説明' branding: icon: upload-cloud color:

    blue inputs: soracom_auth_key: description: 'SORACOM AUTH KEY' required: true ・・・ outputs: result: description: 'Result of deployment’ runs: using: 'node16' main: 'dist/index.js' アクションの実行に関する部 分以外はDockerの場合と同 様です。 実行環境にはnode12または node16のいずれかを指定し ます。環境変数のマップは指 定不要です。 Copyright © Alterbooth Inc. All Rights Reserved. 40
  28. TypeScriptファイル index.ts import * as core from "@actions/core"; import *

    as soracom from "./soracom"; async function main() { const soraletApi = new soracom.API.SoraletApi(); const authRequest = new soracom.Model.AuthRequest(); authRequest.authKey = core.getInput("soracom_auth_key", { required: true }); …… try { const uploadResult = await soraletApi.uploadSoraletCode( soraletId, requestFile, "application/octet-stream"); core.setOutput("result", uploadResult.body); } catch (error) { core.setFailed(errorMessage); } } 今回はTypeScriptで記述し、 トランスパイルして dist/index.jsを作ります。 Copyright © Alterbooth Inc. All Rights Reserved. 41
  29. TypeScriptファイル index.ts import * as core from "@actions/core"; import *

    as soracom from "./soracom"; async function main() { const soraletApi = new soracom.API.SoraletApi(); const authRequest = new soracom.Model.AuthRequest(); authRequest.authKey = core.getInput("soracom_auth_key", { required: true }); …… try { const uploadResult = await soraletApi.uploadSoraletCode( soraletId, requestFile, "application/octet-stream"); core.setOutput("result", uploadResult.body); } catch (error) { core.setFailed(errorMessage); } } 入出力値を取り扱うには、公 式のツールキットパッケージ である@actions/coreを使い ます。 SORACOM APIを呼び出す コードはswaggerドキュメン トから自動生成したものを使 います。 Copyright © Alterbooth Inc. All Rights Reserved. 42
  30. TypeScriptファイル index.ts import * as core from "@actions/core"; import *

    as soracom from "./soracom"; async function main() { const soraletApi = new soracom.API.SoraletApi(); const authRequest = new soracom.Model.AuthRequest(); authRequest.authKey = core.getInput("soracom_auth_key", { required: true }); …… try { const uploadResult = await soraletApi.uploadSoraletCode( soraletId, requestFile, "application/octet-stream"); core.setOutput("result", uploadResult.body); } catch (error) { core.setFailed(errorMessage); } } 入力値を受け取るには @core.getInput()を使いま す。 Copyright © Alterbooth Inc. All Rights Reserved. 43
  31. TypeScriptファイル index.ts import * as core from "@actions/core"; import *

    as soracom from "./soracom"; async function main() { const soraletApi = new soracom.API.SoraletApi(); const authRequest = new soracom.Model.AuthRequest(); authRequest.authKey = core.getInput("soracom_auth_key", { required: true }); …… try { const uploadResult = await soraletApi.uploadSoraletCode( soraletId, requestFile, "application/octet-stream"); core.setOutput("result", uploadResult.body); } catch (error) { core.setFailed(errorMessage); } } 出力値を渡すには @core.setOutput()を使いま す。 Copyright © Alterbooth Inc. All Rights Reserved. 44
  32. TypeScriptファイル index.ts import * as core from "@actions/core"; import *

    as soracom from "./soracom"; async function main() { const soraletApi = new soracom.API.SoraletApi(); const authRequest = new soracom.Model.AuthRequest(); authRequest.authKey = core.getInput("soracom_auth_key", { required: true }); …… try { const uploadResult = await soraletApi.uploadSoraletCode( soraletId, requestFile, "application/octet-stream"); core.setOutput("result", uploadResult.body); } catch (error) { core.setFailed(errorMessage); } } エラーで終了させるときは @core.setFailed()を使いま す。 Copyright © Alterbooth Inc. All Rights Reserved. 45
  33. ワークフローの記述 ワークフローファイル 作成したものをGitHubに プッシュしたら、ワークフ ローをこのように修正します。 リリースを作成した場合はコ ミットIDではなく、リリース 名での指定も可能です。 Copyright ©

    Alterbooth Inc. All Rights Reserved. 47 steps: - Artifactをダウンロード - name: upload uses: your-github-user-name/repository -name@commit-id with: soracom_auth_key: ${{ secrets.AUTH_KEY }} ……
  34. 比較 Copyright © Alterbooth Inc. All Rights Reserved. 48 入出力

    実行環境 アクションの記述 環境変数 ワークフローで指定した コンテナ コマンドをそのままワー クフローに記述。 実行環境にないコマンド はインストールが必要 コマンド記述 入力は環境変数、出力は ファイル 指定したDockerfileから ビルドしたコンテナ コンテナで実行できるも のなら何でも利用可能 Dockerコンテナ ツールキットパッケージ を利用 GitHubが提供する専用の コンテナ Javascript(typescript) javascript
  35. どの方法を使うといいかの判断フロー Copyright © Alterbooth Inc. All Rights Reserved. 49 コマンドで簡潔に処理が書ける

    JavaScriptで書ける コマンドの準備に多くのステップが 必要/特定の環境が必要 出力を次のアクションで 使う YES NO YES NO ワークフローに コマンドを記述 NO YES Dockerコンテナ javascript YES NO スタート
  36. • [ブログ]SORACOM Orbit向けGitHub Actionを作りました https://zenn.dev/showm001/articles/2023-05-22-01 • [ブログ] GitHubカスタムアクションの作り方(Dockerコンテナ編) https://aadojo.alterbooth.com/entry/2023/06/01/183019 •

    [ブログ] GitHubカスタムアクションの作り方(JavaScript編) https://aadojo.alterbooth.com/entry/2023/05/23/180453 • カスタムアクションについて https://docs.github.com/ja/actions/creating-actions/about-custom- actions • カスタム GitHub アクションを作成して公開する https://learn.microsoft.com/ja-jp/training/modules/create-custom- github-actions/ 参考URL Copyright © Alterbooth Inc. All Rights Reserved. 56