Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Gitlab CI + Docker (LinuxDays 2018)
Search
Ondrej Sika
October 06, 2018
Programming
280
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gitlab CI + Docker (LinuxDays 2018)
https://ondrej-sika.cz/blog/2018/gitlab-ci-docker-linuxdays/
Ondrej Sika
October 06, 2018
More Decks by Ondrej Sika
See All by Ondrej Sika
ZEIT, Serverless Deployments
ondrejsika
0
110
Introduction to Docker & Kubernetes @ JavaDays 2019
ondrejsika
1
340
Terraform - Infrastructure as a Code
ondrejsika
1
300
TechEd 2018, Introduction to Docker
ondrejsika
0
590
Automation using Gitlab CI and Docker, DevHeaven 2018
ondrejsika
0
230
Lightning Network aneb Bitcoin 2.0, Plzensky Barcamp, 7.4.2018
ondrejsika
0
120
Python Libraries for Bitcoin and Ethereum, PyCon SK 2018
ondrejsika
1
180
i3 tiling window manager, Install Fest 2018
ondrejsika
1
360
Docker, Zlin, 8. 2. 2018
ondrejsika
0
160
Other Decks in Programming
See All in Programming
Dockerfile CMD for Node.js
grazie1999
0
120
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
280
ソフトウェアラスタライザ
fadis
1
660
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
530
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
110
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
120
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
390
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
1
2k
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
110
Oxlintはいいぞ(続)
yug1224
1
450
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
380
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
280
The untapped power of vector embeddings
frankvandijk
2
1.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
250
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
GraphQLとの向き合い方2022年版
quramy
50
15k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Transcript
Ondrej Sika
[email protected]
@ondrejsika Linux Days 2018, Prague, 6. 10.
2018 Gitlab CI + Docker
https://sika.link/linuxdays2018
Goals - Build application - Run tests - Deploy to
staging env.
None
What is CI?
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.
Usage of CI Automatization of - build process - testing
- deployment - dev - staging - production - code quality - Linting - Formating
Gitlab CI
Gitlab CI Architecture
Gitlab CI Runner GitLab Runner is the tool that is
used to run your jobs and send the results back to GitLab.
Gitlab CI Runner
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
Install Gitlab Runner - Linux sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/b
inaries/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
Register Gitlab Runner - Linux sudo gitlab-runner register # or
gitlab-runner register --non-interactive \ --url $GITLABCI_URL \ --registration-token $GITLABCI_TOKEN
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
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'
https://github.com/ondrejsika/gitlab-ci-runner
Done, check out your Gitlab
First Job
First job git clone
[email protected]
:test/test.git cd test vim .gitlab-ci.yml git
add . git commit -m "Add CI script" git push origin master # .gitlab-ci.yml job: script: echo Hello World!
.gitlab-ci.yml
https://docs.gitlab.com/ce/ci/
Jobs - script - when - stages - only &
except - before_job & after_job - retry
Script test1_job: script: echo 'Run test1 ...' test2_job: script: -
echo Run 'test2.1 ...' - echo Run 'test2.2 ...' - echo Run 'test2.3 ...'
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 ...'
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
Only & Except job: # use regexp only: - /^issue-.*$/
# use special keyword except: - branches
Variables - Secret variables are defined in Gitlab - Some
variables set CI runtime - Public variables are defined in .gitlab-ci.yml
Variables CI CI_PROJECT_NAME, CI_PROJECT_PATH_SLUG CI_COMMIT_REF_NAME, CI_COMMIT_REF_SLUG CI_COMMIT_SHA, CI_COMMIT_TAG CI_PIPELINE_ID, CI_JOB_ID
CI_REGISTRY, CI_REGISTRY_USER, CI_REGISTRY_PASSWORD ... https://docs.gitlab.com/ce/ci/variables/README.html
Variables variables: IMAGE_TAG: myapp:$CI_PIPELINE_ID job: script: docker build -t $IMAGE_TAG
.
Docker - Fully supported - Easiest way how to create
build environment - Easiest way how to run and distribute your software
Docker Environment image: ondrejsika/ci job: image: ondrejsika/ci-go script: go build
server.go
Docker job: script: - docker build -t $IMAGE . -
docker push $IMAGE
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.
Environment deploy: script: echo 'Deploy!' environment: name: $CI_COMMIT_REF_SLUG url: https://$CI_COMMIT_REF_SLUG.example.com
Deployments - Automatic - Manual
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
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
Try it!
https://github.com/ondrejsika/linuxdays2018
https://gitlab-demo.xsika.cz/demo/linuxdays2018
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
Thank you & Questions Ondrej Sika email:
[email protected]
web: https://ondrej-sika.cz
twitter: @ondrejsika linkedin: /in/ondrejsika/ https://sika.link/linuxdays2018