Upload
amazon-web-services-japan
View
6.228
Download
2
Embed Size (px)
Citation preview
【AWS Black Belt Online Seminar】AWS上のJenkins活用方法
アマゾンウェブサービスジャパン株式会社
トレーニングデリバリマネージャ 大村 幸敬
2017.01.24
自己紹介
• 大村 幸敬 (Yukitaka Ohmura)– トレーニングデリバリマネージャ
• トレーニングの実施とトレーニングコース開発– DevOps Engineering on AWS
– Developing on AWS
– Architecting on AWS
– Data Warehousing on AWS など
– 経歴:SIerで自社サービスの開発・運用金融系のインフラPM
– 好きなもの:アウトドアと日本酒と娘^2
– 好きなサービス:AWS CLI
2
AWS Black Belt Online Seminar とはAWSJのTechメンバがAWSに関する様々な事を紹介するオンラインセミナーです
【火曜 12:00~13:00】主にAWSのソリューションや業界カットでの使いどころなどを紹介(例:IoT、金融業界向け etc.)
【水曜 18:00~19:00】主にAWSサービスの紹介やアップデートの解説(例:EC2、RDS、Lambda etc.)
※開催曜日と時間帯は変更となる場合がございます。最新の情報は下記をご確認下さい。
オンラインセミナーのスケジュール&申し込みサイト– https://aws.amazon.com/jp/about-aws/events/webinars/
3
内容についての注意点
• 本資料では2017年1月24日時点のサービス内容および価格についてご説明しています。最新の情報はAWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。
• 資料作成には十分注意しておりますが、資料内の価格とAWS公式ウェブサイト記載の価格に相違があった場合、AWS公式ウェブサイトの価格を優先とさせていただきます。
• 価格は税抜表記となっています。日本居住者のお客様が東京リージョンを使用する場合、別途消費税をご請求させていただきます。
• AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to change in accordance with the AWS Customer Agreement available at http://aws.amazon.com/agreement/. Any pricing information included in this document is provided only as an estimate of usage charges for AWS services based on certain information that you have provided. Monthly charges will be based on your actual use of AWS services, and may vary from the estimates provided.
4
Agenda
1. Jenkinsで何ができるのか?
2. Jenkins サーバ(Master)の構成
3. ビルド処理のオフロード
4. 目的に合わせたパイプライン
5
今回の内容
• 話すこと– JenkinsをAWS上で使用する際のポイント
– JenkinsとAWSサービスとの連携• AWS CodeCommit / AWS CodeBuild/ AWS CodeDeploy / AWS CodePipeline
• AWS CloudFormation / AWS OpsWorks / AWS ElasticBeanstalk / Amazon CloudWatch
• Amazon EC2 / Amazon ECS / Amazon ECR / AWS Lambda / Amazon S3 / Amazon EFS
• 話さないこと– ビルド、テスト、デプロイの詳細
– サードパーティツール・サービス(CircleCI、TravisCIなど)
– サービスのロードマップ
6
Jenkinsで何ができるのか?
7
DevOpsと自動化
8
DevOps = 文化+プロセス+ツール
開発者 顧客
releasetestbuild
plan monitor
デリバリのパイプライン
フィードバックループ
ソフトウェア開発のライフサイクル高速化
モノリシックな開発プロセス
9
開発者
releasetestbuild
デリバリパイプラインアプリ
10
• Service-Oriented Architecture (SOA)
• 単一の目的
• APIでのみ連携
• “Microservices”
11
• Two-pizza teams
• 全ての主導権
• 全ての責任
• 良くしようとする動機
• “DevOps”
Microserviceの開発ライフサイクル
12
開発者 デリバリパイプラインサービス
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
DevOps タスク
13
MonitorProvisionDeployTestBuildCode
継続的インテグレーション(CI = Continuous Integration)
継続的デリバリ(CD = Continuous Delivery)
継続的デプロイ(Continuous Deploy)
継続的監視と改善
DevOpsタスクとAWS開発者用サービスの位置付け
14
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate OpsWorks Stacks
CloudWatch
CloudFormation
CodeDeploy
CodeCommit
Code Pipeline
Code Build
Jenkins
• オープンソースの自動化サーバ– ソフトウェア開発におけるテスト、ビルド、デプロイの自動化
– ビルドパイプラインの構成
– 多彩なプラグインによる拡張
15
画像: https://wiki.jenkins-ci.org/display/JENKINS/Logo
The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.(プロジェクトページ https://jenkins.io/ より)
AWS開発者用サービスとJenkinsの位置付け
16
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate OpsWorks Stacks
CloudWatch
CloudFormation
CodeDeploy
CodeCommit
Code Pipeline
Code Build
Jenkinsの画面例
• トップ画面– プロジェクト
ステータス一覧
17
Jenkinsの画面例• プロジェクト設定画面
18
Jenkinsを使用したビルド実行の例
プロジェクトのビルド履歴
19
個別ビルドのログ
Jenkinsの基本構成
20
Jenkinsユーザ
DeveloperGitHub
Amazon S3
Artifact(パッケージ)
①commit
②pull
③Build/Test
④パッケージング
JenkinsMaster
Jenkinsサーバ(Master)をどう構成するか?
21
Jenkinsユーザ
DeveloperGitHub
Amazon S3
Artifact(パッケージ)
JenkinsMaster HA化
ビルド処理をどのようにオフロードするか?
22
Jenkinsユーザ
JenkinsMaster
JenkinsWorker
JenkinsとAWSサービスとの連携をどうするか?
23
Jenkinsユーザ
JenkinsMaster
目的に合わせたパイプラインをどのように構成するか
Jenkins on AWSの検討ポイント
1. Jenkins サーバ(Master)をどのように構成するか– スペック、セキュリティ、高可用性、ベストプラクティス
2. ビルド処理をどのようにオフロードするか– Jenkins Workerの利用– ビルド環境の多様性、ビルド環境コストの低減
3. 目的に合わせたパイプラインをどのように構成するか– JenkinsとAWSサービスとの連携
24
Jenkins サーバ(Master)をどう構成するか
25
Jenkins Master on EC2
• 構築手順
• スペック
• セキュリティ
• 高可用性
• ベストプラクティス
26
Jenkins Master on EC2 構築手順1. EC2インスタンスを立てる
1. セキュリティグループは22と8080ポートへの接続を許可
2. Jenkinsをパッケージインストールして起動
3. ブラウザでホストへアクセスしてアンロック– Jenkins 2.x系以降– /var/lib/jenkins/secrets/initialAdminPassword に
記載されているパスワードを入力すると利用可能
4. インストールするプラグインを選択
以上
27
(Amazon Linuxの場合)$ sudo yum update –y$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo$ sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key$ sudo yum install jenkins –y$ sudo service jenkins start
Jenkins Master のスペック• OS
– Linux / Windows / Docker
• CPUとネットワーク– 処理内容によって必要スペックは大きく変わる(HTTP接続ごとに3スレッド)– Workerを立てることでMasterの処理をオフロード可能
• インスタンスタイプ– 大量の並列処理が継続して行われる場合はM4を– 間欠的な処理はT2でもよいがCPUクレジットの使い切りに注意
• ストレージ– Masterにはログが格納されるためビルド実行総数に注意– ビルドをMaster上で行う場合は、扱うデータ量×プロジェクト数に注意– プロジェクト設定およびビルド記録保護のためEBSスナップショットの取得を行う
28
Jenkins Master のセキュリティ• SSLを有効化
– ELBをJenkins Masterの前に立ててSSL Terminateすることを推奨
• CSRF防御を有効化– Jenkins 2.xではデフォルトで有効化済み(設定を確認すること)
• Master上でビルドせずWorkerを使う– 誤ったビルド処理によって $JENKINS_HOME (設定、履歴データを配置するディレクトリ)にアクセスされると、
Jenkins環境に悪影響を及ぼす可能性がある
• Workerへのアクセス制御を有効化– Jenkins 1.5.80.x以降ならMaster-Worker間の通信を安全に行う設定を有効化する– Jenkins 2.xならデフォルトで有効化(設定有効化済みを確認すること)
• 適切なユーザ認証を行う– Jenkins独自、OS認証、LDAP認証が利用可能
• ネットワークアクセスの保護– デフォルトは8080ポートで稼働するが、Linuxならiptablesで80ポートへリダイレクト可能– メンテナンスのためのSSH(22番ポート)アクセスが必要– セキュリティグループでこれらのポートへのアクセスを制御する。アクセス元IPを最小限にする
29
Jenkins Masterの高可用性
• Jenkins Masterの設定を疎結合化して外出し– 設定ファイル($JENKINS_HOME)をNFSストレージなどに置き
Jenkins Masterからマウント
– インスタンス数1で固定したAutoScaling(AutoHealing)を構成し、Jenkins Masterが故障した際に代替インスタンスを自動で起動
• 考慮点– ELBをJenkins Masterの前に立ててエンドポイントを固定する
– NFSストレージにはAmazon EFSなど可用性の高いストレージを使用• マウントのためAZに依存しないDNS Nameが利用可能https://aws.amazon.com/fr/about-aws/whats-new/2016/12/simplified-mounting-of-amazon-efs-file-systems/
– 今後の再利用を考えCloudFormationでテンプレート化する
30
Jenkins Masterのベストプラクティス
• セキュリティグループによるアクセス制御• 十分なインスタンススペックの確保• バックアップ・リストアの計画
– EBSスナップショット / $JENKINS_HOMEの退避 / S3 Plugin
• Workerの追加・削除が容易になるよう構成• 使用しないときはWorkerノードを止める• MasterおよびWorkerのモニタリングを行う
Jenkinsオフィシャル Best Practiceも参照– https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Best+Practices
31
ビルド処理をどのようにオフロードするか
32
ビルド処理の特徴
• 実施タイミングが未確定– 迅速な開発のため各々のコミットごとに自動的にテストを実行
• 処理時間は時限的– 数分〜数十分
– 長いとデリバリプロセスが遅延するため通常は短い
• ビルドターゲットに合わせた環境が必要– 複数のライブラリバージョンでテストするなど
33
Jenkins Worker
• ビルド処理をJenkins Masterとは異なるインスタンス(Worker)で実行する– ビルド処理をスケールアウト
– 環境ごとに異なるWorkerを用意
– 必要なときだけWorkerを起動する
• AWSにおけるWorkerの構成方法– Amazon EC2
– Amazon EC2 Spot Fleet
– Amazon ECS
– AWS CodeBuild
34
Jenkins Worker on EC2
• ビルドを実行するaインスタンスがなければ新規にインスタンスを作成– Amazon EC2 Pluginを使用– インスタンスにラベルをつけビルド対象を指定– Jenkins MasterがWorkerインスタンスへSSH接続し、初期設定を実施– Workerインスタンス上でビルドを実行し結果を得る– 指定した時間アイドルが続くとWorkerインスタンスを削除
• スポットインスタンスが利用可能– 使われていないEC2インスタンスに入札して格安利用(最大90%程度のコストカットが可能)– よりコスト効率の高いビルド処理が可能– 起動時に入札価格がスポット価格を下回っているとインスタンスは起動しない– ビルド中にスポット価格が入札価格を上回るとインスタンスが削除されビルドは失敗する
35 https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Plugin
EC2
EC2 スポットインスタンスSSH
Jenkins Worker on EC2(設定例)
Jenkinsの管理→システムの設定
36
Jenkinsシステムの設定→「クラウド」の設定
Jenkins MasterインスタンスにIAM Roleを付与していればCredentialsは必要なし(推奨)詳細はPluginのドキュメントを参照
Jenkins Worker on EC2(設定例)
Jenkinsシステムの設定→ 「クラウド」の設定続き
37
ここで指定した文字列をプロジェクトのラベル式で指定
Jenkins MasterからSSH接続できるようセキュリティグループを指定
サブネットも指定するSSH接続を考慮
Jenkinsシステムの設定→ 「クラウド」の設定続き(拡張設定)
スポットを使う場合にチェックビッド価格を指定
Jenkins Worker on EC2(設定・実行例)
Jenkinsプロジェクトの設定
38
ビルド実行時の様子
Labelsで指定した文字列を指定(サジェストあり)
インスタンスの起動待ち
インスタンスが起動するとビルド実行
Jenkins Worker on Amazon EC2 Spot Fleet• ビルド実行時Spot Fleet上のインスタンスに処理を指示
– Amazon EC2 Fleet Pluginを使用– ビルド処理の投入数に応じ、Spot Fleetで稼働するインスタンス数をコントロールす
る(最小/最大を指定)– WorkerインスタンスへJenkins MasterがSSH接続し初期設定を実施
• Spot Fleet– 配分戦略に応じて複数のスポットプールを自動的に利用– Fleet全体でターゲット容量(インスタンス数 or vCPU数)を満たす– Jenkinsが指示したWorkerインスタンス数を維持するようコントロール
39 https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Fleet+Plugin
SSH EC2 Spot Fleet
Jenkins Worker on Amazon EC2 Spot Fleet(設定例)
40
SpotFleetで起動するため「リクエストと維持」を指定
Jenkins MasterからSSH接続できるようキーペアとセキュリティグループを指定
EC2スポットインスタンス作成
Jenkins Worker on Amazon EC2 Spot Fleet(設定例)
41
Jenkinsの管理→システムの設定
ここで指定した台数の範囲でSpotFleetのターゲット容量が調整
ここで指定した文字列をプロジェクトのラベル式で指定
Jenkins MasterインスタンスにIAM Roleを付与していればCredentialsは必要なし(推奨)詳細はPluginのドキュメントを参照
コンテナとは何か?
42
• OS仮想化
• プロセス隔離
• イメージ
• 自動化Server
Guest OS
Bins/Libs Bins/Libs
App2App1
コンテナとCI/CD
• ビルドで使用する環境とアプリケーションをコンテナ上で動作させる– コンテナが動く環境であればどこでも同じように動く
– Workerインスタンスはコンテナさえ動くようにしておけばよい
• 多様な環境のテストを並列して実行可能– ビルドのたびにクリーンな設定のテスト環境が用意される
– 1つのインスタンス上で複数の環境を同時にテスト可能
43
Amazon EC2 Container Service (ECS)
44
• 特徴(https://aws.amazon.com/ecs/)
– 管理ノード不要の、安定かつ高パフォーマンスなクラスタ管理サービス
– Serviceスケジューラで多様なロングランニングプロセスを実行する基盤に
• コンテナを必要な台数稼働させる• ELB連携で、デプロイも簡単に
– Run Taskでバッチジョブを実行する基盤に• どこかのEC2でコンテナを起動して処理させる
• 価格体系 (https://aws.amazon.com/ecs/pricing/)
– 無料• 利用するEC2, EBS, ELBなどの料金のみ発生
管理されたEC2クラスタ上に、コンテナを自在に配置できる
AmazonECR
Amazon ECS
Elastic Load Balancing
Jenkins Worker on Amazon ECS
• WorkerをECS上のDockerコンテナで実行する– Amazon EC2 Container Service Pluginを使用
– 異なる環境(コンパイラやライブラリ)のWorkerを容易に作成
– 実行のたびにクリーンな環境を使用
• ECSとの連携– クラスターのインスタンスはECSが管理
– CloudWatchとAutoScalingによりインスタンス数の自動調整が可能
4545
ECS
Worker Task
AWS API(WorkerTask起動)
https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Container+Service+Plugin
処理状況の通知
Jenkins Worker on Amazon ECS(設定例)
46
ECSクラスターの設定
ECSを使用する場合クラスターのインスタンス数はここで指定(JenkinsはScaleを指示しない)
調査用にキーペアを指定しておく
インスタンスからJNLPでMasterへ接続できるようサブネットとセキュリティグループを指定
ロールはデフォルトでよい
Jenkins Worker on Amazon ECS(設定例)
47
Jenkinsの設定
ECS
Worker Task
AWS API(WorkerTask起動)
・JNLP(5000)でマスターと通信・HTTP(8080)でJenkins Agentを取得
HTTPS HTTP8080
ELBを経由せずMasterにアクセスできるURLを指定
ここで指定した文字列をプロジェクトのラベル式で指定
※プロジェクトの設定はEC2と同様
Jenkins MasterインスタンスにIAM Roleを付与していればCredentialsは必要なし(推奨)詳細はPluginのドキュメントを参照
Jenkins Worker on Amazon ECS(実行例)
48
Jenkins上はオフラインに見える
ECS上はタスクが無いように見える
ビルドを開始するとタスクが作成され処理が実行終了するとすぐにタスクは削除
AWS CodeBuild
• フルマネージドのビルドサービス• ソースコードのコンパイル、テストの実行、
パッケージング等のビルド処理を実施
• スケーラブルで並列ビルド処理が可能
• 各種言語用のDocker Imageが用意されているほか、カスタムImageを使用して自身のアプリケーションに合わせたビルド環境を利用可能
• API、CLIから起動するほか、CodePipelineやJenkinsとの連携を提供
• 料金• コンピューティングタイプ別 (build.general1.*)
• ビルド1分間あたりの料金
• 1ヶ月にbuild.general1.smallを100分間分の無料利用枠
49
AWS CodeBuild as Jenkins Worker
• WorkerとしてCodeBuildのProjectを実行する– Jenkins CodeBuild Pluginを使用– https://GitHub.com/awslabs/aws-codebuild-jenkins-plugin– 上記ソースをpull→mvn installでコンパイル→.hpiファイルをJenkinsにupload
• CodeBuildを使用するメリット– 処理内容を設定(buildspec.yml)として記述– Projectの実行時間に応じた料金– フルマネージドでインスタンスの管理やスケーラビリティの考慮が不要– 実行のたびにクリーンな環境を使用
50
AWS CodeBuild
JenkinsとCodeBuildのインテグレーション例
• RedmineのテストをJenkins+CodeBuildで実行– Ruby on Railsで書かれたコードをRSpecでテスト
– 自身のGitHubにRedmineプロジェクトのクローンを作成しておく
1. GitHubからソースコードを取得
2. CodeBuildコンテナ上に環境を構築
3. RSpecのテストを実施
4. テストが成功したらzipパッケージを作成してS3へ
51
AWS CodeBuild
CodeBuildとのインテグレーション例
52
CodeBuild Projectの設定
GitHubリポジトリを指定
ビルド環境のDocker Imageを指定ここでは標準で提供されるUbuntuベースのRuby環境を使用スペックは3タイプから指定
Railsでテストを実行するための環境変数を指定
CodeBuildとのインテグレーション例
53
ソースコードのトップディレクトリにCodeBuildのビルド設定ファイル (buildspec.yml) を追加
…
phases: 各ステージで実行するコマンドを指定install: スクリプトを実行して必要パッ
ケージの追加やgemのインストールを実施
pre_build: テスト用DBデータの投入build: RSpecの実行post_build: zipパッケージの作成
artifacts: 作成したパッケージの場所を指定
installフェーズで実行するスクリプト(抜粋)
※YAML書式がおかしい、各phasesのスペルを間違えた、
などの場合全くビルド処理が実行されないので注意
特に…”pre-build” ではなく “pre_build” です
CodeBuildとのインテグレーション例
54
• JenkinsにPluginを導入• Projectのビルドフェーズで「Run build on AWS CodeBuild」を追加
Regionとアクセスキー、シークレットキーを指定
CodeBuildのプロジェクト名を指定。今回ソースはCodeBuildのProject内で指定済み
CodeBuildとのインテグレーション例
55
Jenkinsのビルド画面にCodeBuild Dashboardが追加 CodeBuildの画面も同様の表示
Jenkins Workerの構成方法まとめ
• Amazon EC2
• Amazon EC2 Spot Fleet
• Amazon ECS
• AWS CodeBuild
56
目的に合わせたパイプラインをどのように構成するか
57
パイプラインとDevOpsタスク位置付けの例
58
本番
provision
Deploy
Monitor
Code
ソース
Build
ビルドインテグレーションテスト
Provision
Deploy
Test
• すべての必要なプラットフォームでインテグレーションテスト
• 静的コード分析• パフォーマンステスト
ベータテスト
Provision
Deploy
Test
• 手動テスト• 負荷テスト• エンドツーエンド機能テスト
パイプライン
• 継続的デリバリの一連の工程を自動化– 素早いデリバリの実現
– 問題発生時のフィードバック高速化
– 再現性のあるタスク実施
– デリバリプロセスの再利用
• Jenkinsにおける2種類の自動化– 『自動化の進展は2つの側面から考えることができます。一つは,ソフ
トウェア開発に必要な様々な作業それぞれの「部品の自動化」という側面です。もう一つは,それら全体の順序や組み合わせを自動化する「流れの自動化」という側面です』(川口氏)• http://gihyo.jp/dev/column/newyear/2017/continuous-integration-
and-continuous-delivery
59
パイプラインの構成方法
• Jenkins– Pipelineプラグイン(Jenkins2より標準搭載)
– 一連のパイプライン処理をスクリプトで記述
– 各種AWSのサービスとPluginにより連携
• AWS CodePipeline– Amazon社内のプロセスから生まれたパイプライン構築サービス
– マネジメントコンソールやCLIを使用してパイプラインを定義
– CodePipeline Pluginによる連携や各種AWSのサービスとの連携
60
https://wiki.jenkins-ci.org/display/JENKINS/AWS+CodePipeline+Plugin
JenkinsとAWSサービスとの連携
• Pluginで各種AWSサービスと連携– Code
• CodeCommit (Git Pluginで連携)– HTTPS接続の際Gitと同様のID/PWによる認証が可能に(2016/12)
– Build• CodeBuild
– Test• (3rd Party Tools)
– Deploy/Provision• CloudFormation• CodeDeploy• Elastic Beanstalk• (OpsWorksにはPluginがない模様)
61
AWS開発者用サービスとJenkinsの位置付け(再掲)
62
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate OpsWorks Stacks
CloudWatch
CloudFormation
CodeDeploy
CodeCommit
Code Pipeline
Code Build
DevOps Tasks mapping for Amazon EC2
63
Provision
Deploy
TestBuildCode
EC2
OS
config
Packages
config
Application
Deploy
Provisioning & Deploy Task Coverage for EC2
64
EC2
OSconfig
Packages
config
Application
Deploy
Other AWS Services
CloudFormation
ElasticBeanstalk*
OpsWorksStacks**
CodeDeploy
*) Fully managed configuration**) Configurable by Chef Recipe
Customizewith Additional Configuration
Covered
ELB/SQS/RDS
Custom Layerswith Chef Recipe
cfn init.ebextension appspec.yml
Instances &Layers
目的別 Jenkins & AWSサービス パイプラインパターン
• シンプル パイプライン
• コンテナ パイプライン
• モバイルアプリ パイプライン
• セキュリティ自動化 パイプライン1, 2
65
シンプル パイプライン• コードがcommitされたらアプリケーションサーバへデプロイする
① コードをcommit② CodePipelineがcommitを検知③ Jenkinsでビルドを実行してS3へ格納④ CodePipelineがCodeDeployを起動⑤ CodeDeployがApplication Serversへデプロイ
66
Developer CodeCommit CodePipeline CodeDeploy Application Servers
Jenkins(EC2インスタンス)
① ②
③
④ ⑤
コンテナ パイプライン• コードがcommitされたらDocker Imageを作成しECSへデプロイする
① コードをcommit② Jenkinsがcommitを検知してコードを取得③ JenkinsがECRからDocker Imageをpull*④ Jenkinsが更新されたコードでDocker Imageを再作成⑤ Jenkinsが更新されたDocker ImageをECRへpush*⑥ Jenkinsが更新されたタスク/サービスをECS上で起動
67
Developer CodeCommit Jenkins ECS
ECR
① ②
③
④
⑤
⑥
*) Docker Build and Publish pluginからCredential Helper を使用したECRアクセスが可能https://aws.amazon.com/blogs/compute/authenticating-amazon-ecr-repositories-for-docker-cli-with-credential-helper/
モバイルアプリ パイプライン
• 各種モバイル端末上のテストを実行するためコードがcommitされたらAWS Device Farmにアプリケーションを送ってテストを実行する① コードをcommit② Jenkinsがcommitを検知してコードを取得③ JenkinsがアプリケーションとテストをDevice Farmに送り各種モバイル端
末上でテストを実行する
68
Developer
CodeCommit Jenkins
①
② ③Tester
Device Farm
セキュリティ自動化 パイプライン1• セキュリティチェックをCI/CDの中で自動的に実行
開発スピードがセキュリティ対応のため遅れないようにする① 開発者がCloudFormationのコードをcommit② Jenkinsがcommitを検知してコードを取得してビルドプロセスを開始③ Jenkinsがセキュリティコントロール用のコードをセキュリティチームのリポジトリから取得
(許可されたIPアドレス範囲や許可されたAMIが何か、などを記載)④ Jenkinsが開発者のCloudFormationテンプレートに対しセキュリティチェックを実施
(問題が見つかれば処理は停止する)⑤ チェックに合格したらCloudFormationの実行を開始
69
Developer CodeCommit (Developer) Jenkins CloudFormation
CodeCommit (Security Team)
① ②
③
④
⑤
セキュリティ自動化 パイプライン2① 開発者がCloudFormationのコードをcommit② Jenkinsがcommitを検知してコードを取得してビルドプロセスを開始③ JenkinsがセキュリティチームのS3からCodeDeployの設定ファイル(AppSpec.yml)に対して行う
べき設定情報を取得する④ Jenkinsが開発者が作成したAppSpec.ymlとセキュリティチームのAppSpec.ymlをマージする⑤ JenkinsがすべてのコンテンツをzipにまとめてS3に配置する⑥ JenkinsがCodeDeployを起動し、EC2がS3バケットからzipファイルを取得してデプロイを開始する⑦ セキュリティチームのAppSpec.ymlの処理に成功した場合のみCodeDeployが正常終了を返す
70
Developer CodeCommit(Developer)
Jenkins S3
S3
① ②
③
④
⑤ ⑦⑥
CodeDeploy Application Servers
参考:AWSサービスによるパイプライン
• コンテナの継続的デプロイ
• サーバレスアプリケーションの継続的デリバリ
71
AWS CodePipeline
72
• 特徴 (http://aws.amazon.com/jp/codepipeline/)
– デプロイまでのプロセスを管理• Build/Test/Deployを組み合わせたフロー管理
• AWSサービスやサードパーティとの連携が充実
– パイプラインのバックアップ
– 見やすいUI• Management Consoleで操作・確認
• 価格体系 (http://aws.amazon.com/jp/codepipeline/pricing/)
– 1アクティブパイプライン毎に$1/月
– 1ヶ月に1つのパイプラインを無料提供
デプロイワークフロー管理サービス
BuildSource Beta Production
参考:コンテナの継続的デプロイ
73
• コンテナをECSに継続的デプロイするためのリファレンスアーキテクチャ• CloudFormationテンプレートが提供されておりすぐにお試しいただけます
原文→https://github.com/awslabs/ecs-refarch-continuous-deployment日本語→https://aws.amazon.com/jp/blogs/news/continuous-deployment-to-amazon-ecs-using-aws-codepipeline-aws-codebuild-amazon-ecr-and-aws-cloudformation/
参考:サーバレスアプリケーションの継続的デリバリ
74
• サーバレスアプリケーションモデル(SAM)を使用• AWS API GatewayとAWS Lambdaで構成• テスト/ベータ/ガンマそれぞれでテストし本番へリリース• リリースは手動承認
blog: https://aws.amazon.com/blogs/compute/continuous-deployment-for-serverless-applications/CFnテンプレート: https://s3.amazonaws.com/awscomputeblogmedia/serverless-pipeline.yamlサンプルSAMアプリソースコード: https://s3.amazonaws.com/awscomputeblogmedia/timestamp_app.zip
まとめ
75
1. Jenkinsで何ができるのか?
2. Jenkins サーバ(Master)の構成
3. ビルド処理のオフロード
4. 目的に合わせたパイプライン
参考資料• Jenkins Official Site(英語)
– https://jenkins.io/
• Jenkins on AWS White Paper (英語)– https://d0.awsstatic.com/whitepapers/DevOps/Jenkins_on_AWS.pdf– https://www.amazon.com/dp/B01MD0T33X (Kindle版)
• DevOps on AWS– AWSの考えるDevOpsと各サービスの位置付けについて– https://aws.amazon.com/jp/devops/
• AWS Labs @GitHub – 各種リファレンスアーキテクチャのCFnテンプレートやサンプルコード– https://github.com/awslabs/
• AWSクラウドサービス活用資料集– 各種サービス/ソリューションカットのオンラインセミナー資料– https://aws.amazon.com/jp/aws-jp-introduction/
• DevOps Engineering on AWS(オフィシャルトレーニング)– AWSのDevOpsサービスを学ぶ3日間のコース。日本の最新事例も交え、ラボとディスカッションで理解を深めます。試験対策にも。– https://aws.amazon.com/jp/training/course-descriptions/devops-engineering/
76
Q&A
77
オンラインセミナー資料の配置場所
• AWS クラウドサービス活用資料集– http://aws.amazon.com/jp/aws-jp-introduction/
• AWS Solutions Architect ブログ– 最新の情報、セミナー中のQ&A等が掲載されています
– http://aws.typepad.com/sajp/
78
公式Twitter/FacebookAWSの最新情報をお届けします
79
@awscloud_jp
検索
最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを日々更新しています!
もしくはhttp://on.fb.me/1vR8yWm
AWSの導入、お問い合わせのご相談
AWSクラウド導入に関するご質問、お見積り、資料請求をご希望のお客様は以下のリンクよりお気軽にご相談くださいhttps://aws.amazon.com/jp/contact-us/aws-sales/
※「AWS 問い合わせ」で検索してください
AWS Black Belt Online Seminar
• 1月の配信予定– 1月25日(水) 18:00-19:00 AWS Storage Gateway
– 1月31日(火) 12:00-13:00 AWSで実現するDisaster Recovery
• 申し込みサイトhttps://aws.amazon.com/jp/about-aws/events/webinars/
(もしくは「AWS イベント」で検索)
AWS Black Belt Online Seminar
• 2月の配信予定– 2月1日(水) 18:00-19:00 AWS OpsWorks
– 2月8日(水) 18:00-19:00 AWS Batch
– 2月9日(木) 12:00-13:00 Docker on AWS
– 2月22日(水) 18:00-19:00 Amazon EC2 Systems Manager
– 2月28日(火) 12:00-13:00 IoT向け最新アーキテクチャパターン
• 申し込みサイトhttps://aws.amazon.com/jp/about-aws/events/webinars/
(もしくは「AWS イベント」で検索)
簡単なアンケートにご協力ください。
• 画面に表示されるアンケートフォームに入力をお願いします。皆様のご意見は、今後の改善活動に活用させて頂きます。
コメント欄には1行で自由な内容を書き込み下さい。
例)
- 本オンラインセミナーへのご意見
- 今後オンラインセミナーで取り上げて欲しい題材
- 発表者への激励
等々…
※Q&A同様に書き込んだ内容は主催者にしか見えません
83
ご参加ありがとうございました
84
85
補足:ElasticBeanstalkでJenkins Masterを稼働させる
• ElasticBeanstalkのコンテナ上にJenkins Masterを構成することで、EC2インスタンスの管理負荷を低減させることが可能
• ポイント– JenkinsのオフィシャルDockerイメージを使用する
– ウェブサーバ環境で、プラットフォームはDocker、環境タイプは単一インスタンスを使用する
– Dockerrun.aws.json および .ebextensionsを使用してElasticBeanstalk用のデプロイパッケージを作成する(次ページ参照)
– 注意
• Jenkinsの初期パスワードを確認できるよう、EC2インスタンスにログインするキーペアを指定する
• $JENKINS_HOMEはEC2インスタンスの/var/jenkinsに配置される
86
補足:ElasticBeanstalkでJenkins Masterを稼働させる
87
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "jenkins"
},
"Ports": [
{
"HostPort": "8080",
"ContainerPort": "8080"
}
],
"Volumes": [
{
"HostDirectory": "/var/jenkins_home",
"ContainerDirectory": "/var/jenkins_home"
},
{
"HostDirectory": "/var/run/docker.sock",
"ContainerDirectory": "/var/run/docker.sock"
}
],
"Logging": "/var/log/jenkins"
}
container_commands:
01-jenkins-user:
command: useradd -u 1000 jenkins || echo 'User already exist!'
02-jenkins-user-groups:
command: usermod -aG docker jenkins
03-jenkins-home:
command: mkdir /var/jenkins_home || echo 'Directory already exist!'
04-changeperm:
command: chown jenkins:jenkins /var/jenkins_home
デプロイパッケージ(jenkins-eb.zip)の作成手順
$ find . -type f
./.ebextensions/instance.config
./Dockerrun.aws.json
$ zip -r jenkins-eb.zip Dockerrun.aws.json .ebextensions/
adding: Dockerrun.aws.json (deflated 56%)
adding: .ebextensions/ (stored 0%)
adding: .ebextensions/instance.config (deflated 48%)
$ ls
Dockerrun.aws.json jenkins-eb.zip
Dockerrun.aws.json instance.config