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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
toyo-da01
January 24, 2023
Technology
12
0
Share
CI / CDって具体的にどう動いている??
社内勉強会登壇資料。CICDパイプラインをFizzBuzzコードで作成した内容を共有。
toyo-da01
January 24, 2023
More Decks by toyo-da01
See All by toyo-da01
AWSからLANケーブルへ!パブリッククラウドエンジニアのホームラボ挑戦
da01toyo
0
12
Amazon Connect コンタクトフローの大量移管?!
da01toyo
0
41
AWS ハッカソン体験記~ゲーム開発で得られたAWSスキル紹介~
da01toyo
0
21
UTM (統合脅威管理; FortiGate) on AWSを構築するにはどんなネットワーク設定??
da01toyo
0
260
悪用厳禁! SQLインジェクションやってみた!
da01toyo
0
16
業務効率化したいのに時間がない??OSSとLambdaを用いたツールのスピード開発術
da01toyo
0
23
普通のやり方だとできない!?💦 Amazon Connect x Lambdaのレア?な連携のご紹介!
da01toyo
0
24
CI/CD ツール導入で達成した、開発と運用の協力関係強化とストレスフリーなリリースプロセスの実現に迫る!
da01toyo
0
20
監視オペレータはもういらない?~Amazon Connectを用いたスペシャリスト自動手配システムの内製開発~
da01toyo
0
11
Other Decks in Technology
See All in Technology
long-running-tasks
cipepser
2
440
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
組織の中で自分を経営する技術
shoota
0
220
イベントで大活躍する電子ペーパー名札 〜その3〜 / ビジュアルプログラミングIoTLT vol.23
you
PRO
0
160
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
250
コードレビューを制するチームがソフトウェアデリバリーのフローを制す / Beyond Code Review: Distributing Its Responsibilities Across the SDLC
mtx2s
1
410
Claude Codeを組織で使いこなす— サーバサイドAIエージェント運用の実践知
techtekt
PRO
0
120
AIが変えた"品質の守り方"
kkakizaki
13
5.4k
Strands Agents超入門
kintotechdev
1
140
シンデレラなんかになりたくない!ガラスの靴が割れた時代にどう歩く?
nomizone
0
220
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
290
Kaggle未経験社員をメダリストに育てる「AIドラゴン桜」
lycorptech_jp
PRO
0
650
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Google's AI Overviews - The New Search
badams
0
1k
Crafting Experiences
bethany
1
160
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
120
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
180
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Marketing to machines
jonoalderson
1
5.3k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
140
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Tell your own story through comics
letsgokoyo
1
930
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
180
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