<style>
.present { text-align: left }
.present h2 { text-align: center }
</style>
# GitLab CI overview
---
## CI/CD services in IT
* [GitLab CI](https://cern.service-now.com/service-portal/article.do?n=KB0003690)
* [Jenkins self-service instances](https://cern.service-now.com/service-portal/service-element.do?name=CI-Jenkins)
As part of [_Version Control Systems_](https://cern.service-now.com/service-portal/function.do?name=version-control), a set of services to developers also including [GitLab](https://cern.service-now.com/service-portal/service-element.do?name=git-service), [JIRA](https://cern.service-now.com/service-portal/service-element.do?name=JIRA-service), distribution ([Nexus](https://cern.service-now.com/service-portal/service-element.do?name=soft-comp-rep), [Docker registry](https://docs.docker.com/registry/introduction/))...
---
## GitLab CI/CD adoption
![](https://codimd.web.cern.ch/uploads/upload_3fb4dd3790795c81d4cddf3f3703991a.png)
At least 2 orders of magnitude more GitLab CI jobs than Jenkins CI jobs
---
## GitLab CI/CD pipelines
![](https://codimd.web.cern.ch/uploads/upload_199beddb87cd720053027bf4667a34ce.png)
---
## GitLab CI shared runners
* Docker containers
* Dynamically provisioned Openstack VMs
* Fully automated, scalable, job isolation
* October 2019: ~40 VMs, ~150 cores, ~600 GB
+300 user-provisioned "specific runners" (Windows, electronic designs, Kubernetes etc.)
---
## Shared runner usage
![](https://codimd.web.cern.ch/uploads/upload_3583e1c8ec9eea50c3942ccb33d8c578.png)
---
## GitLab CI design highlights
* CI definition under version control (`.gitlab-ci.yml`)
* Fork workflow: CI runs in the context of the fork
* "Specific runners" attached to individual projects
* Must be shared with each fork
---
## Advanced usage
* GitLab CI for large projects: [doc](https://docs.gitlab.com/ee/ci/large_repositories/)
* Custom "executor" in GitLab runners: [doc](https://docs.gitlab.com/runner/executors/custom.html)
* IT involvement to automate sharing "specific runners" with all forks
* e.g. class of `atlas` shared runners
* Take inspiration from [CI for GitLab itself](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab-ci.yml)?