AWS CodeBuild – Build and test code with continuous scaling
aws.amazon.com
aws.amazon.com
1. Caching. CircleCI and Travis cache intermediate build artifacts (e.g., virtualenv in python) to reduce build time.
2. Github pull request integration (red cross on pull requests if the build fails).
3. Chat integration. Sending a message to slack or hipchat when the build fails.
4. SSH into build container. Very handy for rare but difficult to locally reproduce build bugs.
Interesting offer though. We found that we would pay less than 5$ a month for our build needs and they would run concurrently.
I mean integration is one less thing to build & manage, but you can sling together support in a pinch
1. No cache. You need to build your own.
2. No obvious github integration. You can pull code from github but that's it.
3. Notifications are managed with SNS. So you need to use lambda or something like that for Slack Notifications.
4. No obvious ssh support. Would need to check the dockers image they use to be 100% sure.
Cloudformation: infrastructure-as-code (but has sharp edges) (doesn't touch your app/code directly)
Opsworks: wizard-style 'drop your app here' kind of thing (less flexibility and control)
Beanstalk: a simpler version of OpsWorks? (never tried it)
CodeDeploy: install an agent, it pulls code/artifacts (janky workflow)
CodeBuild: no idea, just been released
Just Using The Web Console: convenient, but manual process (labour-intensive, prone to manual errors)
On the CI thing - from my experience at one of the places I work, there are a thousand CI systems out there, but very few CD systems. Pretty much anything can schedule and track builds, but few things schedule and track deploys (which gets suprisingly tricky suprisingly quickly). CD is the 'last mile'...EDIT: missed some that I've never looked at. It is getting crazy...
CodeCommit: looks like it might be a 'github'?
CodePipeline: No idea. Perhaps a spruced-up version of CodeDeploy?I recently inherited an app that uses OpsWorks. The deploy process is actually really nice, but I notice that it doesn't receive a lot of updates from AWS. Since OpsWorks came out when Chef was hot, and now Chef seems to be less popular than Ansible and/or docker. I wonder what the future holds for me if Chef continues to decline in popularity.
...Except for this part: CloudBuild has per-minute billing!! This is one of the major complaints people have about EC2 (and all the services Amazon builds over it), and is one of the major downsides of using it over Google's Compute Engine. If you have any kind of task that can possibly be thought of as a "build"--one which can be expressed as a container of software configured to access some external asset as input and which generates a concrete output "artifact" (and maybe even not, right? to support some silly things people do in their builds like "check out code from npm", you likely get network access, and your build output could always be an empty file)--this now seems like a depressingly hilarious way to trick Amazon's infrastructure into giving you per-minute billing for random tasks which take less than 20 minutes to run (important limit, as they are charging a 3x overhead vs the on demand price for an equivalent instance: for 8 vCPU / 15 GB instance, a c4.2xlarge costs $0.419 per hour and a build.general1.large costs $.02 per minute, which would be $1.20 per hour).
In other words: I will argue that this service really can and maybe should just be looked at as a different pricing model for ECS, to support any "small" task (not just building code): if it takes less than 20 minutes and doesn't require a massive computer, CodeBuild is not only cheaper but probably easier to use (as it already models the problem in terms of a task queue, so you don't have to do that part either).
I wrote up how we plan to use this in the Convox platform here: https://convox.com/blog/codebuild/
Practically speaking, we're working through PCI compliance. Getting builds off of production services and root-enabled docker daemons is a huge win.
Kind of like a lot of Microsoft tools, they are all lacking but, hey, the have deep integration with each other, so easier gluing.
--- Example 1 ---
[Container] 2016/12/01 22:39:59 Step 9 : EXPOSE 3000
[Container] 2016/12/01 22:40:31 ---> Running in 1c6e3a4dbec8
[Container] 2016/12/01 22:40:45 ---> 602aa4bc97ac
-----------------
--- Example 2 ---
[Container] 2016/12/01 22:36:00 Step 4 : WORKDIR /src
[Container] 2016/12/01 22:36:32 ---> Running in 98800352e6c2
[Container] 2016/12/01 22:36:45 ---> b437afe2a1c5
-----------------
Not sure if this caused by the fact its a docker inside docker implementation.
1. We should be able to configure this for a few/all branches (including PRs) and have conditional build tasks based on branch.
2. We need be able to access resources inside a VPC.
3. Turnkey chat integrations would be nice, but it's not a big deal to just curl.
4. We need a way to execute actions on failure.
I am curious to know what kind of actions would they be other than notifying via chat/email?
CodePipeline has codebuild and lambda integrations, you could use the lambda functions to do what you want after success/failure.
From my initial testing, this looks like an annoying "no". There doesn't appear to be any way to set the VPC or security group in which the build executes, only an IAM role.
(which already makes it a non-starter for my use case with a private npm-enterprise server)
Yes. The CodePipeline Plugin for Jenkins can be used to integrate CodeBuild into Jenkins jobs. The build jobs are sent to CodeBuild, eliminating the need for provisioning and managing the Jenkins worker nodes.
disclaimer: I'm the founder at distelli
Using CodePipelines and CodeCommit you can create a workflow where a git commit to a CodeCommit repo can get picked up by pipelines and sent to the build service (i.e. CodeBuild or Jenkins). Then CodeBuild will push the resulting artifact to S3. CodeDeploy (and Elastic Beanstalk, CloudFormation and OpsWorks) can be configured to deploy the built artifacts to your application fleet.
It's the last piece in AWS's solution for continuous deployment.