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
2
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
5
AWS ハッカソン体験記~ゲーム開発で得られたAWSスキル紹介~
da01toyo
0
8
UTM (統合脅威管理; FortiGate) on AWSを構築するにはどんなネットワーク設定??
da01toyo
0
37
悪用厳禁! SQLインジェクションやってみた!
da01toyo
0
5
業務効率化したいのに時間がない??OSSとLambdaを用いたツールのスピード開発術
da01toyo
0
8
普通のやり方だとできない!?💦 Amazon Connect x Lambdaのレア?な連携のご紹介!
da01toyo
0
11
CI/CD ツール導入で達成した、開発と運用の協力関係強化とストレスフリーなリリースプロセスの実現に迫る!
da01toyo
0
8
監視オペレータはもういらない?~Amazon Connectを用いたスペシャリスト自動手配システムの内製開発~
da01toyo
0
4
優良な技術サイトを「お気に入り」で終わらせないためのWebアプリケーション開発
da01toyo
0
3
Other Decks in Technology
See All in Technology
Connect 100+を支える技術
kanyamaguc
0
140
作曲家がボカロを使うようにPdMはAIを使え
itotaxi
0
370
Core Audio tapを使ったリアルタイム音声処理のお話
yuta0306
0
150
「良さそう」と「とても良い」の間には 「良さそうだがホンマか」がたくさんある / 2025.07.01 LLM品質Night
smiyawaki0820
1
430
OpenHands🤲にContributeしてみた
kotauchisunsun
1
490
自律的なスケーリング手法FASTにおけるVPoEとしてのアカウンタビリティ / dev-productivity-con-2025
yoshikiiida
0
260
SpringBoot x TestContainerで実現するポータブル自動結合テスト
demaecan
0
110
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
0
290
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
150
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
2
580
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.4k
2025-06-26 GitHub CopilotとAI駆動開発:実践と導入のリアル
fl_kawachi
1
220
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Making Projects Easy
brettharned
116
6.3k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Scaling GitHub
holman
459
140k
Writing Fast Ruby
sferik
628
62k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Thoughts on Productivity
jonyablonski
69
4.7k
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