SlideShare uma empresa Scribd logo
1 de 30
Deep Dive - Concourse CI/CD &
Pipelines
A deep dive into how we continuously
deliver and integrate new features and
bug fixes into our platform
Syed Imam
DevOps Engineer, Platform Engineering
Few things before we start..
● Let’s keep this interruption-free (read: No Device!)
● There’s an attendance sheet going around
● Feel free/don’t bother to take notes
● Jump in anytime for questions
● We also have a separate QnA session at the end
Well, is this as deep as it sounds?
➔ What is Concourse?
➔ Why Concourse?
➔ What does it look like?
➔ What is it made of?
➔ Where do I start?
➔ What if I get stuck?
What is Concourse?
What is Concourse?
Even before we answer this question..
● Do we know what is CI/CD?
[Source: https://semaphoreci.com/]
What is Concourse?
● Concourse is/isn’t (just another) CI/CD tool
● Workflow Engine
● “Concourse is an open-source continuous thing-doer”
Why Concourse?
Why Concourse?
● Infrastructure as Code concept
● Means: pipeline defined as code
● Stateless - makes it easier to maintain
● Declarative - pipeline.yaml
● Containers - reusability and reproducibility
● Extensible - add/use as many components as you want
What does it look like?
[Image Source: https://giphy.com/]
What does it look like?
What is it made of?
1
What is it made of?
Resources
Things that you want to
pass or get off of an
operation/job
2
Resources Types
Each resource has a type
(e.g. docker image), which
has to be defined in the
pipeline
3
Jobs
The name for an actual
operation/action.
What is it made of?
resources and types
● Represent all external input and output to the jobs
● All resources (mostly) belong to a single type: docker_images
● Few primitives you’d need to be aware of are,
○ check - discovers new versions of the resource (e.g. new commit)
○ input - retrieves the resource at a particular versions (e.g. checkout a
git repo at commit X)
○ output - creates a new version of the resource (e.g. docker image
build outputs to ecr in AWS)
What is it made of?
As we were discussing, the most vital part of a pipeline is,
job
plan
steps
get
put
aggregate
task
do
What is it made of?
● job → plan → get(step)
○ What’s first thing you’d require to do something with something?
○ get fetches a resource as input and
○ Makes it available for subsequent task
○ It can have attributes (e.g. version, passed, params, triggers)
● job → plan → put (step)
○ What’s next after something has been done to something?
○ put pushes output to the resources
○ Successful put follows an implicit get
○ Later step can use that updated resource
What is it made of?
What is it made of?
● job → plan → aggregate
○ Keyword that declares underlying sub-steps to
be performed in parallel
○ Single substep failure results into failure of
whole aggregate
● job → plan → do
○ Performs the underlying steps serially
○ This is the default execution method unless
○ You introduce an aggregate process and then
shift
What is it made of?
● job → plan → task (step)
○ Takes inputs from resources and
○ Provides output for subsequent task
○ Use (pre) configured docker image(s)
○ Mostly executes shell scripts
○ Not independent…
○ In a sense that cannot be rerun without
running the job it belongs to (tip: try)
What is it made of?: Shared Tasks
● Shared task repo: <scm-url>/concourse-util/src/master/
● Collection of all shared tasks in a single place
● More generic/fundamental in nature
● Example: slack, kubernetes, git
● New task that could be used by others?
● Talk to maintainers/raise a pull-request
What is it made of?
config.yaml and helm_config.yaml
● We aim to keep things as more templative as possible
● (Noticed passing variables for resource and job?)
● One common way to achieve that is isolating the values
for respective variables into somewhere other than
pipeline.yaml
● That’s when config.yaml and helm_config.yaml
come into play
How to initiate pipeline?
Go to #tech-ci-ink(or infra) and type
● set-pipeline main <repo-name>
● expose-pipeline main <repo-name>
● unpause-pipeline main <repo-name>
● check-resource main <repo-name> <resource-name> (e.g. repo,
ci-util)
Where do I start?
Where do I start?
● Templative approach
● Check out the skeleton apps
● skeleton-go-api is relatively up to date
● Raise pull-request for useful changes that’ll help others too
What if I get stuck?
● Checking logs
○ Specially, CI logs before Rollback was a success! Happy Helming!
● Identify exactly what part of helm upgrade/install failed
● Good to do a quick review of the helm diff
● Failure does replicate to development → test → staging → production
● Check if the relevant secrets have been installed to the namespace
○ kubectl -n <namespace> get secrets
● Any issue with the docker pull?
● Missing environment variables?
What if I get stuck?: Deployment Failure
What if I get stuck?: Deployment Failure
● pod may fail to restart for multiple release versions
○ kubectl -n <namespace> get rs,pods
○ kubectl -n <namespace> delete rs <replicaset>
● Timing out?
○ Default helm install limit is 300s (5 minutes)
○ Number of pods or replicaset x (download image + health-check
pass)/maxSurge
● Solution
○ Simplify image (i.e. bare minimum)
○ Increase maxSurge value
○ Increase limit: ~/ci/helm_config.yaml
What if I get stuck?
● Just a simple question or query? Post it in #tech-infr-ci
channel
● (But hey, no one responded the other day)
● Check /roster pe-batsman to find out the batsman for
any particular day
● But I need help setting up a new pipeline or improving an
existing one!
● Raise a JIRA in Platform Engineering (PE) project with
enough lead time
[Image Source: https://giphy.com/]
Useful Resources
1. Official Concourse Doco
2. Concourse Tutorial
3. Video Tutorial
Questions?

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Who needs Visual Studio? - Philly.NET Code Camp 2016
Who needs Visual Studio? - Philly.NET Code Camp 2016Who needs Visual Studio? - Philly.NET Code Camp 2016
Who needs Visual Studio? - Philly.NET Code Camp 2016
 
NYAN Conference: Debugging asynchronous scenarios in .net
NYAN Conference: Debugging asynchronous scenarios in .netNYAN Conference: Debugging asynchronous scenarios in .net
NYAN Conference: Debugging asynchronous scenarios in .net
 
The Robot under dictate of the LegoMindStorm Java Concurrency API
The Robot under dictate of the LegoMindStorm Java Concurrency APIThe Robot under dictate of the LegoMindStorm Java Concurrency API
The Robot under dictate of the LegoMindStorm Java Concurrency API
 
Kotlin Coroutines and Android sitting in a tree - 2018 version
Kotlin Coroutines and Android sitting in a tree - 2018 versionKotlin Coroutines and Android sitting in a tree - 2018 version
Kotlin Coroutines and Android sitting in a tree - 2018 version
 
Docker for tooling
Docker for toolingDocker for tooling
Docker for tooling
 
Test driving-qml
Test driving-qmlTest driving-qml
Test driving-qml
 
Kotlin Coroutines and Android sitting in a tree
Kotlin Coroutines and Android sitting in a treeKotlin Coroutines and Android sitting in a tree
Kotlin Coroutines and Android sitting in a tree
 
CI with Gitlab & Docker
CI with Gitlab & DockerCI with Gitlab & Docker
CI with Gitlab & Docker
 
Docker tips
Docker tipsDocker tips
Docker tips
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develoment
 
Introduction to Gulp
Introduction to GulpIntroduction to Gulp
Introduction to Gulp
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
 
Asynchronous job queues with python-rq
Asynchronous job queues with python-rqAsynchronous job queues with python-rq
Asynchronous job queues with python-rq
 
Golang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war storyGolang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war story
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
Distributed locks in Ruby - Correctness vs Efficiency - Knapsack Pro case stu...
Distributed locks in Ruby - Correctness vs Efficiency - Knapsack Pro case stu...Distributed locks in Ruby - Correctness vs Efficiency - Knapsack Pro case stu...
Distributed locks in Ruby - Correctness vs Efficiency - Knapsack Pro case stu...
 
Design choices of golang for high scalability
Design choices of golang for high scalabilityDesign choices of golang for high scalability
Design choices of golang for high scalability
 
Basics of Node.js
Basics of Node.jsBasics of Node.js
Basics of Node.js
 
Docker: from zero to nonzero
Docker: from zero to nonzeroDocker: from zero to nonzero
Docker: from zero to nonzero
 
Devops Porto - CI/CD at Gitlab
Devops Porto - CI/CD at GitlabDevops Porto - CI/CD at Gitlab
Devops Porto - CI/CD at Gitlab
 

Semelhante a Deep dive - Concourse CI/CD and Pipelines

A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
Docker, Inc.
 
Introduction to Docker and Containers
Introduction to Docker and ContainersIntroduction to Docker and Containers
Introduction to Docker and Containers
Docker, Inc.
 

Semelhante a Deep dive - Concourse CI/CD and Pipelines (20)

DevOps Fest 2020. immutable infrastructure as code. True story.
DevOps Fest 2020. immutable infrastructure as code. True story.DevOps Fest 2020. immutable infrastructure as code. True story.
DevOps Fest 2020. immutable infrastructure as code. True story.
 
Why You Should Start Using Docker
Why You Should Start Using DockerWhy You Should Start Using Docker
Why You Should Start Using Docker
 
Alex Bolboacă: Why You Should Start Using Docker at I T.A.K.E. Unconference ...
Alex Bolboacă: Why You Should Start Using Docker at I T.A.K.E. Unconference ...Alex Bolboacă: Why You Should Start Using Docker at I T.A.K.E. Unconference ...
Alex Bolboacă: Why You Should Start Using Docker at I T.A.K.E. Unconference ...
 
Building an Extensible, Resumable DSL on Top of Apache Groovy
Building an Extensible, Resumable DSL on Top of Apache GroovyBuilding an Extensible, Resumable DSL on Top of Apache Groovy
Building an Extensible, Resumable DSL on Top of Apache Groovy
 
Snowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD PipelinesSnowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD Pipelines
 
Intro - End to end ML with Kubeflow @ SignalConf 2018
Intro - End to end ML with Kubeflow @ SignalConf 2018Intro - End to end ML with Kubeflow @ SignalConf 2018
Intro - End to end ML with Kubeflow @ SignalConf 2018
 
Devops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShiftDevops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShift
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12x
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
 
Build and run applications in a dockerless kubernetes world
Build and run applications in a dockerless kubernetes worldBuild and run applications in a dockerless kubernetes world
Build and run applications in a dockerless kubernetes world
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
From Zero to Hero - All you need to do serious deep learning stuff in R
From Zero to Hero - All you need to do serious deep learning stuff in R From Zero to Hero - All you need to do serious deep learning stuff in R
From Zero to Hero - All you need to do serious deep learning stuff in R
 
Introduction to Docker and Containers
Introduction to Docker and ContainersIntroduction to Docker and Containers
Introduction to Docker and Containers
 
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
 

Mais de Syed Imam (6)

Customer Network Dashboard Solutions
Customer Network Dashboard SolutionsCustomer Network Dashboard Solutions
Customer Network Dashboard Solutions
 
SSO Implementation Demo
SSO Implementation DemoSSO Implementation Demo
SSO Implementation Demo
 
DevSecOps Platform Telemetry Dashboard Demo
DevSecOps Platform Telemetry Dashboard DemoDevSecOps Platform Telemetry Dashboard Demo
DevSecOps Platform Telemetry Dashboard Demo
 
How to monitor kubernetes clusters
How to monitor kubernetes clustersHow to monitor kubernetes clusters
How to monitor kubernetes clusters
 
GitFlow Workshop
GitFlow WorkshopGitFlow Workshop
GitFlow Workshop
 
Kube 101
Kube 101Kube 101
Kube 101
 

Último

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Deep dive - Concourse CI/CD and Pipelines

  • 1. Deep Dive - Concourse CI/CD & Pipelines A deep dive into how we continuously deliver and integrate new features and bug fixes into our platform Syed Imam DevOps Engineer, Platform Engineering
  • 2. Few things before we start.. ● Let’s keep this interruption-free (read: No Device!) ● There’s an attendance sheet going around ● Feel free/don’t bother to take notes ● Jump in anytime for questions ● We also have a separate QnA session at the end
  • 3. Well, is this as deep as it sounds? ➔ What is Concourse? ➔ Why Concourse? ➔ What does it look like? ➔ What is it made of? ➔ Where do I start? ➔ What if I get stuck?
  • 5. What is Concourse? Even before we answer this question.. ● Do we know what is CI/CD? [Source: https://semaphoreci.com/]
  • 6. What is Concourse? ● Concourse is/isn’t (just another) CI/CD tool ● Workflow Engine ● “Concourse is an open-source continuous thing-doer”
  • 8. Why Concourse? ● Infrastructure as Code concept ● Means: pipeline defined as code ● Stateless - makes it easier to maintain ● Declarative - pipeline.yaml ● Containers - reusability and reproducibility ● Extensible - add/use as many components as you want
  • 9. What does it look like?
  • 11. What does it look like?
  • 12. What is it made of?
  • 13. 1 What is it made of? Resources Things that you want to pass or get off of an operation/job 2 Resources Types Each resource has a type (e.g. docker image), which has to be defined in the pipeline 3 Jobs The name for an actual operation/action.
  • 14. What is it made of? resources and types ● Represent all external input and output to the jobs ● All resources (mostly) belong to a single type: docker_images ● Few primitives you’d need to be aware of are, ○ check - discovers new versions of the resource (e.g. new commit) ○ input - retrieves the resource at a particular versions (e.g. checkout a git repo at commit X) ○ output - creates a new version of the resource (e.g. docker image build outputs to ecr in AWS)
  • 15. What is it made of? As we were discussing, the most vital part of a pipeline is, job plan steps get put aggregate task do
  • 16. What is it made of? ● job → plan → get(step) ○ What’s first thing you’d require to do something with something? ○ get fetches a resource as input and ○ Makes it available for subsequent task ○ It can have attributes (e.g. version, passed, params, triggers) ● job → plan → put (step) ○ What’s next after something has been done to something? ○ put pushes output to the resources ○ Successful put follows an implicit get ○ Later step can use that updated resource
  • 17. What is it made of?
  • 18. What is it made of? ● job → plan → aggregate ○ Keyword that declares underlying sub-steps to be performed in parallel ○ Single substep failure results into failure of whole aggregate ● job → plan → do ○ Performs the underlying steps serially ○ This is the default execution method unless ○ You introduce an aggregate process and then shift
  • 19. What is it made of? ● job → plan → task (step) ○ Takes inputs from resources and ○ Provides output for subsequent task ○ Use (pre) configured docker image(s) ○ Mostly executes shell scripts ○ Not independent… ○ In a sense that cannot be rerun without running the job it belongs to (tip: try)
  • 20. What is it made of?: Shared Tasks ● Shared task repo: <scm-url>/concourse-util/src/master/ ● Collection of all shared tasks in a single place ● More generic/fundamental in nature ● Example: slack, kubernetes, git ● New task that could be used by others? ● Talk to maintainers/raise a pull-request
  • 21. What is it made of? config.yaml and helm_config.yaml ● We aim to keep things as more templative as possible ● (Noticed passing variables for resource and job?) ● One common way to achieve that is isolating the values for respective variables into somewhere other than pipeline.yaml ● That’s when config.yaml and helm_config.yaml come into play
  • 22. How to initiate pipeline? Go to #tech-ci-ink(or infra) and type ● set-pipeline main <repo-name> ● expose-pipeline main <repo-name> ● unpause-pipeline main <repo-name> ● check-resource main <repo-name> <resource-name> (e.g. repo, ci-util)
  • 23. Where do I start?
  • 24. Where do I start? ● Templative approach ● Check out the skeleton apps ● skeleton-go-api is relatively up to date ● Raise pull-request for useful changes that’ll help others too
  • 25. What if I get stuck?
  • 26. ● Checking logs ○ Specially, CI logs before Rollback was a success! Happy Helming! ● Identify exactly what part of helm upgrade/install failed ● Good to do a quick review of the helm diff ● Failure does replicate to development → test → staging → production ● Check if the relevant secrets have been installed to the namespace ○ kubectl -n <namespace> get secrets ● Any issue with the docker pull? ● Missing environment variables? What if I get stuck?: Deployment Failure
  • 27. What if I get stuck?: Deployment Failure ● pod may fail to restart for multiple release versions ○ kubectl -n <namespace> get rs,pods ○ kubectl -n <namespace> delete rs <replicaset> ● Timing out? ○ Default helm install limit is 300s (5 minutes) ○ Number of pods or replicaset x (download image + health-check pass)/maxSurge ● Solution ○ Simplify image (i.e. bare minimum) ○ Increase maxSurge value ○ Increase limit: ~/ci/helm_config.yaml
  • 28. What if I get stuck? ● Just a simple question or query? Post it in #tech-infr-ci channel ● (But hey, no one responded the other day) ● Check /roster pe-batsman to find out the batsman for any particular day ● But I need help setting up a new pipeline or improving an existing one! ● Raise a JIRA in Platform Engineering (PE) project with enough lead time [Image Source: https://giphy.com/]
  • 29. Useful Resources 1. Official Concourse Doco 2. Concourse Tutorial 3. Video Tutorial

Notas do Editor

  1. Continuous Integration: Once the feature/bugfix branch is merged to master, test and subsequent build is triggered automatically. Continuous Delivery: Continuous Integration + Automated release to all Pre-prod environments (Dev, Test, Staging) Continuous Deployment: Continuous Integration + Automated Release to all environments (Dev, Test, Staging, Production)
  2. Each job has a single build plan. Plan consists of sequence of steps