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/ より)
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/
68. モバイルアプリ パイプライン
• 各種モバイル端末上のテストを実行するためコードが
commitされたらAWS Device Farmにアプリケーションを
送ってテストを実行する
① コードをcommit
② Jenkinsがcommitを検知してコードを取得
③ JenkinsがアプリケーションとテストをDevice Farmに送り各種モバイル端
末上でテストを実行する
68
Developer
CodeCommit Jenkins
①
② ③Tester
Device Farm
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