Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika [email protected] @ondrejsika...
Transcript of Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika [email protected] @ondrejsika...
![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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/3.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/4.jpg)
![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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/5.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/6.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/7.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/8.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/9.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/10.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/11.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/12.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/13.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/14.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/15.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/16.jpg)
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 18: Gitlab CI + Docker - LinuxDays · 2018-10-08 · Ondrej Sika ondrej@ondrejsika.com @ondrejsika Linux Days 2018, Prague, 6. 10. 2018 Gitlab CI + Docker](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/18.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/19.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/20.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/21.jpg)
.gitlab-ci.yml
![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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/23.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/24.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/25.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/26.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/27.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/28.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/29.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/30.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/31.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/32.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/33.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/34.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/35.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/36.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/37.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/38.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/39.jpg)
Try it!
![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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/42.jpg)
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](https://reader033.fdocument.pub/reader033/viewer/2022042223/5ec99251db40ba3c18666054/html5/thumbnails/43.jpg)
Thank you & Questions
Ondrej Sika
email: [email protected]: https://ondrej-sika.cz twitter: @ondrejsikalinkedin: /in/ondrejsika/
https://sika.link/linuxdays2018