{"id":45090,"date":"2016-05-11T19:35:36","date_gmt":"2016-05-11T16:35:36","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=45090"},"modified":"2019-07-10T19:58:16","modified_gmt":"2019-07-10T16:58:16","slug":"8-pro-tips-for-using-concourse-ci-with-cloud-foundry","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/","title":{"rendered":"8 Pro Tips for Using Concourse CI with Cloud Foundry"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#Why_Concourse_CI_is_different\" >Why Concourse CI is different<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#Main_concepts_and_architecture\" >Main concepts and architecture<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#Getting_started_with_Concourse_CI\" >Getting started with Concourse CI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#Pro_tips\" >Pro tips<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#Summary\" >Summary<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#Further_reading\" >Further reading<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Why_Concourse_CI_is_different\"><\/span>Why Concourse CI is different<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-7809479.png\" alt=\"concourse-ci-architecture-features-and-usage-logo\" width=\"150\" class=\"alignright\" style=\"margin: 0px 0px 20px 20px;\" \/><\/p>\n<p>There are at least a dozen continuous integration solutions out there, but the majority of them are challenging to learn, scale, and debug. Most importantly, few of them were designed with pipelines in mind. Not able to find a tool that could handle something as massive and complex as Cloud Foundry, Pivotal decided to write their own. This resulted in <a href=\"http:\/\/concourse.ci\" target=\"_blank\" rel=\"noopener noreferrer\">Concourse CI<\/a>, a user-friendly continuous delivery technology that focuses on pipelines, is easy to scale, runs anywhere, and works with anything.<\/p>\n<p>Here are some of the features that really make Concourse CI stand out:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\"><strong>Pipelines are first-class citizens.<\/strong> Concourse CI is the first open-source tool built around pipelines, such as Atlassian Bamboo. Unlike it, Concourse has no proprietary license and does not lock you on any technologies.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Containers and microservices.<\/strong> Everything runs in ephemeral, reproducible containers. Horizontal scaling is a wheeze. Each part of the pipeline can be scaled independently.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Everything as Code.<\/strong> Deployments, builds, and anything can be automated, scripted, and then recreated without wizards or manual configuration.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Infrastructure-agnostic.<\/strong> Concourse CI is deployed with BOSH and can run on any cloud with BOSH support (AWS, GCE, vSphere, etc.), as well as on bare metal.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Written in Golang.<\/strong> It is possible to test software on various platforms, running workers on Linux, Windows, or MacOS (like it is done for <a href=\"https:\/\/www.altoros.com\/visuals\/concourse-fly-cli-cheat-sheet\/\">Fly CLI<\/a>).<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Built for Cloud Foundry with love.<\/strong> Concourse CI was created to streamline development of the Cloud Foundry PaaS and can be readily integrated with BOSH.<\/li>\n<li><strong>Other perks.<\/strong> Concourse is packed with features that facilitate building and debugging CD pipelines (e.g., pipeline visualization, user-friendly text formatting, etc.).<\/li>\n<\/ul>\n<p>For a detailed introduction with demos, watch <a href=\"https:\/\/www.youtube.com\/watch?v=mYTn3qBxPhQ\" target=\"_blank\" rel=\"noopener noreferrer\">this talk<\/a> by <a href=\"https:\/\/github.com\/vito\" rel=\"noopener noreferrer\" target=\"_blank\">Alex Suraci<\/a>, one of Concourse CI\u2019s main contributors, from the <a href=\"https:\/\/www.altoros.com\/blog\/top-100-quotes-from-the-cloud-foundry-summit-2015\/\">Cloud Foundry Summit 2015<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Main_concepts_and_architecture\"><\/span>Main concepts and architecture<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Concourse CI strives for simplicity in everything. There are only three core concepts:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\"><strong>Resources.<\/strong> Anything one can publish to or pull from and anything that can be versioned (e.g., GitHub, AWS S3 buckets, Docker images, BOSH deployments \/ releases \/ stemcells, etc.). Each resource is a container with scripts that can interact with external objects, such as S3.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Tasks.<\/strong> Instructions on how something should be run (container properties, dependencies, etc.)<\/li>\n<li><strong>Jobs.<\/strong> These combine resources and tasks, which results in something being done.<\/li>\n<\/ul>\n<p>Resources, tasks, and jobs make up pipelines where each part is relatively independent and can be reused, even for another project. Visualization makes it easy to follow the stages that the artifacts go through inside the pipeline.<\/p>\n<p>A distinct feature is that both resources and jobs are run in containers. Resources may be written in any language, which makes it simpler to integrate Concourse CI with other tools. As a bonus, you can quickly \u201cSSH\u201d into any container for debugging with the Fly CLI command. This beauty is brought to Concourse by Garden, a reimplementation of Cloud Foundry\u2019s container manager\u2014Warden\u2014in Golang.<\/p>\n<p>The architecture of Concourse CI is very straightforward, with cool aircraft-inspired naming. At the heart of it, lies Air Traffic Control (ATC), which provides a REST API and web GUI, processes all logic, and manages all workflows. It works closely with Transport Security Agency (TSA), which exposes an interface to workers, allowing them to register with ATC.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png\" rel=\"attachment wp-att-10182\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png\" alt=\"concourse-ci-architecture\" width=\"640\" class=\"aligncenter size-full wp-image-45092\" \/><\/a><small>The Concourse CI architecture<\/small><\/center><\/p>\n<p>Workers consist of several components, the main one being <a href=\"https:\/\/github.com\/cloudfoundry\/garden\" target=\"_blank\" rel=\"noopener noreferrer\">Garden<\/a>. To provide Garden containers with a remote layered file system, the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">baggageclaim<\/code> service is used. Workers are also serviced by <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">groundcrew<\/code>, which registers them with ATC at certain intervals, advertises supported resource types, and cleans up ephemeral containers on shutdown.<\/p>\n<p>A detailed description of Concourse CI&#8217;s architecture can be found in the <a href=\"https:\/\/concourse-ci.org\/architecture.html\" target=\"_blank\" rel=\"noopener noreferrer\">official documentation<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Getting_started_with_Concourse_CI\"><\/span>Getting started with Concourse CI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Concourse CI can be deployed with BOSH, via standalone binaries, or in a Vagrant box. Each way produces a fully functional deployment, the only difference being scalability and how fast you can get it working. Using a Vagrant box and the <em>concourse-lite<\/em> project (similar to <em>bosh-lite<\/em>), you can <a href=\"https:\/\/concourse-ci.org\/vagrant.html\" target=\"_blank\" rel=\"noopener noreferrer\">get<\/a> Concourse CI on AWS or a local machine in minutes. Updates for Vagrant come very frequently, thanks to the Concourse CI team. For more on how to use Concourse, check out <a href=\"https:\/\/github.com\/starkandwayne\/concourse-tutorial\" target=\"_blank\" rel=\"noopener noreferrer\">this tutorial<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pro_tips\"><\/span>Pro tips<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once you have a working Concourse CI deployment, it is trivial to build continuous delivery for projects of any size. Still, there are some things that you should keep in mind to avoid running into issues down the road. Here is a selection of tips based on our experience of working with various Concourse CI clusters. They will help to get your continuous delivery right from the first try:<\/p>\n<ol>\n<li style=\"margin-bottom: 6px;\"><strong>Follow best practices.<\/strong> Every week, a question about best practices is raised in the <a href=\"https:\/\/concourseci.slack.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">Concourse Slack channel<\/a>, and Alex Suraci answers it, using examples from <a href=\"https:\/\/github.com\/concourse\/concourse\/tree\/master\/ci\" target=\"_blank\" rel=\"noopener noreferrer\">pipelines for Concourse CI<\/a>. This is where you can learn that the common practice is to have a <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ci<\/code> folder in the project repo. The <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ci<\/code> repo should contain folders called <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">tasks<\/code>, <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">docker<\/code>, and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pipelines<\/code> for tasks, Docker files, and pipelines respectively. If there is only one pipeline, it is better to save it to the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pipeline.yml<\/code> file directly under the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ci<\/code> folder. It is also preferable to have a separate directory for scripts and assets. The screenshot below shows an example of the approximate structure, which you can generate, for instance, with our <a href=\"https:\/\/github.com\/Altoros\/ansible-role-bosh-jumpbox\/tree\/master\/ci\" target=\"_blank\" rel=\"noopener noreferrer\">concourse-helpers<\/a> gem, which also creates your pipeline to test the framework you are using.\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture-features-and-usage.png\" alt=\"concourse-ci-architecture-features-and-usage\" width=\"397\" height=\"478\" class=\"aligncenter size-full wp-image-45093\" \/><\/center><\/p>\n<p>For more ideas on how to arrange continuous integration pipelines, read the sources of <a href=\"https:\/\/github.com\/cloudfoundry\/diego-ci\" target=\"_blank\" rel=\"noopener noreferrer\">Diego<\/a>, <a href=\"https:\/\/github.com\/cloudfoundry\/buildpacks-ci\" target=\"_blank\" rel=\"noopener noreferrer\">buildpacks<\/a>, and <a href=\"https:\/\/github.com\/cloudfoundry-attic\/garden-linux-release\/tree\/develop\/ci\" target=\"_blank\" rel=\"noopener noreferrer\">Garden Linux<\/a>.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Use CPU-intensive VMs for Concourse CI workers.<\/strong> Since running a lot of containers on one VM is a CPU-intensive task, it is a good idea to have fewer workers and a larger number of CPUs per machine (see <a href=\"https:\/\/concourseci.slack.com\/?redir=%2Farchives%2Fgeneral%2Fp1459518458003936\" target=\"_blank\" rel=\"noopener noreferrer\">this Slack discussion<\/a>). If you work with physical machines, it is best to have a single worker per machine.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Use notifications for dependency updates.<\/strong> Keeping up with changes to dependencies is vital for any cloud project. For example, the Cloud Foundry Buildpacks Slack channel uses this <a href=\"https:\/\/github.com\/cloudfoundry\/buildpacks-ci\/blob\/master\/lib\/new-releases-detector.rb\" target=\"_blank\" rel=\"noopener noreferrer\">Slack bot<\/a> to post notifications every time a buildpack dependency is updated. Another example is Altoros\u2019s <a href=\"https:\/\/github.com\/Altoros\/ansible-role-bosh-jumpbox\/tree\/master\/ci\" target=\"_blank\" rel=\"noopener noreferrer\">Jumpbox Ansible<\/a> role, which is updated automatically whenever a dependency gets updated.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Don\u2019t forget about security.<\/strong> Concourse CI\u2019s TSA components address most security threats. TSA even allows users to connect ATC to workers via the Internet. The only thing to care about is authentication. Currently, there are two main types of it: basic HTTP and GitHub-based.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Expose the Concourse CI cluster.<\/strong> In most cases, this will require a load balancer, like HAProxy. Alternatively, you can install this <a href=\"https:\/\/github.com\/cloudfoundry\/route-registrar\" target=\"_blank\" rel=\"noopener noreferrer\">router-registrar project<\/a> with Concourse CI deployed with BOSH to conveniently expose the cluster through Cloud Foundry.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Code your logic.<\/strong> Concourse works as a service and can be customized or extended with other services, such as the <a href=\"https:\/\/github.com\/vmware-archive\/go-concourse\" target=\"_blank\" rel=\"noopener noreferrer\">go-concourse<\/a> client for Golang.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Save your logs.<\/strong> Getting a log aggregator to store and organize logs is common advice for anyone maintaining a service that generates a lot of activity. There are many tools that can help with that. We would recommend the <a href=\"https:\/\/bosh.io\/releases\/github.com\/logsearch\/logsearch-boshrelease\" target=\"_blank\" rel=\"noopener noreferrer\">ELK stack BOSH release<\/a>.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Collaborate.<\/strong> Remember that you can always find engineers ready to help and answer questions in the <a href=\"https:\/\/concourseci.slack.com\/messages\/general\/\" target=\"_blank\" rel=\"noopener noreferrer\">Concourse Slack channel<\/a>.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Concourse CI is awesome for Cloud Foundry or any large cloud-native project that uses microservices. It is written entirely in Go and is available as standalone binaries that run on any platform \/ architecture with Go support: Windows, Linux, or OS X, as well as <a href=\"https:\/\/www.altoros.com\/blog\/porting-cloud-foundry-to-ibm-power-processors\/\">IBM POWER8<\/a>, ARM, etc. Developing resources in Go means we can reduce pipeline execution time, using lightweight images for containers (e.g., Alpine or BusyBox). Alternatively, apps and dependencies can be packaged as Docker images. Last, but not least, Concourse CI supports different types of authentication, including <a href=\"https:\/\/www.altoros.com\/research-papers\/reference-architecture-multi-datacenter-cloud-foundry-with-concourse-and-vault\/\">Vault<\/a>.<\/p>\n<p>Concourse CI is already employed by dozens of companies, Altoros among them. Our team is also working on some new functionality that will make Concourse CI even better. We will keep you updated on the progress.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/securing-multi-datacenter-cloud-foundry-with-vault-and-concourse\/\">Managing Secure Multi-Datacenter Cloud Foundry with Vault and Concourse<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/visuals\/concourse-fly-cli-cheat-sheet\/\">Concourse FLY CLI Cheat Sheet<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/research-papers\/reference-architecture-multi-datacenter-cloud-foundry-with-concourse-and-vault\/\">Reference Architecture: Multi-Datacenter Cloud Foundry with Concourse and Vault<\/a><\/li>\n<\/ul>\n<hr \/>\n<p><center><small>This post was written by <a href=\"https:\/\/www.altoros.com\/blog\/author\/alexander-lomov\/\">Alexander Lomov<\/a> and <a href=\"https:\/\/www.altoros.com\/blog\/author\/volha-kurylionak\/\">Volha Kurylionak<\/a>, edited by <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why Concourse CI is different<\/p>\n<p>There are at least a dozen continuous integration solutions out there, but the majority of them are challenging to learn, scale, and debug. Most importantly, few of them were designed with pipelines in mind. Not able to find a tool that could handle something as massive [&#8230;]<\/p>\n","protected":false},"author":35,"featured_media":45092,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,206],"class_list":["post-45090","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-oss-cloud-foundry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>8 Pro Tips for Using Concourse CI with Cloud Foundry | Altoros<\/title>\n<meta name=\"description\" content=\"Learn how Concourse CI differs from other similar products, how it works, and how it can help you to &quot;nitrocharge&quot; your own projects.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"8 Pro Tips for Using Concourse CI with Cloud Foundry | Altoros\" \/>\n<meta property=\"og:description\" content=\"Why Concourse CI is different There are at least a dozen continuous integration solutions out there, but the majority of them are challenging to learn, scale, and debug. Most importantly, few of them were designed with pipelines in mind. Not able to find a tool that could handle something as massive [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-11T16:35:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-07-10T16:58:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1177\" \/>\n\t<meta property=\"og:image:height\" content=\"657\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alexander Lomov\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alexander Lomov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/\"},\"author\":{\"name\":\"Alexander Lomov\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#\\\/schema\\\/person\\\/32bad30d8a66fbba345c09f5ce9503a6\"},\"headline\":\"8 Pro Tips for Using Concourse CI with Cloud Foundry\",\"datePublished\":\"2016-05-11T16:35:36+00:00\",\"dateModified\":\"2019-07-10T16:58:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/\"},\"wordCount\":1377,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/concourse-ci-architecture.png\",\"keywords\":[\"Cloud-Native\",\"OSS Cloud Foundry\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/\",\"name\":\"8 Pro Tips for Using Concourse CI with Cloud Foundry | Altoros\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/concourse-ci-architecture.png\",\"datePublished\":\"2016-05-11T16:35:36+00:00\",\"dateModified\":\"2019-07-10T16:58:16+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#\\\/schema\\\/person\\\/32bad30d8a66fbba345c09f5ce9503a6\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/concourse-ci-architecture.png\",\"contentUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/concourse-ci-architecture.png\",\"width\":1177,\"height\":657},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"8 Pro Tips for Using Concourse CI with Cloud Foundry\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#\\\/schema\\\/person\\\/32bad30d8a66fbba345c09f5ce9503a6\",\"name\":\"Alexander Lomov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/Alexander-Lomov-150x150.jpg\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/Alexander-Lomov-150x150.jpg\",\"contentUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/Alexander-Lomov-150x150.jpg\",\"caption\":\"Alexander Lomov\"},\"description\":\"Alexander Lomov is a Cloud Foundry Engineer at Altoros. With extensive experience in Ruby, Go, and Python, he was involved in development of BOSH CPIs and other Cloud Foundry-related projects for Canonical, IBM, and other companies. Alexander is a frequent speaker at various events\\\/meetups, mostly sharing his experience with Cloud Foundry. You may also know him as the author of several blog posts about Cloud Foundry internals.\",\"sameAs\":[\"http:\\\/\\\/altoros.com\"],\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/author\\\/alexander-lomov\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"8 Pro Tips for Using Concourse CI with Cloud Foundry | Altoros","description":"Learn how Concourse CI differs from other similar products, how it works, and how it can help you to \"nitrocharge\" your own projects.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/","og_locale":"en_US","og_type":"article","og_title":"8 Pro Tips for Using Concourse CI with Cloud Foundry | Altoros","og_description":"Why Concourse CI is different There are at least a dozen continuous integration solutions out there, but the majority of them are challenging to learn, scale, and debug. Most importantly, few of them were designed with pipelines in mind. Not able to find a tool that could handle something as massive [...]","og_url":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/","og_site_name":"Altoros","article_published_time":"2016-05-11T16:35:36+00:00","article_modified_time":"2019-07-10T16:58:16+00:00","og_image":[{"width":1177,"height":657,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png","type":"image\/png"}],"author":"Alexander Lomov","twitter_misc":{"Written by":"Alexander Lomov","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#article","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/"},"author":{"name":"Alexander Lomov","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6"},"headline":"8 Pro Tips for Using Concourse CI with Cloud Foundry","datePublished":"2016-05-11T16:35:36+00:00","dateModified":"2019-07-10T16:58:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/"},"wordCount":1377,"commentCount":0,"image":{"@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png","keywords":["Cloud-Native","OSS Cloud Foundry"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/","url":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/","name":"8 Pro Tips for Using Concourse CI with Cloud Foundry | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png","datePublished":"2016-05-11T16:35:36+00:00","dateModified":"2019-07-10T16:58:16+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/07\/concourse-ci-architecture.png","width":1177,"height":657},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/8-pro-tips-for-using-concourse-ci-with-cloud-foundry\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"8 Pro Tips for Using Concourse CI with Cloud Foundry"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6","name":"Alexander Lomov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg","caption":"Alexander Lomov"},"description":"Alexander Lomov is a Cloud Foundry Engineer at Altoros. With extensive experience in Ruby, Go, and Python, he was involved in development of BOSH CPIs and other Cloud Foundry-related projects for Canonical, IBM, and other companies. Alexander is a frequent speaker at various events\/meetups, mostly sharing his experience with Cloud Foundry. You may also know him as the author of several blog posts about Cloud Foundry internals.","sameAs":["http:\/\/altoros.com"],"url":"https:\/\/www.altoros.com\/blog\/author\/alexander-lomov\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/45090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=45090"}],"version-history":[{"count":18,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/45090\/revisions"}],"predecessor-version":[{"id":45154,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/45090\/revisions\/45154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/45092"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=45090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=45090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=45090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}