jenkins vs gitlab ci

102
GitLab CI vs Jenkins Ivan Nemytchenko | CEE SECR | October 29, 2016

Upload: cee-secr

Post on 16-Apr-2017

1.423 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Jenkins vs GitLab CI

GitLab CI vs JenkinsIvan Nemytchenko | CEE SECR | October 29, 2016

Page 2: Jenkins vs GitLab CI

Continous Integration

Page 3: Jenkins vs GitLab CI

Motivational part of CI

Let's prevent integration problems!

Page 4: Jenkins vs GitLab CI

Motivational part of CI

Let's combine all pieces together once a day to

check if it works!

Page 5: Jenkins vs GitLab CI

No need to motivate anyone anymore

Page 6: Jenkins vs GitLab CI

CI is like VC

Page 7: Jenkins vs GitLab CI

Practical part of CI

CI used to be manual

Page 8: Jenkins vs GitLab CI

Practical part of CI

CI configuration used to require separate job

position

Page 9: Jenkins vs GitLab CI

Modern CI tools are not usually that complex

Page 10: Jenkins vs GitLab CI

You can use CI not only in big projects

Page 11: Jenkins vs GitLab CI

GitLab CI vs JenkinsНапрямую сравнивать неверно

Но мы сделаем это!

Page 12: Jenkins vs GitLab CI

Сравниваем в лоб→ GitLab CI - часть основного продукта→ Jenkins - самостоятельный продукт

Page 13: Jenkins vs GitLab CI
Page 14: Jenkins vs GitLab CI
Page 15: Jenkins vs GitLab CI
Page 16: Jenkins vs GitLab CI
Page 17: Jenkins vs GitLab CI
Page 18: Jenkins vs GitLab CI

Сравниваем в лоб→ GitLab CI - Ruby on Rails + Go

→ Jenkins - Java

Page 19: Jenkins vs GitLab CI

Сравниваем в лоб→ GitLab CI - GitLab + Runners→ Jenkins - Master + Slaves

Page 20: Jenkins vs GitLab CI

Сравниваем в лоб→ GitLab CI - Ничего лишнего, Convention over

configuration→ Jenkins - Плагины разработанные сообществом

Page 21: Jenkins vs GitLab CI

Сравниваем в лоб→ GitLab CI - Technology-agnostic

→ Jenkins - В каком-то смысле тоже, но плагины

Page 22: Jenkins vs GitLab CI

Сравниваем в лоб→ GitLab CI - Configuration as code→ Jenkins - Настройка через UI*

Page 23: Jenkins vs GitLab CI
Page 24: Jenkins vs GitLab CI
Page 25: Jenkins vs GitLab CI
Page 26: Jenkins vs GitLab CI
Page 27: Jenkins vs GitLab CI
Page 28: Jenkins vs GitLab CI
Page 29: Jenkins vs GitLab CI
Page 30: Jenkins vs GitLab CI
Page 31: Jenkins vs GitLab CI
Page 32: Jenkins vs GitLab CI
Page 33: Jenkins vs GitLab CI
Page 34: Jenkins vs GitLab CI

CatGrep Sophisticated Technologies inc.

→ file1.txt→ file2.txt

Page 35: Jenkins vs GitLab CI

CatGrep Sophisticated Technologies inc.

The code is on GitLab.com

Page 36: Jenkins vs GitLab CI

Requirement #1Concatenation result should contain

"Hello world"

Page 37: Jenkins vs GitLab CI

cat file1.txt file2.txt | grep -q "Hello world"

Page 38: Jenkins vs GitLab CI

Run first test inside CI

Page 39: Jenkins vs GitLab CI

Run first test inside CI.gitlab-ci.yml

Page 40: Jenkins vs GitLab CI

Run first test inside CItest: script: cat file1.txt file2.txt | grep -q 'Hello world'

Page 41: Jenkins vs GitLab CI

Run first test inside CI

Page 42: Jenkins vs GitLab CI

Run first test inside CI

Page 43: Jenkins vs GitLab CI

Requirement #2Package code before sending it to customer

Page 44: Jenkins vs GitLab CI

Package code

test: script: cat file1.txt file2.txt | grep -q 'Hello world'

package: script: cat file1.txt file2.txt | gzip > package.gz

Page 45: Jenkins vs GitLab CI

Package code

Page 46: Jenkins vs GitLab CI

Make results of your build downloadable

Page 47: Jenkins vs GitLab CI

Make results of your build downloadable

Page 48: Jenkins vs GitLab CI

Make results of your build downloadable

Page 49: Jenkins vs GitLab CI

Make results of your build downloadable

test: script: cat file1.txt file2.txt | grep -q 'Hello world'

package: script: cat file1.txt file2.txt | gzip > packaged.gz artifacts: paths: - packaged.gz

Page 50: Jenkins vs GitLab CI

Run jobs sequentially

Page 51: Jenkins vs GitLab CI

Run jobs sequentially

