I imagine the documentation is currently a work in progress. But starting for example from Github, it is extremely easy to go down a deep dark hole trying to figure out all the new terms: I guess I have to use BOSH, what is BOSH (itself a deep dark hole: uhh, stemcell? How does this relate to all the other similar tools? Why would I commit to using this new tool solely for the sake of Concourse?); now I have to learn a new strange distinction between the otherwise similar English words "job" and "task," something about Garden (yet another hole to travel) and a new meaning for the acronym "TSA" and for some reason the command line utility is called "fly" which has no obvious relationship to the project name (what if the command to interact with git were "spudge"?) can I please just install a .deb and run a service and add a build real quick to try this out?
This could be why it is so common to see Jenkins deployed everywhere. While it is wrongly designed in so many frustrating ways, you can still set it up for real work in an hour or so, and you won't need a dictionary to translate from a unique new jargon into English just to try it out. Every new CI that makes this even one bit harder than Jenkins isn't trying hard enough.
I should probably add a warning above the BOSH section though, or even the binaries section.
The trouble is, reality is complicated, regardless of whether it's documented or not. I've found that a lot of open source projects simply don't document things to give an illusion of simplicity; people just forget all the manual labor they had to do after downloading that .deb and installing it across 10 machines and maintaining those machines over time. Our docs cover BOSH as our preferred tool for clusters. If you don't want to use BOSH, just use the binaries and your own deployment tool.
We don't build .debs yet; as soon as we do other people will want .yum, and another will want Docker images, so we built the binaries that will feed into those first, which is often what I look for when kicking the tires on something anyway.
Check out VM setup here: http://concourse.ci/vagrant.html Setting up first pipeline here: http://concourse.ci/using-concourse.html
This gets you going with a local Concourse instance that you can experiment with. You're right that it can feel like "turtles all the way down" (quoting @oblio from earlier today), but you do not need to jump in with BOSH right away.
In regards to how to think about 'job' vs 'task', I like to think of 'Job's as a description of what the module is attempting to achieve. For example in the Concourse team's own pipeline[1] you'll see a 'job' named "deploy". 'Task's are on the other hand the individual things that need to happen in order to complete the 'job'.
-- 1. http://ci.concourse.ci/
I've had a brief struggle with trying to get the standalone executables to work under Linux, without any success (I'm told that they probably are incompatible with my server's kernel version; note that the documentation does not state what kernel or OS versions are supported). Similarly, I've had a brief look at what it'd take to set up an install using BOSH.. but it looks like that's going to be a massive undertaking.
As a practical matter, if you want to use Concourse for real work, you probably do have to jump in with BOSH right away, since the standalone versions are likely not to work with your VMs, and the vagrant version is missing critical features and hasn't even been updated to the 1.0 release.
Things that we've done so far with Concourse:
* A dependency check notifier that based on an RSS feed from various language maintainers: Sends an email, updates our pivotal tracker account, sends a message to our slack channel
* A job, that based on the completion of a build will upload the resulting artifact to Github and tag the release with a new version, auto generated release notes and checksums
* Travis.ci style github pull request analysis
* A security feed monitor that notifies us when a part of our application is vulnerable and when it is, kicks off a build and sends an email notification
* Automatically updates submodules and gems for git repos and runs specs and tests against the updated artifact.
These tasks were not difficult to implement. Every pipeline for Concourse is explicitly defined in its configuration file [2], which we version control. There is never any reconfiguring or rebuilding "snowflake" servers when we re-deploy our Concourse VMs. They rebuild identically based on the config files.
[1] - http://buildpacks-ci.cfapps.io (Chrome friendly, Firefox not)
I wore it to the office today. Other people in the office were coming up to me and raving about Concourse. I've been proselytising it, but I feel like pretty soon I just won't have to. One of my colleagues was telling me that in two days he got an iOS CI pipeline that he never managed to achieve with weeks of tinkering with TeamCity.
I suspect that pretty soon the default choice for CI/CD in Pivotal Labs projects will be Concourse, and that will seed it pretty widely.
If you want to get in on the ground floor of something great, here's a good opportunity.
If you're wondering about what the heck it is, go to the homepage for the 40,000 view: http://concourse.ci/
If you're wondering why the heck another CI system, look at "Concourse Vs.": http://concourse.ci/concourse-vs.html
After that my advice is to look at public Concourse pipelines and pop the hood. And drop into the Slack channel, the team are in there now posting funny gifs. I'm in there too, under jchester_robojar, if you want to ask me anything.
I saw this page (http://concourse.ci/architecture.html) but it's turtles all the way down...
Or just validate if my understanding is correct:
Concourse has the following components:
* ATC: web UI + job scheduler; can be clustered; uses PostgreSQL as data storage; => this would be a part of the "master" in Jenkins terminology
* TSA: simple SSH server, used by workers to register and presumably be controlled; => this would be the second part of the "master" in Jenkins terminology, in a sort of JNLP Jenkins setup where the workers register with the master instead of vice versa (Jenkins SSH connection)
* workers: Cloud Foundry type containers (WTF is Cloud Foundry exact? their page is totally confusing); "slaves" in Jenkins terminology
Also, if I read the features correctly, Concourse supports both Linux and Windows builds, right?
Workers are just machines running a container management daemon (much like a Docker daemon) and a volume manager (a custom daemon for managing caches and efficient artifact propagation between containers). Not sure how you got to Cloud Foundry though, it's not really related. Garden lives in the Cloud Foundry GitHub organization, as it's also used by Cloud Foundry, but you don't need to know anything about CF to use Concourse.
Concourse supports Linux, Windows, and OS X. You can see an example of this here:
Concourse's own CI: https://ci.concourse.ci and Concourse Slack: http://slack.concourse.ci
However as already seen in the case of GoCD, the success of Concourse will depend on how easy it is to convince Jenkins believers.
The "vs Jenkins page" needs to be augmented with more information regarding workers, plugins and simple jobs scripts.
At the moment that page is not really convincing
1)"Jenkins servers become snowflakes" All configuration is saved on the disk as XML files. Backing them up or putting them in version control is very easy. Restoring Jenkins servers is very easy. I have done this actually.
2)"Jenkins has no first class support for pipelines" True. But Jenkins 2.0 will be designed around pipelines, so once it is released this argument will no longer hold. And even today with 1.x not all organizations use pipelines (or are happy with the existing plugins)
3)"Trying to find the build output log for a failed build in Jenkins can be up to 3 clicks from the home page" That is not really an argument. I get an email when my build fails.
As others have mentioned having readers understand new concepts in order to run/use if effectively is problematic.
The UI is impressive! Congrats! I think you should market this more.
Basically if the effort required to setup Concourse with 2 workers is bigger then setting up the respective Jenkins setup, Concourse adoption will suffer.
It needs to be stressed that for a lot of small/middle sized companies, the build server is just an afterthought. Not everybody has full time people working on setting up pipelines.
Jenkins can "do" the things that Concourse does, if you assemble enough plugins, click through enough configuration pages and write enough shell scripts. But that's not its native way of thinking.
I agree that lots of Jenkins users will look at Concourse, scratch their head and leave it. But for those who switch, it's really that much better. I think it'll spread largely by word of mouth, especially once it begins to appear in downstream distribution channels.
> It needs to be stressed that for a lot of small/middle sized companies, the build server is just an afterthought. Not everybody has full time people working on setting up pipelines.
I'm in a team of four -- two pairs. We maintain and extend a medium-sized app, central to our revenue, that has some surprisingly complex and legally scary business rules.
These days whenever we're annoyed by something, it's common for us to think "how can we get Concourse to do this for us?", instead of checklists or wiki pages or Just Hoping Somebody Remembers.
I think people tend to set up Jenkins and never touch it again because it's scary to tinker with your CI/CD. Concourse is, despite being configured by flat files and a CLI, much more approachable in this regard.
People who like Jenkins will read it and say "Meh", while people who have already switched to Concourse (like you) don't need to read it in the first place.
At least in the documentation, there seems to be a lot of focus on extra tools. BOSH seems very off-putting. Having to use the "fly" CLI command to update pipeline configuration seems unnecessary - can I just update the files on the filesystem myself, either via my configuration management tool or a git repository?
As a result, BOSH-based systems tend to be managed via APIs exposed by the software running on them, which often come with a command-line tool. BOSH itself is like this, and so is Cloud Foundry.
This is a very different approach to tools like Puppet or Ansible, which are much more about openness and empowering the operator to directly manage machines. Although it is fairly similar to Docker etc, where you fire up images without any sensible way to fiddle with them, and rely on talking to the software.
So, if you are comfortable with the Puppet/Ansible type tools, then you won't like BOSH. This is 30% because BOSH isn't as good as them, but 70% just because it's different.
Try `fly`. It's worth it.
Specifically, not relying on the filesystem means I can't easily browse configuration, I can't have version control, and I can't use my configuration manager to have events trigger when things change.
https://github.com/vito/houdini
There's a blog post by someone else at Pivotal, although the details are probably a bit out of date by now:
https://blog.pivotal.io/labs/tech-talks/on-device-open-sourc...
At Pivotal Toronto we're running iOS and Android builds using a mac mini as an external worker. What's been a great built in feature is using the pool resource to "check-out" a device and lock it from other tests while a suite is running.
I find these approaches better than risking test pollution, especially when it comes to building VMs and spinning up desktop apps.
Buildbot can integrate with Docker to run tasks on containers, create complex conditional flows with triggered builds/steps (among others), and has been in use for many years at organizations large & small.
While the YAML based Concourse configurations seem very useful, we've found that for many non-trivial pipeline style builds are better served by being written in a fully functional language like Python. It has some disadvantages compared to a declarative approach taken by Travis & Concourse, but I feel that they outweigh the limitations imposed by the latter.
The next version of buildbot is also being refactored into a core + plugins system, which should allow for some pretty impressive flexibility that should serve the needs of almost everyone.
--
1. https://concourse.ci/concourse-vs.html 2. http://docs.buildbot.net/latest/
This is similar to how some Concourse Resources are implemented with Shell[1] scripts, and some in Go[2]. -- 1. https://github.com/concourse/git-resource 2. https://github.com/concourse/tracker-resource
GitLab CI is similar to Travis CI in how it works. The page lists three things about Travis CI:
1. Unfortunately it still doesn't have support for pipelines
2. only very simple builds are possible.
3. if something doesn't pass in CI you normally need to send up lots of little debugging commits to work out why it's behaving differently
GitLab CI has does the following to address this:
1. As mentioned GitLab earlier has triggers and we're working on per project pipeline views
2. Builds in GitLab can have many stages with parallelism per stage, since today you can pass build artifacts between stages and cache items https://about.gitlab.com/2016/03/29/gitlab-runner-1-1-releas...
3. You can test the runner locally with exec https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/...
Please let me know what is missed and what people need that we need to add to GitLab CI
Gitlab is just a rails app and then has a go-based runner to do the CI work. Omnibus packages make installation easy. They even have some autoscaling stuff for the runners using docker engine there which I still think needs some work for my use case but for may others is ready to go and looks awesome.
CI covers so many use cases and so there is lots of room for different alternatives, but make sure to check out gitlab if you're looking for the simplest and most flexible CI system I've yet to see :)
We just officially released the autoscaling runner in https://about.gitlab.com/2016/03/29/gitlab-runner-1-1-releas... Please let me know what we can do to improve it for your use case.
Also see my other comment in this post https://news.ycombinator.com/item?id=11387327
Some of people also use their CI tools for running arbitrary one-off scripts (like deploys). Is this possible with Concourse? Currently we have a few Jenkins jobs that just execute a fab task that then does the actual work.
https://github.com/concourse/tracker-resource
I'm not aware of any others. It might not do quite what you want - it's more about pushing the progress of the CI pipeline into Tracker than about bringing information from Tracker into the CI pipeline.
However, resources are fairly easy to write:
https://concourse.ci/resources.html
So if your task tracker of choice has an API (or a command-line tool!), it should be kind of easy to build an equivalent.
There's a Pivotal Tracker resource that does what you describe: https://github.com/concourse/tracker-resource
Concourse uses the Garden API to manage containers. Houdini is a "no-op" implementation that just tells Garden "yep, I've got your container right here".