Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Git 未経験者 が GitHub Actions で CICD できるようになるまて...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mackey0225
November 27, 2022
Programming
1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Git 未経験者 が GitHub Actions で CICD できるようになるまで / 20221127-JJUGCCC-2022-Fall-Git-beginner-built-CICD-pipeline-with-GitHubActions
mackey0225
November 27, 2022
More Decks by mackey0225
See All by mackey0225
人生初のマネージャーというロールを 経験して得たもの・失ったもの / Reflections on My First Manager Role
mackey0225
0
840
Minecraft の MOD 開発を通して 子どもと一緒に考えるシステム開発について / Thinking About System Development with Children #jjug_ccc
mackey0225
0
100
「なんか〇〇ライブラリで脆弱性あるみたいなんだけど。。。」から始める脆弱性対応 / First Steps in Vulnerability Response
mackey0225
2
180
RSAが破られる前に知っておきたい 耐量子計算機暗号(PQC)入門 / Intro to PQC: Preparing for the Post-RSA Era
mackey0225
3
230
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
640
JEP 496 と JEP 497 から学ぶ耐量子計算機暗号入門 / Learning Post-Quantum Crypto Basics from JEP 496 & 497
mackey0225
2
1.2k
「社内LT会」を1年続けてみた! / Our Year-Long Journey of Internal Lightning Talks
mackey0225
1
240
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
3.6k
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
1.5k
Other Decks in Programming
See All in Programming
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
100
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
380
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
660
不幸な GC
chencmd
0
880
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
160
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
110
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
9
970
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
410
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
Git 未経験者が GitHub Actions で CI/CD できるようになるまで Git 未経験者が GitHub
Actions で CI/CD できるようになるまで 2022-11-27 JJUG CCC 2022 Fall BABYJOB 株式会社 浅野正貴(@mackey0225)
Git 未経験者が GitHub Actions で CI/CD できるようになるまで このセッションについて 【内容】 Git
未経験者が GitHub Actions を用いた CI/CD を実現していく中で 得られた成果や苦労、学び・気づきについてお話します Javaについては、ほとんど登場しないです。。。スミマセン。。。
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 目次 • 自己紹介
• 実施前の状態 ◦ 構成や改善点 ◦ GitHub Actions について • 実施したこと • 実施後の状態 • 実施したうえでの学び・気づき
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 自己紹介 名前: 浅野 正貴
所属: BABY JOB 株式会社(2022-06 入社) 役割: Javaエンジニア Twitter: @mackey0225 GitHub: @mackey0225 経歴: - 前職: カタログ通販会社 社内SE を 8年ほど 趣味: - 2歳の息子と遊ぶこと
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 前提の説明 【前提について】 言語
: Java フレームワーク : Spring Boot ビルドツール : Gradle 環境 : AWS Elastic Beanstalk 本番環境と検証環境の2環境 リリース周期 : 基本として1週間 【着手前の状態】 • テストとビルドまでは自動化済み ◦ ビルド後は、人力・手動でデプロイ実施 →今回は検証環境へのデプロイのみを自動化 ◦ →テストのみで、静的解析・フォーマッターなどは未適用 • 私自身が Git / GitHub を使ったチーム開発が初
Git 未経験者が GitHub Actions で CI/CD できるようになるまで GitHub Actions について
概要レベルですが • GitHub が提供している CI/CD プラットフォーム • YAML で定義 • GitHub 上の様々なイベントをトリガーにすることが可能 ◦ 手動実行 や スケジュール(cron)も可能 • 利用料金は ◦ パブリックリポジトリは無料(標準ランナー) ◦ プライベートリポジトリはプランに応じた月単位の無料枠がある ▪ GitHub Free : 2,000分 ▪ GitHub Pro : 3,000分
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 取り組んだこと 大きくは以下の2つ 1.
AWS Elastic Beanstalk へのデプロイ処理の実装 2. 静的解析ツール・コードフォーマッターの選定と適用
Git 未経験者が GitHub Actions で CI/CD できるようになるまで AWS Elastic Beanstalk
へのデプロイ実装 【結論】 今回、einaregilsson/beanstalk-deploy を使用した 【選んだ理由】 Elastic Beanstalk を操作する Action で 公式なものは無かった 現状の運用に沿っているもので、利用例が多いものを選んだ (コンテナであれば、docker や AWS が提供している Action はある) 【利用方法】 次ページにて簡単に紹介 【einaregilsson/beanstalk-deploy】 https://github.com/marketplace/actions/beanstalk-deploy https://github.com/einaregilsson/beanstalk-deploy
Git 未経験者が GitHub Actions で CI/CD できるようになるまで Elastic Beanstalk へのデプロイ実装
<略:検証環境向けの .war ビルドを実行> - name: Build zip uses: gradle/
[email protected]
with: arguments: | buildZip - name: Deploy to Elastic Beanstalk uses: einaregilsson/beanstalk-deploy@v20 with: aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} application_name: application_name environment_name: environment_name version_label: ${{ env.VERSION_LABEL_NAME }} region: ap-northeast-1 deployment_package: build/distributions/release.zip <略>
Git 未経験者が GitHub Actions で CI/CD できるようになるまで Elastic Beanstalk へのデプロイ実装
<略:検証環境向けの .war ビルドを実行> - name: Build zip uses: gradle/
[email protected]
with: arguments: | buildZip - name: Deploy to Elastic Beanstalk uses: einaregilsson/beanstalk-deploy@v20 with: aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} application_name: application_name environment_name: environment_name version_label: ${{ env.VERSION_LABEL_NAME }} region: ap-northeast-1 deployment_package: build/distributions/release.zip <略> 実行前に、デプロイする資源をビルドし Zip化 している。 その際、プロジェクトの build.gradle に定義したタスクを呼び出している。
Git 未経験者が GitHub Actions で CI/CD できるようになるまで Elastic Beanstalk へのデプロイ実装
<略:検証環境向けの .war ビルドを実行> - name: Build zip uses: gradle/
[email protected]
with: arguments: | buildZip - name: Deploy to Elastic Beanstalk uses: einaregilsson/beanstalk-deploy@v20 with: aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} application_name: application_name environment_name: environment_name version_label: ${{ env.VERSION_LABEL_NAME }} region: ap-northeast-1 deployment_package: build/distributions/release.zip <略> 先程の「beanstalk-deploy」を呼び出している。 また、AWS にアクセスするためのクレデンシャルは GitHub の「Settings > Secrets > Actions」で管理
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析ツール・コードフォーマッターの適用 【結論】 •
静的解析ツール : SpotBugs、 PMD • コードフォーマッター : Spotless 【選んだ理由】 Gradle プラグインがサポートされているかどうかで選定 ひとまずのスモールスタートを行うため、代表的なツールを導入 【利用方法】 次ページにて簡単に紹介 【SpotBugs】 https://spotbugs.github.io/ 【PMD】 https://pmd.github.io/ 【Spotless】 https://github.com/diffplug/spotless
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【静的解析】 <略>
- name: PmdMain run: ./gradlew pmdMain - name: PmdTest run: ./gradlew pmdTest - name: SpotbugsMain run: ./gradlew spotbugsMain - name: SpotbugsTest run: ./gradlew spotbugsTest
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【静的解析】 <略>
- name: PmdMain run: ./gradlew pmdMain - name: PmdTest run: ./gradlew pmdTest - name: SpotbugsMain run: ./gradlew spotbugsMain - name: SpotbugsTest run: ./gradlew spotbugsTest build.gradle に定義した各ツールのタスクを Gradle Wrapper スクリプトで呼び出す。 ※各ツールの Gradle の設定については割愛。
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【静的解析】 <略>
- name: PmdMain run: ./gradlew pmdMain - name: PmdTest run: ./gradlew pmdTest - name: SpotbugsMain run: ./gradlew spotbugsMain - name: SpotbugsTest run: ./gradlew spotbugsTest 【参考情報】 PMD は GitHub Action に公式の Action があるので、手軽に利用することも可能 (各開発者端末でも同じルールセットでチェックさせたかったため、今回は使用していない) 【GitHub Action for PMD】 https://github.com/marketplace/actions/pmd
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【コードフォーマッター】 <略>
- name: Spotless Apply run: | ./gradlew spotlessApply - name: Check for modified files in Spotless id: git-check run: echo "MODIFIED_IN_SPOTLESS=$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi)" >> $GITHUB_ENV - name: Push in Modified File with Spotless if: env.MODIFIED_IN_SPOTLESS == 'true' run: | git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git status git add . git commit -m "Formatted Java source code." git push origin HEAD
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【コードフォーマッター】 <略>
- name: Spotless Apply run: | ./gradlew spotlessApply - name: Check for modified files in Spotless id: git-check run: echo "MODIFIED_IN_SPOTLESS=$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi)" >> $GITHUB_ENV - name: Push in Modified File with Spotless if: env.MODIFIED_IN_SPOTLESS == 'true' run: | git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git status git add . git commit -m "Formatted Java source code." git push origin HEAD build.gradle に定義した Spotless のタスクを呼び出す
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【コードフォーマッター】 <略>
- name: Spotless Apply run: | ./gradlew spotlessApply - name: Check for modified files in Spotless id: git-check run: echo "MODIFIED_IN_SPOTLESS=$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi)" >> $GITHUB_ENV - name: Push in Modified File with Spotless if: env.MODIFIED_IN_SPOTLESS == 'true' run: | git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git status git add . git commit -m "Formatted Java source code." git push origin HEAD Spotless を適用した結果をプッシュするため、 差分の有無を $GITHUB_ENV に変数 MODIFIED_IN_SPOTLESS を追加し設定する
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 静的解析・コードフォーマッターの適用 【コードフォーマッター】 <略>
- name: Spotless Apply run: | ./gradlew spotlessApply - name: Check for modified files in Spotless id: git-check run: echo "MODIFIED_IN_SPOTLESS=$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi)" >> $GITHUB_ENV - name: Push in Modified File with Spotless if: env.MODIFIED_IN_SPOTLESS == 'true' run: | git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git status git add . git commit -m "Formatted Java source code." git push origin HEAD 差分があれば、プッシュする プッシュ時は今回 GitHub Action でコミットしたように見せるため、 ユーザー情報を下記のように設定した
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 効果 【デプロイ自動化】 •
週次でのデプロイ作業 ◦ 作業工数削減 週あたり 30分 〜 1時間 • 必要時の検証環境利用 ◦ 属人化解消 デザイナーメンバでも検証環境にデプロイが可能 【静的解析・コードフォーマッター】 • 静的解析結果の出力 ◦ 現状の課題や懸念点の創出 • コードの整形 ◦ 不要な import の削除 ◦ import の順番の統一化
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 実施していく中での気付き・学び 大きくは以下の4点 •
Git/GitHub の学習 • 実装・テストする上での注意 • レビュー時の観点 • 運用開始に向けて開発組織への周知
Git 未経験者が GitHub Actions で CI/CD できるようになるまで Git/GitHub の学習 【結論】
「習うより慣れろ」 【背景・理由】 • すべての機能を理解する必要はない ◦ 本当に必要なものは案外少ない • 開発からリリースまでの1サイクル で必要な機能を最低限押さえる ◦ 組織やプロダクト ごとに ブランチ戦略 や リリース手順 が違う ◦ 目的に立ち返ると「CI/CD の実現」 ◦ もし Git 未導入であれば ブランチ戦略の検討 から始める
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 実装・テスト 【結論①】 本番環境
や 実開発作業に影響を与えないよう、 「ダミー の リポジトリ・ブランチ を作成」 する 【背景・理由】 • 開発への影響を与えず、自由に触れる環境が必要 ◦ 稼働中のワークフローが存在していた ◦ 意図せず動作した際のリスクを下げたかった ◦ 一方、いろんなパターンで挙動の確認は必要だった
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 実装・テスト 【結論②】 月次の利用枠を枯渇しないよう、
「不要な JOB はコメントアウト」 して対応 【背景・理由】 • 上限に達し、開発で使用しているワークフローが実行できなくなった ◦ その際は必要な分を課金した 【参考】 課金は処理のトータル時間ではなく、ジョブ単位で切り上げられる →仮に 1ワークフロー で 1秒のジョブ を 50回 呼ぶ →ワークフローは1分以内に終了 →利用としては 1分 ではなく 50分 となる
Git 未経験者が GitHub Actions で CI/CD できるようになるまで レビュー 【結論】 最低限の観点として
• セキュリティ上の問題の有無 • クレデンシャル情報はどのように保持しているか など • 使用した Action の妥当性 • Action が活きているか(定期的にバージョンアップの有無) • 適切なバージョンを指定しているか など 【背景・理由】 • 事故につながらない状態であれば良しとする • 時間の経過とともにゴールが変わることもあるので BEST を追い求めない ◦ 誰にとっても保守しやすいかどうかのほうが重要
Git 未経験者が GitHub Actions で CI/CD できるようになるまで 運用開始に向けて開発組織への周知 【結論】 •
「細かく」「事前に」「何度も」を心がける • 各メンバーの作業や業務がどう変わるかを意識する 【背景・理由】 • 大前提として 開発体験の劣化 は避ける ◦ 適用前に実環境でテストを行うため利用調整があった ◦ 適用後の運用がどう変わるかまで考える必要がある
Git 未経験者が GitHub Actions で CI/CD できるようになるまで まとめ • GitやGitHubの習熟は習うより慣れろ
◦ チームで必要な最低限必要な機能は限られている(はず) • ブランチ戦略とその運用が重要 ◦ トリガーの条件の決定に必要となる ◦ チームへの適用時の影響範囲確認が容易になる • 挙動の確認はダミー(ブランチ・リポジトリ)を作って実施 ◦ 本番への影響を避けるため、ダミーで壁打ち ▪ 壁打ちする際は、利用枠の枯渇に注意 • 稼働開始に際してはメンバとの緊密なコミュニケーションが必要 ◦ あくまでもチームの開発体験向上が目的 ◦ 無理に開始してコケると、次の一手が出しづらくなる
Git 未経験者が GitHub Actions で CI/CD できるようになるまで おしまい 28