Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Continuous integration #3

Open
ghost opened this issue May 3, 2018 · 44 comments
Open

Continuous integration #3

ghost opened this issue May 3, 2018 · 44 comments
Labels
topic DevOps relevant topics

Comments

@ghost
Copy link

ghost commented May 3, 2018

Wikipedia references:

Jenkins and Travis are examples of build tools that automatically build release candidates from the version control system and uploads them to the artifact repository.
Often unit tests are also executed in the build tool, to ensure that no bugs are included in the builds.

@monperrus monperrus changed the title Build tools Build tools and continuous integration May 4, 2018
@monperrus
Copy link
Member

+1000! CI will likely be the topic of lecture #1

@SimoneStefani
Copy link

The decision between TravisCI and Jenkins is pretty radical.

TravisCI (as well as the new "kid on the block" CircleCI) is a managed solution and can be used for free by students through the GitHub Student Developer Pack also on private repositories. The configuration use a custom style in a .yml file. Documentation is good and configuration easy: it just works. However it is not very customisable.

Jenkins is a old and huge open source CD/CI tool built in Java with thousands of plugins. Needs to be managed on premise (i.e. installed and maintained on KTH servers). Configuration is complex and can be done through interface (both traditional one and Blue Ocean) but lately is becoming predominant the mindset of writing CD/CI pipelines as code (Jenkinsfile based on Groovy) for portability. Jenkins can be hard and require a lot of time in management. As many open source projects documentation is not that great because developers are expected to know how to do it.

At the end the most important thing is make students understand how these tools can be used with other technologies (version control, management tools, containers, etc.) to streamline and automate processes. Maybe the first lecture is not the best moment to introduce them; it's often the case that one shows how things (e.g. deployment) can be done manually and then it becomes obvious the need for such tools.

@monperrus
Copy link
Member

At the end the most important thing is make students understand how these tools can be used with other technologies (version control, management tools, containers, etc.) to streamline and automate processes

Agree, this is an essential aspect of DevOps, and one of the primary intended learning outcome.

@monperrus
Copy link
Member

@monperrus monperrus changed the title Build tools and continuous integration Continuous integration Oct 10, 2018
@lauploix
Copy link

lauploix commented Oct 11, 2018

The CI "engine" (Travis, Circle, Jenkins, GCB, Bamboo, QuickBuild, TeamCity, ...) is only one part of the CI question.

The key questions are:

  • Being able to properly identify the root causes for failures (Failure being "clear" (pass/fail), or fuzzy (performance regression, tests flakiness, ...))
  • Being able to report the right failures to the right person when faced with hundreds of thousands of test results, megabytes of log files, and thousands of commits per day.
  • The "broken master" problem and how to avoid it (ie tests fail on master because of logically conflicting changes)
  • Avoiding the "Christmas tree" effect (everything turns red).
  • Having a super stable and maintainable CI environment.
  • Balancing stability with speed with(out) ephemeral agents. What level of caching, and where.

@SimoneStefani
Copy link

I think the 2 questions are often interconnected. If you use a hosted CD/CI tool like Travis or Circle you have often very little control on notification and caching strategies. Also how the real machines are setup is often hidden. On the contrary Jenkins gives all the needed customisations with a high cost in maintenance. Also it is often the case that Jenkins becomes a top security concern since is one of the largest source of vulnerabilities.
Yet all the questions above are very interesting.

Regarding the last one I would say that most platforms are moving towards the idea of using heavily kubernetes to manage executors or at least ephemeral agents. Also most modern CD/CI infrastructure build software as containers that are then deployed to some registry. In this case there are a lot of interesting question regarding the Docker-in-Docker problem.

@lauploix
Copy link

Some other questions that may make sense to address, depending on the level of the students:

  • Backend (typically linux) versus frontend CI (all sorts of platforms). Why backend is so much simpler. We need to make sure students understand that not everything is Linux based.
  • Effects of CI duration on development velocity.
  • Merge queues, merge trains on "master".
  • Effects of CI flakiness on bisecting algorithms, on load, on user satisfaction, on velocity

@monperrus
Copy link
Member

Very original CI:
The List is the Process: Reliable Pre-Integration Tracking of Commits on Mailing Lists
https://arxiv.org/abs/1902.03147

@monperrus
Copy link
Member

An empirical study of the long duration of continuous integration builds
http://link.springer.com/10.1007/s10664-019-09695-9

@monperrus
Copy link
Member

The impact of continuous integration on other software development practices: a large-scale empirical study
https://par.nsf.gov/servlets/purl/10063078

@monperrus
Copy link
Member

@monperrus
Copy link
Member

@monperrus
Copy link
Member

Tool list for demo/presentation:

Jenkins, TravisCI, QuickBuild, TeamCity, Concourse, CircleCI, Gitlab, etc.

