Benutzer-Werkzeuge

Webseiten-Werkzeuge


docu:gitlab-ci

Inhaltsverzeichnis

Gitlab CI/CD

Wenn in einem Code Repository eine Datei namens .gitlab-ci.yml existiert, so wird GitLab versuchen mit Hilfe der darin enthaltenen Anweisungen das Software in dem Projekt zu bauen, evtl. zu testen und bei Erfolg in eine Zielumgebung zu deployen. In der GitLab Instanz werden standardmäßig die Build-Processe über Kubernetes in der ICC ausgeführt. Für Spezialfälle können aber auch eigene Build-Runner angebunden werden.

Um ein Projekte für die Ausführung in der ICC vorzubereiten muss der Code als Docker-Image zur Verfügung stehen. Die folgende Vorlage illustriert dies anhand eine Golang-Projektes. Für andere Sprachen müssen die Anweisungen im Abschnitt buildAndTest angepasst werden.

Vorlage:

stages:
  - build
  - test
  - dockerize

variables:
  DOCKER_REGISTRY: "docker-hub.informatik.haw-hamburg.de/$CI_PROJECT_NAMESPACE"
  IMAGE_NAME: "k8s-job-monitor"
  DOCKER_HOST: "localhost:2375"
cache:
  paths:
    - vendor

before_script:
  - git config --global http.sslVerify true

buildAndTest:
  stage: build
  only:
   - master
  image: nexus.informatik.haw-hamburg.de/golang:1.8.3
  variables:
    CGO_ENABLED: "0"
    GOOS: "linux"
  script:
    - glide install
   # no tests for now - go test gitlab.informatik.haw-hamburg.de/timadorus/timadorus-monitor/$(glide novendor)
    - go build -a -installsuffix cgo gitlab.informatik.haw-hamburg.de/timadorus/k8s-job-monitor
    - mkdir -p /$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/
    - mv ./k8s-job-monitor /$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/
  artifacts:
    paths:
    - ./k8s-job-monitor

deploy:
  stage: dockerize
  only:
   - master
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - echo "before_script overriden"
  dependencies:
    - buildAndTest
  script:
    - docker build -t $SERVICE_NAME:latest .
    - docker tag $SERVICE_NAME:latest $DOCKER_REGISTRY/$SERVICE_NAME:$CI_PIPELINE_ID
    - docker tag $SERVICE_NAME:latest $DOCKER_REGISTRY/$SERVICE_NAME:latest
    - docker tag $SERVICE_NAME:latest $DOCKER_REGISTRY/$SERVICE_NAME:$CI_COMMIT_SHA

    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $DOCKER_REGISTRY

    - docker push $DOCKER_REGISTRY/$SERVICE_NAME:$CI_PIPELINE_ID
    - docker push $DOCKER_REGISTRY/$SERVICE_NAME:latest
    - docker push $DOCKER_REGISTRY/$SERVICE_NAME:$CI_COMMIT_SHA

Siehe https://docs.gitlab.com/ce/ci/runners/README.html für weitere Details.

docu/gitlab-ci.txt · Zuletzt geändert: 2017/08/21 15:08 von sage