Slide 1

Slide 1 text

AWSとJenkinsおじさん で学んできたCI/CD 7/29 JAWS-UG TOHOKU 升谷直緒

Slide 2

Slide 2 text

Self Introduction 所属 株式会社 エーピーコミュニケーションズ @apc_tweet

Slide 3

Slide 3 text

Self Introduction 株式会社 エーピーコミュニケーションズ システム基盤サービス事業本部 クラウド事業部 IaC技術推進部 升谷直緒 業務 ● 2020年入社 ● SIerとして4年目 ● AWS ★ ● CI/CDの導入支援 ★ ● Webアプリの改善運用 ○ Java, Camel ● リモートワーク

Slide 4

Slide 4 text

Self Introduction -> @masuchoku 技術ブログ AP Tech Blog -> masuchoku

Slide 5

Slide 5 text

Self Introduction 升谷直緒 / Masuya Nao 神奈川県出身 趣味 ● ウインドサーフィン ● SUP ● マスキングテープ集め 東北との関わり ● 東北にきたのは2回目です! ○ 秋田の国際教養大学に1度行きました

Slide 6

Slide 6 text

JAWS 参加経験 ● 名古屋 ○ 1度 LTしました ○ ハンズオンにも何度か参加! 立花さんのRekognitionハンズ オンにも参加! ● クラウド女子会 ○ ハンズオンに1度参加 JAWSに何度か参加してみて ● 社外の人と関われる貴重な機会 ● 普段使わないAWSサービスに触れる ● アウトプットと向き合う 弊社社員登壇予定です ● 8/5 新潟JAWS ● 8/19 佐賀JAWS

Slide 7

Slide 7 text

Table of contents 1 2 4 3 CI/CD 環境 CI/CD を AWS に AWS と Jenkins pipeline Summary

Slide 8

Slide 8 text

1.1 CI/CDについて ビルドサーバー デプロイサーバー 構成管理ツール CI/CD ツール テストツール

Slide 9

Slide 9 text

1.1 CI/CD について ビルドサーバー デプロイサーバー 1. アプリソースコード に変更はありますか? 2. アプリソースコード に変更を確認したので ビルドしましょう 3. アプリソースコードをチェックアウト 5. アプリソースコード のチェック 6. ビルド成果物どうぞ! 4. ビルド致します CI CD 構成管理ツール CI/CD ツール テストツール

Slide 10

Slide 10 text

1.2 Jenkinsおじさんとの出会い 新卒で初めて関わったお仕事がCI/CD Jenkinsを使ってCI/CDをコードで定義するパイプラインを作成 開発っぽいコードを書く業務ができたことに喜びを覚えた 一方、Jenkinsパイプラインはgroovy(Javaの仲間)言語を使って定義 するため、 yml記法を使うGitHub ActionsやAWS CodeSeriesの方が分かり易く ホットでもある ただ、オフライン環境でも使えてプラグイン祭りのJenkinsはなんだ かんだ守備範囲が広く使い勝手がよく、業務で採用されていた そんなこんなで私は毎日Jenkinsおじさんと戦うことになった

Slide 11

Slide 11 text

1.3 今回のCI/CDについて ビルドサーバー デプロイサーバー 1. アプリソースコード に変更はありますか? 2. アプリソースコード に変更を確認したので ビルドしましょう 3. Jenkinsパイプラインや アプリソースコードをチェックアウト 5. アプリソースコード のチェック 6. ビルド成果物どうぞ! 4. ビルド致します

Slide 12

Slide 12 text

1.4 CI/CD 環境をコンテナ化 LDAP docker-networkで コンテナ間通信 オンプレ サーバー 仮想 サーバー さまざまな 環境にCI/CDの 導入ができる! クラウド

Slide 13

Slide 13 text

Table of contents 1 2 4 3 CI/CD 環境 CI/CD を AWS に AWS と Jenkins pipeline Summary

Slide 14

Slide 14 text

2.1 CI/CD 環境を AWS に LDAP デプロイ サーバー CICD環境 ビルド環境 コンテナ資材 ECR ビ ル ド 資 材 を 取 り に 行 く どこかに デプロイ S3 ECR パイプラインや ビルド資材を取りに行く

Slide 15

Slide 15 text

Table of contents 1 2 4 3 CI/CD 環境 CI/CD を AWS に AWS と Jenkins pipeline Summary

Slide 16

Slide 16 text

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'){ } }

Slide 17

Slide 17 text

3.2 Jenkins パラメーター Jenkins側でもジョブ実行時に パラメーターとして変数を定義し ジョブを実行することが可能!

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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:///${target} rm ~/.aws/config ~/.aws/credentials """ } } } ビルド環境 コンテナ資材 ECR

Slide 22

Slide 22 text

Table of contents 1 2 4 3 CI/CD 環境 CI/CD を AWS に AWS と Jenkins pipeline Summary

Slide 23

Slide 23 text

Summary ● コンテナ化のメリット ○ CI/CD環境をOSSで組み合わせコンテナ化することでGitHubActions, AWS Code Seriesへのアクセスが担保できない環境でのCI/CDが実現 ● AWSの手軽さ ○ コンテナ化とクラウドの組み合わせで手軽にCI/CD環境の構築・削除が可能 ● Jenkinsパイプラインにチャレンジ ○ YAML方式の方が読みやすい・書きやすいといえど、groovyはシンプルに記載 が可能のため開発者でなくても0からの作成が可能! ● 散々Jenkinsを紹介しておきながら... Jenkins -> Code Pipeline への移行も勉強中!

Slide 24

Slide 24 text

ありがとうございました ^^/