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
950
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
120
AWSを触ってきた数年間を振り返る!
masuchoku
1
170
Step Functionsと少し仲良くなってみた
masuchoku
1
360
API Gatewayと少し仲良くなってみた!
masuchoku
0
550
スライド作りから LTを楽しもう! エンジョイ、 エンジニアライフ!
masuchoku
1
400
APCのAWS認定マスターたちに聞いてみた
masuchoku
0
130
AppSync入門! GraphQL APIを作ってみた!
masuchoku
3
800
推しメンは Systems Manager
masuchoku
0
98
Other Decks in Programming
See All in Programming
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
520
Formの複雑さに立ち向かう
bmthd
1
850
チームリードになって変わったこと
isaka1022
0
200
もう僕は OpenAPI を書きたくない
sgash708
5
1.8k
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
320
『GO』アプリ データ基盤のログ収集システムコスト削減
mot_techtalk
0
120
定理証明プラットフォーム lapisla.net
abap34
1
1.8k
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
110
DROBEの生成AI活用事例 with AWS
ippey
0
130
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
130
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.4k
color-scheme: light dark; を完全に理解する
uhyo
5
390
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Agile that works and the tools we love
rasmusluckow
328
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
A Tale of Four Properties
chriscoyier
158
23k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
YesSQL, Process and Tooling at Scale
rocio
172
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
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 への移行も勉強中!
ありがとうございました ^^/