Page 52: Jenkins vs GitLab CI

Speeding up the build

Page 53: Jenkins vs GitLab CI

Removing Duplication

Page 54: Jenkins vs GitLab CI
Page 55: Jenkins vs GitLab CI

Learning what Docker image to use

Page 56: Jenkins vs GitLab CI

Learning what Docker image to use

Page 57: Jenkins vs GitLab CI

Learning what Docker image to use

image: alpine

Page 58: Jenkins vs GitLab CI

Learning what Docker image to use

Page 59: Jenkins vs GitLab CI

Learning what Docker image to use

Page 60: Jenkins vs GitLab CI

Requirement #3ISO instead of GZIP

Page 61: Jenkins vs GitLab CI

Dealing with complex scenarios

Page 62: Jenkins vs GitLab CI

Dealing with complex scenarios

script:- apk add -U cdrkit- mkisofs -o ./packaged.iso ./compiled.txt

Page 63: Jenkins vs GitLab CI
Page 64: Jenkins vs GitLab CI
Page 65: Jenkins vs GitLab CI

→ 3 stages→ passing files between stages→ downloadable artifacts→ optimized execution time

→ custom pipeline

Page 66: Jenkins vs GitLab CI

@inemation

[email protected]

→ bit.ly/gitlab-ci1→ bit.ly/gitlab-ci2

Page 67: Jenkins vs GitLab CI

→ Environment variables→ Environments (Staging, Production)

→ GitLab Pages→ Roillback

→ Manual deployment

Page 68: Jenkins vs GitLab CI

Requirement #4Publish a website, containing packages

Page 69: Jenkins vs GitLab CI

Publish a websiteaws s3 cp ./ s3://yourbucket/ --recursive

Page 70: Jenkins vs GitLab CI

Publish a website

Page 71: Jenkins vs GitLab CI

Publish a website

Page 72: Jenkins vs GitLab CI

First Automated Deployment

→ awscli can be installed using pip

→ pip goes together with python

Page 73: Jenkins vs GitLab CI

First Automated Deployment

s3: image: python stage: deploy script: - pip install awscli - aws s3 cp ./ s3://yourbucket/ --recursive

Page 74: Jenkins vs GitLab CI

First Automated Deployment

AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

Page 75: Jenkins vs GitLab CI

First Automated Deployment

Page 76: Jenkins vs GitLab CI

Keeping Secret Things Secret

Page 77: Jenkins vs GitLab CI

Keeping Secret Things SecretSettings → Variables

Page 78: Jenkins vs GitLab CI

Keeping Secret Things Secrets3: image: python stage: deploy script: - pip install awscli - aws s3 cp ./ s3://yourbucket/ --recursive

Page 79: Jenkins vs GitLab CI

Keeping Secret Things Secret

Page 80: Jenkins vs GitLab CI

Requirement #5Two developers on the project

Page 81: Jenkins vs GitLab CI

Two developers on the project

Page 82: Jenkins vs GitLab CI

Two developers on the project

Page 83: Jenkins vs GitLab CI

Requirement #6Need a separate place

for testing

Page 84: Jenkins vs GitLab CI

Separate place for testing

GitLab Pages

Page 85: Jenkins vs GitLab CI

Host website using GitLab Pages

→ your job should be named "pages"→ put your files into "public" folder

→ specify "artifacts" section with this "public" folder

Page 86: Jenkins vs GitLab CI

Host website using GitLab Pages

http://<username>.gitlab.io/<projectname>

Page 87: Jenkins vs GitLab CI

Host website using GitLab Pages

pages: stage: deploy image: alpine script: - mkdir -p ./public && cp ./*.* ./public/ artifacts: paths: - public except: - master

Page 88: Jenkins vs GitLab CI

Separate place for testing

s3: image: python stage: deploy script: - pip install awscli - aws s3 cp ./ s3://yourbucket/ --recursive only: - master

pages: image: alpine stage: deploy script: - mkdir -p ./public && cp ./*.* ./public/ artifacts: paths: - public except: - master

Page 89: Jenkins vs GitLab CI

Separate place for testing

Page 90: Jenkins vs GitLab CI

Separate place for testing

Page 91: Jenkins vs GitLab CI

Separate place for testing

Page 92: Jenkins vs GitLab CI
Page 93: Jenkins vs GitLab CI

Using Environments

Page 94: Jenkins vs GitLab CI

Using Environments

Page 95: Jenkins vs GitLab CI

Using Environments

Page 96: Jenkins vs GitLab CI

Requirement #7Do not mess up production

Page 97: Jenkins vs GitLab CI

Do not mess up production

Page 98: Jenkins vs GitLab CI

Do not mess up production

Page 99: Jenkins vs GitLab CI
Page 100: Jenkins vs GitLab CI
Page 101: Jenkins vs GitLab CI
Page 102: Jenkins vs GitLab CI

Questions?@inem

[email protected]

→ bit.ly/gitlab-ci1→ bit.ly/gitlab-ci2