Benutzer-Werkzeuge

Webseiten-Werkzeuge


docu:gitlab-ci

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
docu:gitlab-ci [2017/11/23 07:21]
sage
docu:gitlab-ci [2020/05/19 12:35] (aktuell)
abq319 [Docker Images in Gitlab Build bauen]
Zeile 1: Zeile 1:
-====== ​GitLab ​CI/CD ======+====== ​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. ​Einen Überblick über die Möglichkeiten des Gitlab-CI bietet https://​​​docs.gitlab.com/​​​ee/​​​ci/​​​README.html+Gitlab bietet eine automatische Continous Build/​Continous Deployment Pipeline. Damit wird in jedem, entsprend vorbereiteten,​ Projekt nach einer Änderung des Git-Repositories automatisch der Code ausgechecked,​ gebaut, evtl. Tests durchgeführt und in ein ausführbares Format gebracht. Wenn diese Schritte erfolgreich sind, kann das fertige Programm auch in der [[:​docu:​informatikcomputecloud|ICC]] automatisch ausgeführt werden und Messdaten direkt in Gitlab beobachtet werden. 
 + 
 +Im Wurzelverzeichnis eines Projektes muss die Datei ''​.gitlab-ci.yml'' ​existieren. Diese wird dann mit im gemeinsamen ​GitLab-Runner ​über Kubernetes ​innerhalb ​der ICC ausgeführt. Für Spezialfälle können auch eigene Runner angebunden werden. ​Siehe [[:docu:gitlab-ci#​eigene_build_runner|ensprechenden Abschnitt]] weiter unten.
  
 ===== Minimales .gitlab-ci.yml ===== ===== Minimales .gitlab-ci.yml =====
Zeile 7: Zeile 9:
 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 ''​job_build.script''​ angepasst werden. Eine vollständige Dokumentation für die Build-Spezifikation findet sich hier: [[https://​docs.gitlab.com/​ee/​ci/​yaml/​README.html|https://​docs.gitlab.com/​ee/​ci/​yaml/​README.html]] 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 ''​job_build.script''​ angepasst werden. Eine vollständige Dokumentation für die Build-Spezifikation findet sich hier: [[https://​docs.gitlab.com/​ee/​ci/​yaml/​README.html|https://​docs.gitlab.com/​ee/​ci/​yaml/​README.html]]
  
-Vorlage:+Vorlage:<​code>​
  
-<​code>​ 
 stages: stages:
   - build   - build
Zeile 18: Zeile 19:
 job_build: job_build:
   stage: build   stage: build
-  image: ​nexus.informatik.haw-hamburg.de/​golang:​1.8.3+  image: golang:​1.8.3
   variables:   variables:
     CGO_ENABLED:​ "​0"​     CGO_ENABLED:​ "​0"​
Zeile 28: Zeile 29:
     - mkdir -p /​$CI_PROJECT_NAMESPACE/​$CI_PROJECT_NAME/​     - mkdir -p /​$CI_PROJECT_NAMESPACE/​$CI_PROJECT_NAME/​
     - mv ./​k8s-job-monitor /​$CI_PROJECT_NAMESPACE/​$CI_PROJECT_NAME/​     - mv ./​k8s-job-monitor /​$CI_PROJECT_NAMESPACE/​$CI_PROJECT_NAME/​
 +
 </​code>​ </​code>​
 +
  
 ===== Während des Build-Prozesses Zugriff auf anderes Gitlab-Repo gewähren ===== ===== Während des Build-Prozesses Zugriff auf anderes Gitlab-Repo gewähren =====
Zeile 44: Zeile 47:
 before_script:​ before_script:​
   # setup SSH if on ubuntu   # setup SSH if on ubuntu
-  - eval $(bash ./​scripts/​setup-ssh-on-ubuntu.sh "​$SSH_PRIVATE_KEY"​)+  - eval $(bash ./​scripts/​setup-ssh.sh "​$SSH_PRIVATE_KEY"​)
 </​code>​ </​code>​
  
Zeile 85: Zeile 88:
     mkdir -p ~/.ssh     mkdir -p ~/.ssh
  
-    [[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n">​ ~/​.ssh/​config+    [[ -f /​.dockerenv ​|]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n">​ ~/​.ssh/​config
   ;;   ;;
   *)   *)
Zeile 92: Zeile 95:
 esac esac
 </​code>​ </​code>​
 +
  
 ===== Docker Images in Gitlab Build bauen ===== ===== Docker Images in Gitlab Build bauen =====
  
-Es ist natürlich auch möglich Docker Images in einer Gitlab Pipeline zu bauen. Dazu ist die DOCKER_HOST Variable in der Gitlab Job Beschreibung zu setzen und das stable-dind images als "​service"​ im Job zu setzen. Beispiel für eine .gitlab-ci.yml aus [[https://gitlab.informatik.haw-hamburg.de/​ail/​haw-world/​blob/​master/​.gitlab-ci.yml|https://​gitlab.informatik.haw-hamburg.de/​ail/​haw-world/​blob/​master/​.gitlab-ci.yml]]:​ +Es ist natürlich auch möglich Docker Images in einer Gitlab Pipeline zu bauen. Dazu ist die DOCKER_HOST Variable in der Gitlab Job Beschreibung zu setzen und das stable-dind images als "​service"​ im Job zu setzen. Beispiel für eine .gitlab-ci.yml aus [[https://git.haw-hamburg.de/​icc/haw-world/-/​blob/​master/​.gitlab-ci.yml|https://​git.haw-hamburg.de/​icc/haw-world/-/​blob/​master/​.gitlab-ci.yml]]:​
 <​code>​ <​code>​
 +
 stages: stages:
     - dockerize     - dockerize
  
 variables: variables:
- DOCKER_HOST:​ "​tcp://​localhost:​2375"​ + ​DOCKER_REGISTRY:​ "git.haw-hamburg.de:5005"
- DOCKER_REGISTRY:​ "nexus.informatik.haw-hamburg.de"​+
  ​SERVICE_NAME:​ "​haw-world"​  ​SERVICE_NAME:​ "​haw-world"​
 + ​DOCKER_TLS_CERTDIR:​ "/​certs"​
  
-createImage:+create_image:
  ​stage:​ dockerize  ​stage:​ dockerize
- ​image: ​nexus.informatik.haw-hamburg.de/​docker:​stable-dind+ ​image: ​docker:19.03.3
  ​services:​  ​services:​
-   ​- ​nexus.informatik.haw-hamburg.de/​docker:stable-dind+   ​- ​docker:19.03.3-dind 
 + tags: 
 +   - dind 
 +   - docker
  ​script:​  ​script:​
-   - docker login -u $NEXUS_USER ​-p $NEXUS_PW ​$DOCKER_REGISTRY +   - docker login -u gitlab-ci-token ​-p $CI_JOB_TOKEN ​$DOCKER_REGISTRY 
-   - docker build -t $DOCKER_REGISTRY/​$SERVICE_NAME:​$CI_PIPELINE_ID . +   - docker build -t $SERVICE_NAME:​latest . 
-   - docker push $DOCKER_REGISTRY/​$SERVICE_NAME:​$CI_PIPELINE_ID+   - docker tag $SERVICE_NAME:​latest ​$DOCKER_REGISTRY/​$CI_PROJECT_NAMESPACE/​$SERVICE_NAME:​latest 
 +   - docker push $DOCKER_REGISTRY/​$CI_PROJECT_NAMESPACE/​$SERVICE_NAME:​latest 
 </​code>​ </​code>​
 +
  
 ===== Deployment einer Applikation aus Gitlab in die ICC ===== ===== Deployment einer Applikation aus Gitlab in die ICC =====
docu/gitlab-ci.1511418061.txt.gz · Zuletzt geändert: 2017/11/23 07:21 von sage