+ All Categories
Home > Documents > Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika [email protected] @ondrejsika...

Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika [email protected] @ondrejsika...

Date post: 22-May-2020
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
43
Ondrej Sika [email protected] @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker
Transcript
Page 1: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Ondrej [email protected]@ondrejsika

Linux Days 2018,Prague, 6. 10. 2018

Gitlab CI + Docker

Page 2: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

https://sika.link/linuxdays2018

Page 3: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Goals- Build application- Run tests- Deploy to staging env.

Page 4: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker
Page 5: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

What is CI?

Page 6: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

What is CI?In software engineering, continuous integration is the practice of merging all developer working copies to a shared mainline several times a day.

Page 7: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Usage of CIAutomatization of

- build process- testing- deployment

- dev

- staging

- production

- code quality- Linting

- Formating

Page 8: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Gitlab CI

Page 9: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Gitlab CI Architecture

Page 10: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Gitlab CI RunnerGitLab Runner is the tool that is used to run your jobs and send the results back to GitLab.

Page 11: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Gitlab CI Runner

Page 12: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Gitlab CI Runner

Run on:

- Linux- Docker- Windows

How to install & configure:

- https://docs.gitlab.com/runner/install/- https://docs.gitlab.com/runner/register/

- https://github.com/ondrejsika/gitlab-ci-runner

Page 13: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Install Gitlab Runner - Linux

sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

sudo chmod +x /usr/local/bin/gitlab-runner

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

sudo gitlab-runner start

Page 14: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Register Gitlab Runner - Linux

sudo gitlab-runner register

# or

gitlab-runner register --non-interactive \ --url $GITLABCI_URL \ --registration-token $GITLABCI_TOKEN

Page 15: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Install Gitlab Runner - Docker

docker run -d \ --name gitlab-runner \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /builds:/builds \ gitlab/gitlab-runner:latest

Page 16: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Register Gitlab Runner - Docker

docker exec -ti gitlab-runner gitlab-runner register \ --non-interactive \ --url $GITLABCI_URL \ --registration-token $GITLABCI_TOKEN \ --name $(hostname) \ --executor docker \ --docker-image docker:git \ --docker-volumes '/var/run/docker.sock:/var/run/docker.sock' \ --docker-volumes '/builds:/builds'

Page 17: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

https://github.com/ondrejsika/gitlab-ci-runner

Page 18: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Done, check out your Gitlab

Page 19: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

First Job

Page 20: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

First job

git clone [email protected]:test/test.gitcd testvim .gitlab-ci.ymlgit add .git commit -m "Add CI script"git push origin master

# .gitlab-ci.yml

job: script: echo Hello World!

Page 21: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

.gitlab-ci.yml

Page 22: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

https://docs.gitlab.com/ce/ci/

Page 23: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Jobs

- script- when- stages- only & except- before_job & after_job- retry

Page 24: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Script

test1_job: script: echo 'Run test1 ...'

test2_job: script: - echo Run 'test2.1 ...' - echo Run 'test2.2 ...' - echo Run 'test2.3 ...'

Page 25: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Stages

stages: - build - test - deploy

build_job: stage: build script: echo 'Building ...'

test1_job: stage: test script: echo Run test1 ...'

test2_job: stage: test script: echo Run test2 ...'

Page 26: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

When

cleanup_build_job: script: echo Cleanup build when failed ... when: on_failure

test_job: script: echo Run test ...

deploy_job: script: echo Deploy ... when: manual

cleanup_job: script: echo Full cleanup ... when: always

Page 27: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Only & Except

job: # use regexp only: - /^issue-.*$/ # use special keyword except: - branches

Page 28: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Variables

- Secret variables are defined in Gitlab

- Some variables set CI runtime- Public variables are defined in

.gitlab-ci.yml

Page 29: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Variables

CICI_PROJECT_NAME, CI_PROJECT_PATH_SLUGCI_COMMIT_REF_NAME, CI_COMMIT_REF_SLUGCI_COMMIT_SHA, CI_COMMIT_TAGCI_PIPELINE_ID, CI_JOB_IDCI_REGISTRY, CI_REGISTRY_USER, CI_REGISTRY_PASSWORD...

https://docs.gitlab.com/ce/ci/variables/README.html

Page 30: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Variables

variables: IMAGE_TAG: myapp:$CI_PIPELINE_ID

job: script: docker build -t $IMAGE_TAG .

Page 31: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Docker

- Fully supported- Easiest way how to create build

environment- Easiest way how to run and

distribute your software

Page 32: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Docker Environment

image: ondrejsika/ci

job: image: ondrejsika/ci-go script: go build server.go

Page 33: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Docker

job: script: - docker build -t $IMAGE . - docker push $IMAGE

Page 34: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Environments

Environment is used to define that a job deploys to a specific environment.

If environment is specified and no environment under that name exists, a new one will be created automatically.

Page 35: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Environment

deploy: script: echo 'Deploy!' environment: name: $CI_COMMIT_REF_SLUG url: https://$CI_COMMIT_REF_SLUG.example.com

Page 36: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Deployments - Automatic- Manual

Page 37: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Auto vs Manual Deployments

auto_deploy_job: script: echo Auto Deploy! environment: name: deployment-$CI_PIPELINE_ID

manual_deploy_job: when: manual script: echo Manual Deploy! environment: name: deployment-$CI_PIPELINE_ID

Page 38: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Stop Deployment

deploy_job: stage: deploy script: echo Deploy! environment: name: deployment-$CI_PIPELINE_ID on_stop: stop_deploy_job

stop_deploy_job: stage: deploy script: echo Stop! when: manual environment: name: deployment-$CI_PIPELINE_ID action: stop

Page 39: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Try it!

Page 40: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

https://github.com/ondrejsika/linuxdays2018

Page 41: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

https://gitlab-demo.xsika.cz/demo/linuxdays2018

Page 42: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Resources

- https://about.gitlab.com/features/gitlab-ci-cd/ - https://docs.gitlab.com/ce/ci/ - https://docs.gitlab.com/ce/ci/yaml/- https://docs.gitlab.com/ce/ci/quick_start/

- https://ondrej-sika.cz/blog/2018/gitlab-ci-docker-linuxdays/- https://github.com/ondrejsika/ondrejsika-ci-docker- https://github.com/ondrejsika/traefik-ssl- https://github.com/ondrejsika/gitlab-ci-runner

Page 43: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker

Thank you & Questions

Ondrej Sika

email: [email protected]: https://ondrej-sika.cz twitter: @ondrejsikalinkedin: /in/ondrejsika/

https://sika.link/linuxdays2018


Recommended