@gluckzhang gluckzhang added the topic DevOps relevant topics label Mar 25, 2019
@bbaudry
Copy link
Collaborator

bbaudry commented Apr 3, 2019

@monperrus
Copy link
Member

@monperrus
Copy link
Member

Continuous Integration Theater
https://arxiv.org/abs/1907.01602

@monperrus
Copy link
Member

Jenkins-stargate is a unit test automation framework for all your jenkins pipeline code such as jenkins shared libraries and Jenkinsfiles.
https://github.com/swedbank/jenkins-stargate

Meetup on Feb 12 2020: https://www.meetup.com/DevOps-Stockholm/events/268502971/

@bbaudry
Copy link
Collaborator

bbaudry commented Apr 16, 2020

Bazel, Build and test software
https://bazel.build/

@javierron
Copy link
Collaborator

game.ci
Continuous Integration tools for game development. Build and test Unity projects.

@bbaudry
Copy link
Collaborator

bbaudry commented Mar 25, 2021

How Do Software Developers Use GitHub Actions to Automate Their Workflows?.
http://arxiv.org/pdf/2103.12224

@monperrus
Copy link
Member

Buildkite is a platform for running fast, secure, and scalable continuous integration pipelines on your own infrastructure.
https://buildkite.com/

@monperrus
Copy link
Member

"CI/CD Pipelines Evolution and Restructuring - A Qualitative and Quantitative Study." https://dblp.org/rec/conf/icsm/ZampettiGBP21

@bbaudry
Copy link
Collaborator

bbaudry commented Mar 16, 2022

A relevant and hard topic in CI: handling test flakiness

Recent paper
A Large-Scale Longitudinal Study of Flaky Tests
https://dl.acm.org/doi/pdf/10.1145/3428270

@bbaudry
Copy link
Collaborator

bbaudry commented Mar 16, 2022

A hard and essential topic for CI for games: defect prediction
For example:
Investigating the Practicality of Just-in-time Defect Prediction with Semi-supervised Learning on Industrial Commit Data
https://www.diva-portal.org/smash/get/diva2:1336751/FULLTEXT02.pdf

@monperrus
Copy link
Member

@monperrus
Copy link
Member

Faster builds with highly par­al­lel GitHub Actions
https://rnorth.org/faster-parallel-github-builds/

@monperrus
Copy link
Member

Earthly is a build automation tool from the same era as your code. It allows you to execute all your builds in containers. This makes them self-contained, repeatable, portable and parallel.
https://docs.earthly.dev/

@bbaudry
Copy link
Collaborator

bbaudry commented May 6, 2022

an amazing github action
https://github.com/TejasvOnly/random-rickroll

@monperrus
Copy link
Member

Perforce plugin for Jenkins
https://github.com/jenkinsci/p4-plugin

@bbaudry
Copy link
Collaborator

bbaudry commented Jun 7, 2022

Tekton is an open-source framework for creating CI/CD systems
https://tekton.dev/

@monperrus
Copy link
Member

@monperrus
Copy link
Member

@monperrus
Copy link
Member

On the Use of GitHub Actions in Software Development Repositories
https://decan.lexpage.net/files/ICSME-2022.pdf

@monperrus
Copy link
Member

@monperrus
Copy link
Member

Turbo is an incremental bundler and build system optimized for JavaScript and TypeScript, written in Rust.
https://turbo.build/

@bbaudry
Copy link
Collaborator

bbaudry commented Mar 30, 2023

Analyzing the Effects of CI/CD on Open Source Repositories in GitHub and GitLab
http://arxiv.org/abs/2303.16393

@bbaudry
Copy link
Collaborator

bbaudry commented Apr 7, 2023

SoK: Machine Learning for Continuous Integration.
http://arxiv.org/abs/2304.02829

@bbaudry
Copy link
Collaborator

bbaudry commented Apr 21, 2023

T-Evos: A Large-Scale Longitudinal Study on CI Test Execution and Failure
http://ieeexplore.ieee.org/document/9933015

@monperrus
Copy link
Member

@monperrus
Copy link
Member

The CI/CD Collective at stackoverflow: https://stackoverflow.com/collectives/ci-cd

@monperrus
Copy link
Member

Kubernetes controller for GitHub Actions self-hosted runners
https://github.com/actions/actions-runner-controller

@bbaudry
Copy link
Collaborator

bbaudry commented Feb 29, 2024

Chronicles of CI/CD: A Deep Dive into its Usage Over Time
https://arxiv.org/abs/2402.17588

@bbaudry
Copy link
Collaborator

bbaudry commented Jul 11, 2024

Martin Fowler's post on continuous integration, 2024

@bbaudry
Copy link
Collaborator

bbaudry commented Jul 12, 2024

Keeping master green at scale
https://sundaram.io/slides/submitqueue.pdf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic DevOps relevant topics
Projects
None yet
Development

No branches or pull requests

6 participants