Continuous Integration / Continuous Development (CI/CD): Glossary

Key Points

Introduction
  • CI/CD is crucial for any reproducibility and testing

  • Take advantage of automation to reduce your workload

Exit Codes
  • Exit codes are used to identify if a command or script executed with errors or not

  • Not everyone respects exit codes

Understanding Yet Another Markup Language
  • YAML is a plain-text format, similar to JSON, useful for configuration

  • YAML is a superset of JSON, so it contains additional features like comments and anchors, while still supporting JSON.

YAML and CI
  • You should bookmark the GitLab reference on CI/CD. You’ll visit that page often.

  • A job is defined by a name and a script, at minimum.

  • Other than job names, reserved keywords are the top-level parameters defined in a YAML file.

Coffee break!
  • You’ll be back.

  • They’re the jedi of the sea.

Hello CI World
  • Adding a .gitlab-ci.yml is the first step to salvation.

  • Pipelines are made of stages, stages are made of jobs.

  • CI Linters are especially useful to check syntax before pushing changes.

Adding CI to Your Existing Code
  • Setting up CI/CD shouldn’t be mind-numbing

  • All defined jobs run in parallel by default

  • Jobs can be allowed to fail without breaking your CI/CD

Eins Zwei DRY
  • Hidden jobs can be used as templates with the extends parameter.

  • Using job templates allows you to stay DRY!

Even more builds
  • Matrices can help make many builds with variations

  • Use Variables whenever it’s convenient

Building with Images
  • We can shorten a lot of the setup with Docker images

Coffee break!
  • Stupid mistakes happen, but telling a computer to do what you mean versus what you say is hard

All the World's a Stage
  • Stages allow for a mix of parallel/serial execution.

  • Stages help define job dependencies.

A Skimmer Higgs
  • Making jobs aware of each other is pretty easy.

  • Artifacts are pretty neat.

  • We’re too naive.

Getting into the Spy Game (Optional)
  • Service accounts provide an extra layer of security between the outside world and your account

  • Environment variables in GitLab CI/CD allow you to hide protected information from others who can see your code

Making Plots to Take Over The World
  • Another script, another job, another stage, another artifact.

Let's Actually Make A Test (For Real)
  • This kind of test is a regression test, as we’re testing assuming the code up to this point was correct.

  • This is not a unit test. Unit tests would be testing individual pieces of the atlas/athena or CMSSW code-base, or specific functionality you wrote into your algorithms.

Homework
  • Use everything you’ve learned to write your own CI/CD!

Glossary

The glossary would go here, formatted as:

{:auto_ids}
key word 1
:   explanation 1

key word 2
:   explanation 2

({:auto_ids} is needed at the start so that Jekyll will automatically generate a unique ID for each item to allow other pages to hyperlink to specific glossary entries.) This renders as:

key word 1
explanation 1
key word 2
explanation 2