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
CI / CDって具体的にどう動いている??
Search
toyo-da01
January 24, 2023
Technology
0
5
CI / CDって具体的にどう動いている??
社内勉強会登壇資料。CICDパイプラインをFizzBuzzコードで作成した内容を共有。
toyo-da01
January 24, 2023
Tweet
Share
More Decks by toyo-da01
See All by toyo-da01
Amazon Connect コンタクトフローの大量移管?!
da01toyo
0
24
AWS ハッカソン体験記~ゲーム開発で得られたAWSスキル紹介~
da01toyo
0
11
UTM (統合脅威管理; FortiGate) on AWSを構築するにはどんなネットワーク設定??
da01toyo
0
160
悪用厳禁! SQLインジェクションやってみた!
da01toyo
0
11
業務効率化したいのに時間がない??OSSとLambdaを用いたツールのスピード開発術
da01toyo
0
15
普通のやり方だとできない!?💦 Amazon Connect x Lambdaのレア?な連携のご紹介!
da01toyo
0
16
CI/CD ツール導入で達成した、開発と運用の協力関係強化とストレスフリーなリリースプロセスの実現に迫る!
da01toyo
0
13
監視オペレータはもういらない?~Amazon Connectを用いたスペシャリスト自動手配システムの内製開発~
da01toyo
0
5
優良な技術サイトを「お気に入り」で終わらせないためのWebアプリケーション開発
da01toyo
0
4
Other Decks in Technology
See All in Technology
re:Invent2025 セッションレポ ~Spec-driven development with Kiro~
nrinetcom
PRO
2
170
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
710
Scrum Guide Expansion Pack が示す現代プロダクト開発への補完的視点
sonjin
0
480
ECS_EKS以外の選択肢_ROSA入門_.pdf
masakiokuda
1
120
Next.js 16の新機能 Cache Components について
sutetotanuki
0
210
AI駆動開発ライフサイクル(AI-DLC)の始め方
ryansbcho79
0
300
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.2k
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
430
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
690
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
270
We Have a Design System, Now What?
morganepeng
54
8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
170
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
100
Design in an AI World
tapps
0
110
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Code Review Best Practice
trishagee
74
19k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
76
Designing for Timeless Needs
cassininazir
0
110
What does AI have to do with Human Rights?
axbom
PRO
0
1.9k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Transcript
2023/01/24 社内勉強会 豊岡大地 CI / CDって具体的にどう動いている?? pytestで! aws lambda deploymemtで!
GitHub Actions Pythonのコードで見てみると、、
/7 ―― Agenda ―― 1. 改めて!CI / CDとは? 2. Pythonでpytestを用いたテストコード作成
3. AWS Lambda(s3 キックイベント)に適用 4. デプロイを合わせたCI / CDの構築 ◼ GitHub Actionsの簡単なやり方 ◼ トライ&エラーの説明 ◼ これまで作成したシナリオの紹介 5. まとめ デモ① デモ② 1
/7 ――改めて!CI / CDとは? ―― ◼ CI (継続的インテグレーション; Continuos Integration)
開発者向けの自動化プロセスを表し、アプリケーションへの新しいコード変更が定期的にビルド、テストされ、 共通リポジトリに統合 ◼ CD (継続的デリバリー/デプロイメント; Continuos Delivery/Deployment) 継続的デリバリーは、開発者のアプリケーションへの変更に対して、バグがないか自動的にテスト、リ ポジトリにアップロード 継続的デプロイメントは、開発者による変更をリポジトリから本番環境に自動的にリリースして顧客が 利用できるようにする (図)RedHatから引用 2
/7 ――Pythonでpytestを用いたテストコード作成―― CI / CD を実現するにはテストコードが必要 →Pythonには、主流なテストフレームワークは”unittest”と“pytest”の2種類が主流 ◼ unittest:Pythonの標準ライブラリに入っているテストフレームワーク。 JavaのJunitをベースに作られている。
◼ pytest:pipなどでインストールする必要があるが、簡単に記述ができるテストフレームワーク。 (図)Googleで作成。赤がunittestで、青がpytest 特にこだわりがあるわけではないので、 ”pytest”を採用! 3
/7 ――Pythonでpytestを用いたテストコード作成―― pytestは次のようなルールがあります。 ◼評価側:関数に戻り値を設ける ◼テスト側:スクリプト、テスト関数に”test_”のprefixをつける #fizzbuzz.py(FizzBuzz関数) def fizzbuzz(num): if num
% 15 == 0: return "FizzBuzz" elif num % 3 == 0: return "Fizz" elif num % 5 == 0: return "Buzz" else: return str(num) ※chatGPTに書いてもらいました、、! #test_fizzbuzz.py(テストコード) from fizzbuzz import fizzbuzz def test_1st(): num = 15 assert fizzbuzz(num) == "FizzBuzz" #--------------------------------------------------------- import pytest test_set = [ (1, "1"), (3, "Fizz"), (5, "Buzz"), (15, "FizzBuzz") ] @pytest.mark.parametrize("test_input, expect", test_set) def test_2nd(test_input, expect): assert fizzbuzz(test_input) == expect “”” 3で割り切れる数字は”Fizz” 5で割り切れる数字は”Buzz” 15で割り切れる数字は”FizzBuzz” その他はそのまま文字列で返す “”“ デモ① ターミナル上の動き pytest test_fizzbuzz.py or python –m pytest test_fizzbuzz.py #オプション -s で標準出力込み -v で各テスト別の出力 4
/7 ――AWS Lambda(s3 キックイベント)に適用―― 呼び出しツールの架電メールを判断するLambdaで、テストコードを適用させました! 5
/7 ――AWS Lambda(s3 キックイベント)に適用―― 呼び出しツールの運用に当たり、架電判定メールの調整が3-4か月に一度程度。 →コードでカスタマイズした際に、既存の動きに影響が出ていないか不安 テストフレームワークを使ってみてよかったところ ◼ これまで正常に動作していた関数の担保 ※新規開発よりアップデート作業でより、
効果が感じやすいなと思いました ◼ ステータスを評価する戻り値は必須なので、早期 リターンを意識してネストが深くならない #test_lambda_handler.py def get_args(bucket, key): event = { "Records": [{ "s3": { "bucket": { "name": bucket, }, "object": { "key": key } } }] } return event class TestMailJudge(): def test_1st(self): event = get_args(bucket, key) response = lambda_handler(event, "") assert response["statusCode"] == 200 and response["alertType"] == "word" : : 6
/7 ――デプロイを合わせたCI / CDの構築―― ◼ GitHub Actionsの簡単なやり方 ①GitHubレポジトリのトップディレクトリ配下の、.github/workflows/にymlファイルを追加 ②ymlに環境情報・ジョブ情報を加えていく #pytest.yml
name: Run pytest on: push: branches: - stg workflow_dispatch: permissions: read-all(write-all) jobs: pytest: runs-on: ubuntu-latest defaults: run: shell: bash working-directory: ./pytest (1/2) steps: # Configure - name: Git clone the repository uses: actions/checkout@v3 - name: Set up Python 3.10 uses: actions/setup-python@v4 with: python-version: '3.10’ - name: Install dependencies run: | python -m pip install --upgrade pip pip install pytest # Execute - name: PyTest run: python -m pytest test_fizzbuzz.py --junit-xml pytest.xml (2/2) デモ②;トライ&エラーの説明 テストフレームワークの準備 テストの実施 環境情報① 環境情報② 7