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
3
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
12
AWS ハッカソン体験記~ゲーム開発で得られたAWSスキル紹介~
da01toyo
0
10
UTM (統合脅威管理; FortiGate) on AWSを構築するにはどんなネットワーク設定??
da01toyo
0
57
悪用厳禁! SQLインジェクションやってみた!
da01toyo
0
5
業務効率化したいのに時間がない??OSSとLambdaを用いたツールのスピード開発術
da01toyo
0
12
普通のやり方だとできない!?💦 Amazon Connect x Lambdaのレア?な連携のご紹介!
da01toyo
0
15
CI/CD ツール導入で達成した、開発と運用の協力関係強化とストレスフリーなリリースプロセスの実現に迫る!
da01toyo
0
10
監視オペレータはもういらない?~Amazon Connectを用いたスペシャリスト自動手配システムの内製開発~
da01toyo
0
4
優良な技術サイトを「お気に入り」で終わらせないためのWebアプリケーション開発
da01toyo
0
3
Other Decks in Technology
See All in Technology
反脆弱性(アンチフラジャイル)とデータ基盤構築
cuebic9bic
3
180
OPENLOGI Company Profile for engineer
hr01
1
38k
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
2.6k
Claude CodeでKiroの仕様駆動開発を実現させるには...
gotalab555
3
1k
ファッションコーディネートアプリ「WEAR」における、Vertex AI Vector Searchを利用したレコメンド機能の開発・運用で得られたノウハウの紹介
zozotech
PRO
0
210
Amazon Q Developerを活用したアーキテクチャのリファクタリング
k1nakayama
2
210
MCP認可の現在地と自律型エージェント対応に向けた課題 / MCP Authorization Today and Challenges to Support Autonomous Agents
yokawasa
5
2.3k
猫でもわかるQ_CLI(CDK開発編)+ちょっとだけKiro
kentapapa
0
3.4k
生成AIによるソフトウェア開発の収束地点 - Hack Fes 2025
vaaaaanquish
15
8.3k
形式手法特論:位相空間としての並行プログラミング #kernelvm / Kernel VM Study Tokyo 18th
ytaka23
3
1.3k
Google Cloud で学ぶデータエンジニアリング入門 2025年版 #GoogleCloudNext / 20250805
kazaneya
PRO
20
4.9k
家族の思い出を形にする 〜 1秒動画の生成を支えるインフラアーキテクチャ
ojima_h
3
1k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
How to train your dragon (web standard)
notwaldorf
96
6.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
Designing Experiences People Love
moore
142
24k
RailsConf 2023
tenderlove
30
1.2k
Six Lessons from altMBA
skipperchong
28
3.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
How STYLIGHT went responsive
nonsquared
100
5.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