Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Announcing AWS CodeBuild - January 2017 Online Teck Talks

2,467 views

Published on

Today’s cutting edge companies have software release cycles measured in days instead of months. This agility is enabled by the DevOps practice of continuous integration and delivery, which automates building, testing, and deploying all code changes. This automation helps you catch bugs sooner and accelerates developer productivity. In this session, we’ll share the processes followed by Amazon engineers and discuss how you can bring them to your company by using a set of application lifecycle management tools from AWS: the newly announced AWS CodeBuild service, AWS CodePipeline, and AWS CodeDeploy.

Learning Objectives:
• Understand the concepts of DevOps, continuous integration, and continuous delivery
• Learn about Amazon’s DevOps practices
• Hear an overview of how to build a continuous integration and continuous delivery workflow using the combination of CodeBuild, CodePipeline, and CodeDeploy

Published in: Technology

Announcing AWS CodeBuild - January 2017 Online Teck Talks

  1. 1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Chris Munns, Business Development Manager - DevOps January 2017 DevOps on AWS Announcing AWS CodeBuild
  2. 2. https://secure.flickr.com/photos/mgifford/4525333972 Why are we here today?
  3. 3. Software moves faster today Software creation and distribution is easier and faster than ever: • Startups can now take on giants with little to no funding ahead of time • Getting your software into the hands of millions is a download away • Your ability to move fast is paramount to your ability to fight off disruption
  4. 4. What tools do you need to move fast? Releasing software in this new software driven world requires a number of tools: • Tools to manage the flow of your software development release process • Tools to properly test and inspect your code for defects and potential issues • Tools to deploy your applications
  5. 5. • Integration tests with other systems • Load testing • UI tests • Penetration testing Release processes have four major phases Source Build Test Production • Check-in source code such as .java files. • Peer review new code • Compile code • Unit tests • Style checkers • Code metrics • Create container images • Deployment to production environments
  6. 6. Release processes levels Source Build Test Production Continuous integration Continuous delivery Continuous deployment
  7. 7. AWS Code* Services NEW! NEW! AWS CodePipeline AWS CodeCommit AWS CodeBuildAWS CodeDeploy
  8. 8. AWS Code Services Source Build Test Production Software Release Steps:
  9. 9. AWS Code Services Source Build Test Production Software Release Steps: AWS CodeCommit
  10. 10. AWS Code Services Source Build Test Production Software Release Steps: AWS CodeBuild
  11. 11. AWS Code Services Source Build Test Production Software Release Steps: Third Party Tooling
  12. 12. AWS Code Services Source Build Test Production Software Release Steps: AWS CodeDeploy
  13. 13. AWS Code Services Source Build Test Production Software Release Steps: EC2 On-Prem AWS CodeDeploy
  14. 14. AWS Code Services Source Build Test Production Software Release Steps: AWS CodePipeline
  15. 15. AWS Code Services Source Build Test Production Third Party Tooling Software Release Steps: AWS CodeCommit AWS CodeBuild AWS CodeDeploy AWS CodePipeline
  16. 16. Build & test your application https://secure.flickr.com/photos/spenceyc/7481166880
  17. 17. Fully managed build service that compiles source code, runs tests, and produces software packages Scales continuously and processes multiple builds concurrently You can provide custom build environments suited to your needs via Docker images Only pay by the minute for the compute resources you use Launched with CodePipeline and Jenkins integration AWS CodeBuild NEW! NEW!
  18. 18. How does it work? 1. Downloads source code 2. Executes commands configured in the buildspec in temporary compute containers (created fresh on every build) 3. Streams the build output to the service console and CloudWatch logs 4. Uploads the generated artifact to an S3 bucket
  19. 19. How can I automate my release process with CodeBuild? • Integrated with AWS CodePipeline for CI/CD • Easily pluggable (API/CLI driven) • Bring your own build environments • Create Docker images containing tools you need • Open source Jenkins plugin • Use CodeBuild as the workers off of a Jenkins master
  20. 20. buildspec.yml Example version: 0.1 environment_variables: plaintext: JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64" phases: install: commands: - apt-get update -y - apt-get install -y maven pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - mvn install post_build: commands: - echo Build completed on `date` artifacts: type: zip files: - target/messageUtil-1.0.jar discard-paths: yes
  21. 21. buildspec.yml Example version: 0.1 environment_variables: plaintext: JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64" phases: install: commands: - apt-get update -y - apt-get install -y maven pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - mvn install post_build: commands: - echo Build completed on `date` artifacts: type: zip files: - target/messageUtil-1.0.jar discard-paths: yes • Variables to be used by phases of build • Examples for what you can do in the phases of a build: • You can install packages or run commands to prepare your environment in ”install”. • Run syntax checking, commands in “pre_build”. • Execute your build tool/command in “build” • Test your app further or ship a container image to a repository in post_build • Create and store an artifact in S3
  22. 22. Building Your Code “Building” code typically refers to languages that require compiled binaries: • .NET languages: C#, F#, VB.net, etc. • Java and JVM languages: Java, Scala, JRuby • Go • iOS languages: Swift, Objective-C We also refer to the process of creating Docker container images as “building” the image. EC2
  23. 23. No Building Required! Many languages don’t require building. These are considered interpreted languages: • PHP • Ruby • Python • Node.js You can just deploy your code! EC2
  24. 24. Testing Your Code Testing is both a science and an art form! Goals for testing your code: • Want to confirm desired functionality • Catch programming syntax errors • Standardize code patterns and format • Reduce bugs due to non-desired application usage and logic failures • Make applications more secure
  25. 25. Where to Focus Your Tests: UI Service Unit 70% 20% 10%
  26. 26. What service and release step corresponds with which tests? Third Party Tooling AWS CodeBuild BuildTest
  27. 27. Pricing • Pay by the Minute • Three compute types differentiated by the amount of memory and CPU resources: • Free tier of 100 build minutes Compute instance type Memory (GB) vCPU Price per build minute ($) build.general1.small 3 2 0.005 build.general1.medium 7 4 0.010 build.general1.large 15 8 0.020 *As of January 20 2017
  28. 28. Deploying your applications https://secure.flickr.com/photos/simononly/15386966677
  29. 29. Automates code deployments to any instance Handles the complexity of updating your applications Avoid downtime during application deployment Rollback automatically if failure detected Deploy to Amazon EC2 or on-premises servers, in any language and on any operating system Integrates with third-party tools and AWS AWS CodeDeploy
  30. 30. appspec.yml Example version: 0.0 os: linux files: - source: / destination: /var/www/html permissions: - object: /var/www/html pattern: “*.html” owner: root group: root mode: 755 hooks: ApplicationStop: - location: scripts/deregister_from_elb.sh BeforeInstall: - location: scripts/install_dependencies.sh ApplicationStart: - location: scripts/start_httpd.sh ValidateService: - location: scripts/test_site.sh - location: scripts/register_with_elb.sh
  31. 31. appspec.yml Example version: 0.0 os: linux files: - source: / destination: /var/www/html permissions: - object: /var/www/html pattern: “*.html” owner: root group: root mode: 755 hooks: ApplicationStop: - location: scripts/deregister_from_elb.sh BeforeInstall: - location: scripts/install_dependencies.sh ApplicationStart: - location: scripts/start_httpd.sh ValidateService: - location: scripts/test_site.sh - location: scripts/register_with_elb.sh • Remove/add instance to ELB • Install dependency packages • Start Apache • Confirm successful deploy • More! • Send application files to one directory and configuration files to another • Set specific permissions on specific directories & files
  32. 32. v2 v2 v2 v2 v2 v2 one at a time half at a time all at once v2 v2 v2 v1 v1 v1 v2 v1 v1 v1 v1 v1 Agent Agent Dev Deployment group OR Prod Deployment group Agent AgentAgent Agent Agent Agent Choose Deployment Speed and Group
  33. 33. Orchestrating build and deploy with a pipeline https://www.flickr.com/photos/seattlemunicipalarchives/12504672623/
  34. 34. Continuous delivery service for fast and reliable application updates Model and visualize your software release process Builds, tests, and deploys your code every time there is a code change Integrates with third-party tools and AWS AWS CodePipeline
  35. 35. Source Source GitHub Build CodeBuild AWS CodeBuild Deploy JavaApp Elastic Beanstalk Pipeline Stage Action Transition CodePipeline MyApplication
  36. 36. Build CodeBuild AWS CodeBuild NotifyDevelopers Lambda Parallel actions Source Source GitHub CodePipeline MyApplication Deploy JavaApp Elastic Beanstalk
  37. 37. Build CodeBuild AWS CodeBuild NotifyDevelopers Lambda TestAPI Runscope Sequential actions Deploy JavaApp Elastic Beanstalk Source Source GitHub CodePipeline MyApplication
  38. 38. Build CodeBuild AWS CodeBuild Staging-Deploy JavaApp Elastic Beanstalk Prod-Deploy JavaApp Elastic Beanstalk QATeamReview Manual Approval Manual Approvals Review CodePipeline MyApplication
  39. 39. DEMO!
  40. 40. Demo: 1. Start with a repository (github.com/awslabs/aws- codedeploy-sample-tomcat) 2. Add buildspec.yml 3. Create CodePipeline pipeline with a Source and Build stage 4. Do a build 5. Add a deploy stage 6. Do a full execution of the pipeline
  41. 41. Demo:  Start with a repository (github.com/awslabs/aws- codedeploy-sample-tomcat)  Add buildspec.yml  Create CodePipeline pipeline with a Source and Build stage  Do a build • Add a deploy stage • Do a full execution of the pipeline
  42. 42. Demo:  Start with a repository (github.com/awslabs/aws- codedeploy-sample-tomcat)  Add buildspec.yml  Create CodePipeline pipeline with a Source and Build stage  Do a build  Add a deploy stage  Do a full execution of the pipeline
  43. 43. General Best Practices used by Amazon Developers • CI/CD is a MUST! • Commit frequently • Builds on every commit • Build once in a given execution flow • Deploy to a running environment for further testing
  44. 44. General Best Practices used by Amazon Developers • CI/CD is a MUST! • Commit frequently • Builds on every commit • Build once in a given execution flow • Deploy to a running environment for further testing • Everything that is code (application, infrastructure, documentation) goes into a repository • If its not in a repository, it doesn’t go into Production environments!
  45. 45. General Best Practices used by Amazon Developers • CI/CD is a MUST! • Commit frequently • Builds on every commit • Build once in a given execution flow • Deploy to a running environment for further testing • Everything that is code (application, infrastructure, documentation) goes into a repository • If its not in a repository, it doesn’t go into production environments! • Start with continuous delivery (“gated” promotion) and build up to continuous deployment once evidence of a high-level of excellence in testing is clear
  46. 46. General Best Practices used by Amazon Developers • CI/CD is a MUST! • Commit frequently • Builds on every commit • Build once in a given execution flow • Deploy to a running environment for further testing • Everything that is code (application, infrastructure, documentation) goes into a repository • If its not in a repository, it doesn’t go into production environments! • Start with continuous delivery (“gated” promotion) and build up to continuous deployment once evidence of a high-level of excellence in testing is clear • Deploy to canaries, test, deploy to an AZ, test, deploy to a Region, test
  47. 47. General Best Practices used by Amazon Developers (cont.) • Code Reviews are one of the best mechanisms for “good” code: • Does this code look clean and can someone else understand it? • Is the design of it meeting the expectations of its needs? • Are there better/easier ways to do this same thing?
  48. 48. General Best Practices used by Amazon Developers (cont.) • Code Reviews are one of the best mechanisms for “good” code: • Does this code look clean and can someone else understand it? • Is the design of it meeting the expectations of its needs? • Are there better/easier ways to do this same thing? • Style checkers • Will someone else in the company be able to update/fix/maintain this code?
  49. 49. General Best Practices used by Amazon Developers (cont.) • Code Reviews are one of the best mechanisms for “good” code: • Does this code look clean and can someone else understand it? • Is the design of it meeting the expectations of its needs? • Are there better/easier ways to do this same thing? • Style checkers • Will someone else in the company be able to update/fix/maintain this code? • Auto-rollbacks can be the quickest recovery mechanism after failure • Rollback first, then debug what went wrong with logs/graphs/etc.
  50. 50. General Best Practices used by Amazon Developers (cont.) • Code Reviews are one of the best mechanisms for “good” code: • Does this code look clean and can someone else understand it? • Is the design of it meeting the expectations of its needs? • Are there better/easier ways to do this same thing? • Style checkers • Will someone else in the company be able to update/fix/maintain this code? • Auto-rollbacks can be the quickest recovery mechanism after failure • Rollback first, then debug what went wrong with logs/graphs/etc. • Thorough dashboards • What is happening now? • What ”normal” looks like typically over some period of time? • What do I do if this graph looks wrong/an alarm has been triggered? • What events can I correlate with a move in a graph?
  51. 51. Code* Tips and Tricks • All Code* products can(and should) be provisioned and managed with AWS CloudFormation! • You could literally store the CloudFormation templates that provision your Code* resources in CodeCommit and update them via CodePipeline (It’s like Code* Inception!) • Deep integration with IAM. You can assign permissions on who can commit code, approve manual approvals, deploy to certain deployment groups and more! • Integrate with AWS Lambda to do almost anything: • CodeCommit has Repository Triggers • CodeDeploy has Event Notifications • CodePipeline has native Lambda invoke AWS CodePipeline AWS CodeCommit AWS CodeBuildAWS CodeDeploy
  52. 52. FIN, ACK We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service:
  53. 53. FIN, ACK Fully Managed Continuous Scaling Pay as You Go Enables CI/CDExtensible Secure We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service: AWS CodeBuild eliminates the need to set up, patch, update, and manage your own build servers and software. There is no software to install or manage.
  54. 54. FIN, ACK Fully Managed Continuous Scaling Pay as You Go Enables CI/CDExtensible Secure We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service: AWS CodeBuild scales automatically to meet your build volume. It immediately processes each build you submit and can run separate builds concurrently, which means your builds are not left waiting in a queue.
  55. 55. FIN, ACK Fully Managed Continuous Scaling Pay as You Go Enables CI/CDExtensible Secure We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service: With AWS CodeBuild, you are charged based on the number of minutes it takes to complete your build. This means you no longer have to worry about paying for idle build server capacity.
  56. 56. FIN, ACK Fully Managed Continuous Scaling Pay as You Go Enables CI/CDExtensible Secure We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service: You can bring your own build tools and programming runtimes to use with AWS CodeBuild by creating customized build environments in addition to the prepackaged build tools and runtimes supported by CodeBuild.
  57. 57. FIN, ACK Fully Managed Continuous Scaling Pay as You Go Enables CI/CDExtensible Secure We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service: AWS CodeBuild belongs to a family of AWS Code Services, which you can use to create complete, automated software release workflows for continuous integration and delivery (CI/CD). You can also integrate CodeBuild into your existing CI/CD workflow.
  58. 58. FIN, ACK Fully Managed Continuous Scaling Pay as You Go Enables CI/CDExtensible Secure We’ve quickly reviewed and gone through the benefits of AWS CodeBuild, the newest AWS Code* service: With AWS CodeBuild, your build artifacts are encrypted with customer- specific keys that are managed by the AWS Key Management Service (KMS). CodeBuild is integrated with AWS Identity and Access Management (IAM), so you can assign user-specific permissions to your build projects.
  59. 59. aws.amazon.com/devops
  60. 60. AWS DevOps Blog
  61. 61. ? https://secure.flickr.com/photos/dullhunk/202872717/

×