diff options
author | Marcia Ramos <marcia@gitlab.com> | 2019-03-07 23:35:23 +0000 |
---|---|---|
committer | Mike Lewis <mlewis@gitlab.com> | 2019-03-07 23:35:23 +0000 |
commit | 82bd2d470675cd31adc6dc1956532a7fa6f3ecc7 (patch) | |
tree | 1ff8a0bad10c280de9f3d4bb915efb25cf8a8ffe /doc/ci/introduction | |
parent | 1b4a20c02ea16eb6e8250636c0c0a6a6464a007b (diff) | |
download | gitlab-ce-82bd2d470675cd31adc6dc1956532a7fa6f3ecc7.tar.gz |
Add up-to-date illustations
- Pipeline status
- Job running
- Rollback button
Diffstat (limited to 'doc/ci/introduction')
-rwxr-xr-x | doc/ci/introduction/img/job_running.png | bin | 0 -> 237781 bytes | |||
-rwxr-xr-x | doc/ci/introduction/img/pipeline_status.png | bin | 0 -> 54243 bytes | |||
-rwxr-xr-x | doc/ci/introduction/img/rollback.png | bin | 0 -> 41693 bytes | |||
-rw-r--r-- | doc/ci/introduction/index.md | 192 |
4 files changed, 192 insertions, 0 deletions
diff --git a/doc/ci/introduction/img/job_running.png b/doc/ci/introduction/img/job_running.png Binary files differnew file mode 100755 index 00000000000..d5f922ceb8c --- /dev/null +++ b/doc/ci/introduction/img/job_running.png diff --git a/doc/ci/introduction/img/pipeline_status.png b/doc/ci/introduction/img/pipeline_status.png Binary files differnew file mode 100755 index 00000000000..96881f072e1 --- /dev/null +++ b/doc/ci/introduction/img/pipeline_status.png diff --git a/doc/ci/introduction/img/rollback.png b/doc/ci/introduction/img/rollback.png Binary files differnew file mode 100755 index 00000000000..38e0552f4f1 --- /dev/null +++ b/doc/ci/introduction/img/rollback.png diff --git a/doc/ci/introduction/index.md b/doc/ci/introduction/index.md new file mode 100644 index 00000000000..eeb89f80e09 --- /dev/null +++ b/doc/ci/introduction/index.md @@ -0,0 +1,192 @@ +--- +description: "An overview of Continuous Integration, Continuous Delivery, and Continuous Deployment, as well as an introduction to GitLab CI/CD." +--- + +# Introduction to CI/CD with GitLab + +In this document we'll present an overview of the concepts of Continuous Integration, +Continuous Delivery, and Continuous Deployment, as well as an introduction to +GitLab CI/CD. + +## Introduction to CI/CD methodologies + +The continuous methodologies of software development are based on +automating the execution of scripts to minimize the chance of +introducing errors while developing applications. They require +less human intervention or even no intervention at all, from the +development of new code until its deployment. + +It involves continuously building, testing, and deploying code +changes at every small iteration, reducing the chance of developing +new code based on bugged or failed previous versions. + +There are three main approaches to this methodology, each of them +to be applied according to what best suits your strategy. + +### Continuous Integration + +Consider an application which has its code stored in a Git +repository in GitLab. Developers push code changes every day, +multiple times a day. For every push to the repository, you +can create a set of scripts to build and test your application +automatically, decreasing the chance of introducing errors to your app. + +This practice is known as [Continuous Integration](https://en.wikipedia.org/wiki/Continuous_integration); +for every change submitted to an application - even to development branches - +it's built and tested automatically and continuously, ensuring the +introduced changes pass all tests, guidelines, and code compliance +standards you established for your app. + +[GitLab itself](https://gitlab.com/gitlab-org/gitlab-ce) is an +example of using Continuous Integration as a software +development method. For every push to the project, there's a set +of scripts the code is checked against. + +### Continuous Delivery + +[Continuous Delivery](https://continuousdelivery.com/) is a step +beyond Continuous Integration. Your application is not only +built and tested at every code change pushed to the codebase, +but, as an additional step, it's also deployed continuously, though +the deployments are triggered manually. + +This method ensures the code is checked automatically but requires +human intervention to manually and strategically trigger the deployment +of the changes. + +### Continuous Deployment + +[Continuous Deployment](https://www.airpair.com/continuous-deployment/posts/continuous-deployment-for-practical-people) +is also a further step beyond Continuous Integration, similar to +Continuous Delivery. The difference is that instead of deploying your +application manually, you set it to be deployed automatically. It does +not require human intervention at all to have your application +deployed. + +## Introduction to GitLab CI/CD + +GitLab CI/CD is a powerful tool built into GitLab that allows you +to apply all the continuous methods (Continuous Integration, +Delivery, and Deployment) to your software with no third-party +application or integration needed. + +### How GitLab CI/CD works + +To use GitLab CI/CD, all you need is an application codebase hosted in a +Git repository, and for your build, test, and deployment +scripts to be specified in a file called [`.gitlab-ci.yml`](../yaml/README.md), +located in the root path of your repository. + +In this file, you can define the scripts you want to run, define include and +cache dependencies, choose what commands you want to run in sequence +and those you want to run in parallel, define where you want to +deploy your app, and choose if you want to run the script automatically +or if you want to trigger it manually. Once you're familiar with +GitLab CI/CD you can add more advanced steps into the configuration file. + +To add scripts to that file, you'll need to organize them in a +sequence that suits your application and are in accordance with +the tests you wish to perform. To visualize the process, imagine +that all the scripts you add to the configuration file are the +same as the commands you run on a terminal in your computer. + +Once you've added your `.gitlab-ci.yml` configuration file to your +repository, GitLab will detect it and run your scripts with the +tool called [GitLab Runner](https://docs.gitlab.com/runner/), which +works similarly to your terminal. + +The scripts are grouped into **jobs**, and together they compose +a **pipeline**. A minimalist example of `.gitlab-ci.yml` file +could contain: + +```yml +before_script: + - apt-get install rubygems ruby-dev -y + +run-test: + script: + - ruby --version +``` + +The `before_script` attribute would install the dependencies +for your app before running anything, and a **job** called +`run-test` would print the Ruby version of the current system. +Both of them compose a **pipeline** triggered at every push +to any branch of the repository. + +GitLab CI/CD not only executes the jobs you've +set, but also shows you what's happening during execution, as you +would see in your terminal: + +![job running](img/job_running.png) + +You create the strategy for your app and GitLab runs the pipeline +for you according to what you've defined. Your pipeline status is also +displayed by GitLab: + +![pipeline status](img/pipeline_status.png) + +At the end, if anything goes wrong, you can easily +[roll back](../environments.md#rolling-back-changes) all the changes: + +![rollback button](img/rollback.png) + +### Basic CI/CD workflow + +This is a very simple example for how GitLab CI/CD fits in a common +development workflow. + +Assume that you have discussed a code implementation in an issue +and worked locally on your proposed changes. Once you push your +commits to a feature branch in a remote repository in GitLab, +the CI/CD pipeline set for your project is triggered. By doing +so, GitLab CI/CD: + +- Runs automated scripts (sequential or parallel) to: + - Build and test your app. + - Deploy to a staging environment. + - Preview the changes per merge request with Review Apps, as you + would see in your `localhost`. + +Once you're happy with your implementation: + +- Get your code reviewed and approved. +- Merge the feature branch into the default branch. + - GitLab CI/CD deploys your changes automatically to a production environment. +- And finally, you and your team can easily roll it back if something goes wrong. + +GitLab CI/CD is capable of a doing a lot more, but this workflow +exemplifies GitLab's ability to track the entire process, +without the need of any external tool to deliver your software. +And, most usefully, you can visualize all the steps through +the GitLab UI. + +### Setting up GitLab CI/CD for the first time + +To get started with GitLab CI/CD, you need to familiarize yourself +with the [`.gitlab-ci.yml`](../yaml/README.md) configuration file +syntax and with its attributes. + +This document [introduces the concepts of GitLab CI/CD in the scope of GitLab Pages](../../user/project/pages/getting_started_part_four.md), for deploying static websites. +Although it's meant for users who want to write their own Pages +script from scratch, it also serves as an introduction to the setup process for GitLab CI/CD. +It covers the very first general steps of writing a CI/CD configuration +file, so we recommend you read through it to understand GitLab's CI/CD +logic, and learn how to write your own script (or tweak an +existing one) for any application. + +For an deep view of GitLab's CI/CD configuration options, check the +[`.gitlab-ci.yml` full reference](../yaml/README.md). + +### GitLab CI/CD feature set + +- Easily set up your app's entire lifecycle with [Auto DevOps](../../topics/autodevops/index.md). +- Deploy static websites with [GitLab Pages](../../user/project/pages/index.md). +- Deploy your app to different [environments](../environments.md). +- Preview changes per merge request with [Review Apps](../review_apps/index.md). +- Develop secure and private Docker images with [Container Registry](../../user/project/container_registry.md). +- Install your own [GitLab Runner](https://docs.gitlab.com/runner/). +- [Schedule pipelines](../../user/project/pipelines/schedules.md). +- Check for app vulnerabilities with [Security Test reports](https://docs.gitlab.com/ee/user/project/merge_requests/#security-reports-ultimate). **[ULTIMATE]** + +To see all CI/CD features, navigate back to the [CI/CD index](../README.md). |