Weitere ähnliche Inhalte Ähnlich wie AWS Black Belt Online Seminar AWS上のJenkins活用方法 (20) Mehr von Amazon Web Services Japan (20) Kürzlich hochgeladen (11) AWS Black Belt Online Seminar AWS上のJenkins活用方法1. 【AWS Black Belt Online Seminar】
AWS上のJenkins活用方法
アマゾンウェブサービスジャパン株式会社
トレーニングデリバリマネージャ 大村 幸敬
2017.01.24
2. 自己紹介
• 大村 幸敬 (Yukitaka Ohmura)
– トレーニングデリバリマネージャ
• トレーニングの実施とトレーニングコース開発
– DevOps Engineering on AWS
– Developing on AWS
– Architecting on AWS
– Data Warehousing on AWS など
– 経歴:SIerで自社サービスの開発・運用
金融系のインフラPM
– 好きなもの:アウトドアと日本酒と娘^2
– 好きなサービス:AWS CLI
2
3. 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
6. 今回の内容
• 話すこと
– 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
15. 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/ より)
24. Jenkins on AWSの検討ポイント
1. Jenkins サーバ(Master)をどのように構成するか
– スペック、セキュリティ、高可用性、ベストプラクティス
2. ビルド処理をどのようにオフロードするか
– Jenkins Workerの利用
– ビルド環境の多様性、ビルド環境コストの低減
3. 目的に合わせたパイプラインをどのように構成するか
– JenkinsとAWSサービスとの連携
24
27. 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
28. Jenkins Master のスペック
• OS
– Linux / Windows / Docker
• CPUとネットワーク
– 処理内容によって必要スペックは大きく変わる(HTTP接続ごとに3スレッド)
– Workerを立てることでMasterの処理をオフロード可能
• インスタンスタイプ
– 大量の並列処理が継続して行われる場合はM4を
– 間欠的な処理はT2でもよいがCPUクレジットの使い切りに注意
• ストレージ
– Masterにはログが格納されるためビルド実行総数に注意
– ビルドをMaster上で行う場合は、扱うデータ量×プロジェクト数に注意
– プロジェクト設定およびビルド記録保護のためEBSスナップショットの取得を行う
28
29. 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
30. 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
31. 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
34. Jenkins Worker
• ビルド処理をJenkins Masterとは異なるインスタンス
(Worker)で実行する
– ビルド処理をスケールアウト
– 環境ごとに異なるWorkerを用意
– 必要なときだけWorkerを起動する
• AWSにおけるWorkerの構成方法
– Amazon EC2
– Amazon EC2 Spot Fleet
– Amazon ECS
– AWS CodeBuild
34
35. 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
36. Jenkins Worker on EC2(設定例)
Jenkinsの管理→システムの設定
36
Jenkinsシステムの設定→「クラウド」の設定
Jenkins Masterインスタンスに
IAM Roleを付与していれば
Credentialsは必要なし(推奨)
詳細はPluginのドキュメントを参照
37. Jenkins Worker on EC2(設定例)
Jenkinsシステムの設定→ 「クラウド」の設定続き
37
ここで指定した文字列を
プロジェクトのラベル式で指定
Jenkins MasterからSSH接続
できるよう
セキュリティグループを指定
サブネットも指定する
SSH接続を考慮
Jenkinsシステムの設定→ 「クラウド」の設定続き(拡張設定)
スポットを使う場合にチェック
ビッド価格を指定
38. Jenkins Worker on EC2(設定・実行例)
Jenkinsプロジェクトの設定
38
ビルド実行時の様子
Labelsで指定した文字列を指定
(サジェストあり)
インスタンスの起動待ち
インスタンスが起動すると
ビルド実行
39. 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
40. Jenkins Worker on Amazon EC2 Spot Fleet(設定例)
40
SpotFleetで起動するため
「リクエストと維持」を指定
Jenkins MasterからSSH接続できるよう
キーペアとセキュリティグループを指定
EC2スポットインスタンス作成
41. Jenkins Worker on Amazon EC2 Spot Fleet(設定例)
41
Jenkinsの管理→システムの設定
ここで指定した台数の範囲で
SpotFleetのターゲット容量が調整
ここで指定した文字列を
プロジェクトの
ラベル式で指定
Jenkins Masterインスタンスに
IAM Roleを付与していれば
Credentialsは必要なし(推奨)
詳細はPluginのドキュメントを参照
44. 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クラスタ上に、コンテナを自在に配置できる
Amazon
ECR
Amazon ECS
Elastic Load
Balancing
45. 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
処理状況の通知
46. Jenkins Worker on Amazon ECS(設定例)
46
ECSクラスターの設定
ECSを使用する場合
クラスターのインスタンス数は
ここで指定(JenkinsはScaleを指示しない)
調査用にキーペアを指定しておく
インスタンスからJNLPで
Masterへ接続できるよう
サブネットと
セキュリティグループを指定
ロールはデフォルトでよい
47. Jenkins Worker on Amazon ECS(設定例)
47
Jenkinsの設定
ECS
Worker Task
AWS API
(WorkerTask起動)
・JNLP(5000)でマスターと通信
・HTTP(8080)でJenkins Agentを取得
HTTPS HTTP
8080
ELBを経由せずMasterに
アクセスできるURLを指定
ここで指定した文字
列をプロジェクトの
ラベル式で指定
※プロジェクトの設定はEC2と同様
Jenkins Masterインスタンスに
IAM Roleを付与していれば
Credentialsは必要なし(推奨)
詳細はPluginのドキュメントを参照
48. Jenkins Worker on Amazon ECS(実行例)
48
Jenkins上はオフラインに見える
ECS上はタスクが無いように見える
ビルドを開始するとタスクが作成され処理が実行
終了するとすぐにタスクは削除
49. AWS CodeBuild
• フルマネージドのビルドサービス
• ソースコードのコンパイル、テストの実行、
パッケージング等のビルド処理を実施
• スケーラブルで並列ビルド処理が可能
• 各種言語用のDocker Imageが用意されているほか、
カスタムImageを使用して自身のアプリケーションに
合わせたビルド環境を利用可能
• API、CLIから起動するほか、
CodePipelineやJenkinsとの連携を提供
• 料金
• コンピューティングタイプ別 (build.general1.*)
• ビルド1分間あたりの料金
• 1ヶ月にbuild.general1.smallを100分間分の無料利用枠
49
50. 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
59. パイプライン
• 継続的デリバリの一連の工程を自動化
– 素早いデリバリの実現
– 問題発生時のフィードバック高速化
– 再現性のあるタスク実施
– デリバリプロセスの再利用
• Jenkinsにおける2種類の自動化
– 『自動化の進展は2つの側面から考えることができます。一つは,ソフ
トウェア開発に必要な様々な作業それぞれの「部品の自動化」という
側面です。もう一つは,それら全体の順序や組み合わせを自動化する
「流れの自動化」という側面です』(川口氏)
• http://gihyo.jp/dev/column/newyear/2017/continuous-integration-
and-continuous-delivery
59
60. パイプラインの構成方法
• Jenkins
– Pipelineプラグイン(Jenkins2より標準搭載)
– 一連のパイプライン処理をスクリプトで記述
– 各種AWSのサービスとPluginにより連携
• AWS CodePipeline
– Amazon社内のプロセスから生まれたパイプライン構築サービス
– マネジメントコンソールやCLIを使用してパイプラインを定義
– CodePipeline Pluginによる連携や各種AWSのサービスとの連携
60
https://wiki.jenkins-ci.org/display/JENKINS/AWS+CodePipeline+Plugin
61. 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
63. DevOps Tasks mapping for Amazon EC2
63
Provision
Deploy
TestBuildCode
EC2
OS
config
Packages
config
Application
Deploy
64. Provisioning & Deploy Task Coverage for EC2
64
EC2
OS
config
Packages
config
Application
Deploy
Other
AWS Services
Cloud
Formation
Elastic
Beanstalk*
OpsWorks
Stacks**
Code
Deploy
*) Fully managed configuration
**) Configurable by Chef Recipe
Customize
with Additional
Configuration
Covered
ELB/SQS/RDS
Custom Layers
with Chef Recipe
cfn init.ebextension appspec.yml
Instances &
Layers
65. 目的別 Jenkins & AWSサービス パイプラインパターン
• シンプル パイプライン
• コンテナ パイプライン
• モバイルアプリ パイプライン
• セキュリティ自動化 パイプライン1, 2
65
66. シンプル パイプライン
• コードがcommitされたらアプリケーションサーバへデプロイする
① コードをcommit
② CodePipelineがcommitを検知
③ Jenkinsでビルドを実行してS3へ格納
④ CodePipelineがCodeDeployを起動
⑤ CodeDeployがApplication Serversへデプロイ
66
Developer CodeCommit CodePipeline CodeDeploy Application Servers
Jenkins
(EC2インスタンス)
① ②
③
④ ⑤
67. コンテナ パイプライン
• コードが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/
69. セキュリティ自動化 パイプライン1
• セキュリティチェックをCI/CDの中で自動的に実行
開発スピードがセキュリティ対応のため遅れないようにする
① 開発者がCloudFormationのコードをcommit
② Jenkinsがcommitを検知してコードを取得してビルドプロセスを開始
③ Jenkinsがセキュリティコントロール用のコードをセキュリティチームのリポジトリから取得
(許可されたIPアドレス範囲や許可されたAMIが何か、などを記載)
④ Jenkinsが開発者のCloudFormationテンプレートに対しセキュリティチェックを実施
(問題が見つかれば処理は停止する)
⑤ チェックに合格したらCloudFormationの実行を開始
69
Developer CodeCommit (Developer) Jenkins CloudFormation
CodeCommit (Security Team)
① ②
③
④
⑤
70. セキュリティ自動化 パイプライン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
72. 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
74. 参考:サーバレスアプリケーションの継続的デリバリ
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
76. 参考資料
• 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
81. 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 イベント」で検索)
82. 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 イベント」で検索)
86. 補足:ElasticBeanstalkでJenkins Masterを稼働させる
• ElasticBeanstalkのコンテナ上にJenkins Masterを構成することで、
EC2インスタンスの管理負荷を低減させることが可能
• ポイント
– JenkinsのオフィシャルDockerイメージを使用する
– ウェブサーバ環境で、プラットフォームはDocker、環境タイプは単一インスタンスを使用する
– Dockerrun.aws.json および .ebextensionsを使用してElasticBeanstalk用のデプロイパッケー
ジを作成する(次ページ参照)
– 注意
• Jenkinsの初期パスワードを確認できるよう、EC2インスタンスにログインするキーペアを指定する
• $JENKINS_HOMEはEC2インスタンスの/var/jenkinsに配置される
86
87. 補足: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