Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gitlab CI + Docker (LinuxDays 2018)

Gitlab CI + Docker (LinuxDays 2018)

Ondrej Sika

October 06, 2018
Tweet

More Decks by Ondrej Sika

Other Decks in Programming

Transcript

  1. 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.
  2. Usage of CI Automatization of - build process - testing

    - deployment - dev - staging - production - code quality - Linting - Formating
  3. Gitlab CI Runner GitLab Runner is the tool that is

    used to run your jobs and send the results back to GitLab.
  4. 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
  5. 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
  6. Register Gitlab Runner - Linux sudo gitlab-runner register # or

    gitlab-runner register --non-interactive \ --url $GITLABCI_URL \ --registration-token $GITLABCI_TOKEN
  7. 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
  8. 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'
  9. 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!
  10. Jobs - script - when - stages - only &

    except - before_job & after_job - retry
  11. Script test1_job: script: echo 'Run test1 ...' test2_job: script: -

    echo Run 'test2.1 ...' - echo Run 'test2.2 ...' - echo Run 'test2.3 ...'
  12. 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 ...'
  13. 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
  14. Only & Except job: # use regexp only: - /^issue-.*$/

    # use special keyword except: - branches
  15. Variables - Secret variables are defined in Gitlab - Some

    variables set CI runtime - Public variables are defined in .gitlab-ci.yml
  16. 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
  17. Docker - Fully supported - Easiest way how to create

    build environment - Easiest way how to run and distribute your software
  18. 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.
  19. 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
  20. 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
  21. 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
  22. Thank you & Questions Ondrej Sika email: [email protected] web: https://ondrej-sika.cz

    twitter: @ondrejsika linkedin: /in/ondrejsika/ https://sika.link/linuxdays2018