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
AWSとJenkinsおじさん で学んできたCI_CD
Search
Nao Masuya
July 31, 2023
Programming
1
890
AWSとJenkinsおじさん で学んできたCI_CD
2023/7/29開催のJAWS-UG TOHOKUでLTした資料
新卒から3年間ほどCI/CDに関わってきた経験をもとに、JenkinsとAWSについてお話ししました!
Nao Masuya
July 31, 2023
Tweet
Share
More Decks by Nao Masuya
See All by Nao Masuya
AWS TransferFamilyを使ってみた!
masuchoku
0
98
AWSを触ってきた数年間を振り返る!
masuchoku
1
150
Step Functionsと少し仲良くなってみた
masuchoku
1
340
API Gatewayと少し仲良くなってみた!
masuchoku
0
500
スライド作りから LTを楽しもう! エンジョイ、 エンジニアライフ!
masuchoku
1
380
APCのAWS認定マスターたちに聞いてみた
masuchoku
0
120
AppSync入門! GraphQL APIを作ってみた!
masuchoku
3
780
推しメンは Systems Manager
masuchoku
0
95
Other Decks in Programming
See All in Programming
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
250
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.3k
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
420
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
840
良いユニットテストを書こう
mototakatsu
11
3.5k
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
270
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
1.2k
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
910
BEエンジニアがFEの業務をできるようになるまでにやったこと
yoshida_ryushin
0
160
MCP with Cloudflare Workers
yusukebe
2
300
命名をリントする
chiroruxx
1
610
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
420
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
Writing Fast Ruby
sferik
628
61k
RailsConf 2023
tenderlove
29
960
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Why Our Code Smells
bkeepers
PRO
335
57k
Visualization
eitanlees
146
15k
The Language of Interfaces
destraynor
155
24k
Scaling GitHub
holman
459
140k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Being A Developer After 40
akosma
89
590k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
4 Signs Your Business is Dying
shpigford
182
21k
Transcript
AWSとJenkinsおじさん で学んできたCI/CD 7/29 JAWS-UG TOHOKU 升谷直緒
Self Introduction 所属 株式会社 エーピーコミュニケーションズ @apc_tweet
Self Introduction 株式会社 エーピーコミュニケーションズ システム基盤サービス事業本部 クラウド事業部 IaC技術推進部 升谷直緒 業務 •
2020年入社 • SIerとして4年目 • AWS ★ • CI/CDの導入支援 ★ • Webアプリの改善運用 ◦ Java, Camel • リモートワーク
Self Introduction -> @masuchoku 技術ブログ AP Tech Blog -> masuchoku
Self Introduction 升谷直緒 / Masuya Nao 神奈川県出身 趣味 • ウインドサーフィン
• SUP • マスキングテープ集め 東北との関わり • 東北にきたのは2回目です! ◦ 秋田の国際教養大学に1度行きました
JAWS 参加経験 • 名古屋 ◦ 1度 LTしました ◦ ハンズオンにも何度か参加! 立花さんのRekognitionハンズ
オンにも参加! • クラウド女子会 ◦ ハンズオンに1度参加 JAWSに何度か参加してみて • 社外の人と関われる貴重な機会 • 普段使わないAWSサービスに触れる • アウトプットと向き合う 弊社社員登壇予定です • 8/5 新潟JAWS • 8/19 佐賀JAWS
Table of contents 1 2 4 3 CI/CD 環境 CI/CD
を AWS に AWS と Jenkins pipeline Summary
1.1 CI/CDについて ビルドサーバー デプロイサーバー 構成管理ツール CI/CD ツール テストツール
1.1 CI/CD について ビルドサーバー デプロイサーバー 1. アプリソースコード に変更はありますか? 2. アプリソースコード
に変更を確認したので ビルドしましょう 3. アプリソースコードをチェックアウト 5. アプリソースコード のチェック 6. ビルド成果物どうぞ! 4. ビルド致します CI CD 構成管理ツール CI/CD ツール テストツール
1.2 Jenkinsおじさんとの出会い 新卒で初めて関わったお仕事がCI/CD Jenkinsを使ってCI/CDをコードで定義するパイプラインを作成 開発っぽいコードを書く業務ができたことに喜びを覚えた 一方、Jenkinsパイプラインはgroovy(Javaの仲間)言語を使って定義 するため、 yml記法を使うGitHub ActionsやAWS CodeSeriesの方が分かり易く
ホットでもある ただ、オフライン環境でも使えてプラグイン祭りのJenkinsはなんだ かんだ守備範囲が広く使い勝手がよく、業務で採用されていた そんなこんなで私は毎日Jenkinsおじさんと戦うことになった
1.3 今回のCI/CDについて ビルドサーバー デプロイサーバー 1. アプリソースコード に変更はありますか? 2. アプリソースコード に変更を確認したので
ビルドしましょう 3. Jenkinsパイプラインや アプリソースコードをチェックアウト 5. アプリソースコード のチェック 6. ビルド成果物どうぞ! 4. ビルド致します
1.4 CI/CD 環境をコンテナ化 LDAP docker-networkで コンテナ間通信 オンプレ サーバー 仮想 サーバー
さまざまな 環境にCI/CDの 導入ができる! クラウド
Table of contents 1 2 4 3 CI/CD 環境 CI/CD
を AWS に AWS と Jenkins pipeline Summary
2.1 CI/CD 環境を AWS に LDAP デプロイ サーバー CICD環境 ビルド環境
コンテナ資材 ECR ビ ル ド 資 材 を 取 り に 行 く どこかに デプロイ S3 ECR パイプラインや ビルド資材を取りに行く
Table of contents 1 2 4 3 CI/CD 環境 CI/CD
を AWS に AWS と Jenkins pipeline Summary
3.1 Jenkins pipeline の書き方 pipeline { agent { label 'ビルドサーバー'
} environment { ECR_PREFIX = "" AWS_DEFAULT_REGION = "" } stage ('1. GitからCheckout'){ } stage ('2. Build'){ } stage ('3. Test'){ } stage ('4. Deploy'){ } }
3.2 Jenkins パラメーター Jenkins側でもジョブ実行時に パラメーターとして変数を定義し ジョブを実行することが可能!
3.3 AWS ECRにログインするgroovyの紹介 // ログイン stage ('Login ECR'){ withCredentials([usernamePassword( credentialsId:
'ECRUser', passwordVariable: 'AWS_SECRET_ACCESS_KEY', usernameVariable: 'AWS_ACCESS_KEY_ID')]) { sh ''' CMD=`aws ecr get-login --no-include-email --region <リージョン>` $CMD ''' } } aws ecr get-login-password が推奨されているみたいです! 認証情報を登録しておく ビルド環境 コンテナ資材 ECR
3.4 ECRからイメージをpullするgroovyの紹介 // ECRから対象のイメージを取得 stage ('Image pull from ECR'){ def
targets = COMPOSE_LISTS.split("\n") targets.each { target -> echo """pull ${target}""" sh """ docker pull ${ECR_PREFIX}${target}:${TAG} docker tag ${ECR_PREFIX}${target}:${TAG} ${target}:${TAG} """ } } ビルド環境 コンテナ資材 ECR
3.5 ECRへイメージをpushするgroovyの紹介 // ECRから対象のイメージを取得 stage ('Image pull from ECR'){ def
targets = COMPOSE_LISTS.split("\n") targets.each { target -> echo """pull ${target}""" sh """ docker tag ${target}:${TAG} ${ECR_PREFIX}${target}:${TAG} docker push ${ECR_PREFIX}${target}:${TAG} """ } } ビルド環境 コンテナ資材 ECR
3.6 S3へアップロードするgroovyの紹介 // イメージをS3へアップロード stage ('Push Images To S3'){ def
targets = COMPOSE_LISTS.split("\n") def AWS_DEFAULT_REGION = <リージョン> targets.each { target -> withCredentials([usernamePassword( credentialsId: 'AWS_User', passwordVariable: 'AWS_SECRET_ACCESS_KEY', usernameVariable: 'AWS_ACCESS_KEY_ID')]) { sh """ aws configure set aws_access_key_id ${AWS_ACCESS_KEY_ID} aws configure set aws_secret_access_key ${AWS_SECRET_ACCESS_KEY} aws configure set default.region ${AWS_DEFAULT_REGION} aws s3 cp ./ s3://<S3バケット名>/${target} rm ~/.aws/config ~/.aws/credentials """ } } } ビルド環境 コンテナ資材 ECR
Table of contents 1 2 4 3 CI/CD 環境 CI/CD
を AWS に AWS と Jenkins pipeline Summary
Summary • コンテナ化のメリット ◦ CI/CD環境をOSSで組み合わせコンテナ化することでGitHubActions, AWS Code Seriesへのアクセスが担保できない環境でのCI/CDが実現 • AWSの手軽さ
◦ コンテナ化とクラウドの組み合わせで手軽にCI/CD環境の構築・削除が可能 • Jenkinsパイプラインにチャレンジ ◦ YAML方式の方が読みやすい・書きやすいといえど、groovyはシンプルに記載 が可能のため開発者でなくても0からの作成が可能! • 散々Jenkinsを紹介しておきながら... Jenkins -> Code Pipeline への移行も勉強中!
ありがとうございました ^^/