2017-11-17 3 views
1

Wie stellt man eine Knoten-App von Gitlab-ci auf GKE bereit? Ich habe bereits Cluster-Integration aktiviert und funktionsfähig. Aber die Dokumentation darüber, was das bedeutet, ist fast nicht existent. Ich weiß nicht, welche Variablen mit einem GKE-Cluster verbunden sind oder wie ich es in meinem CI verwende.Gitlab 10.1 Auf Google Kubernetes Engine bereitstellen

enter image description here

Hier ist meine Gitlab-ci.yml, es das Bild in gitlabhq Registry setzt, was bedeutet, ich werde es kopieren müssen google oder irgendwie einrichten GKE eine private Registrierung zu verwenden, die niemand scheint haben es geschafft.

image: docker:git 
services: 
- docker:dind 

stages: 
- build 
- test 
- release 
- deploy 

variables: 
    DOCKER_DRIVER: overlay2 
    CONTAINER_TEST_IMAGE: registry.gitlab.com/my-proj:$CI_BUILD_REF_NAME 
    CONTAINER_RELEASE_IMAGE: registry.gitlab.com/my-proj:latest 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com 

build: 
    stage: build 
    script: 
    - docker build -t $CONTAINER_TEST_IMAGE . 
    - docker push $CONTAINER_TEST_IMAGE 

.test1: 
    stage: test 
    script: 
    - docker run $CONTAINER_TEST_IMAGE npm run eslint 

.test2: 
    stage: test 
    script: 
    - docker run $CONTAINER_TEST_IMAGE npm run mocha 

release-image: 
    stage: release 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE 
    - docker push $CONTAINER_RELEASE_IMAGE 
    only: 
    - master 

deploy: 
    ?????? 
+0

Dies ist eine bekannte rauhe Stelle https://gitlab.com/help/topics/autodevops/index.md# private-project-support –

+0

Wenn Sie einen Unready-Status für den Container und CrashLoopBackOff für den Pod erhalten, liegt das wahrscheinlich daran, dass Sie Ihre eigene Dockerfile verwenden und das Steuerdiagramm erwartet, dass Sie Port 5000 https: //docs.gitlab veröffentlichen .com/ee/topics/autodevops/# auto-build –

Antwort

1

Ich habe nicht Auto DevOps Integration verwendet, aber ich kann einen Arbeits Ansatz versuchen und verallgemeinern.

Wenn auf dem k8s-Cluster eine Pinne installiert ist, empfiehlt es sich, ein Steuerdiagramm für Ihre Anwendung zu erstellen. Wenn Sie nicht getan haben, die bereits gibt es aa Anleitung, wie man das hier: https://github.com/kubernetes/helm/blob/master/docs/charts.md (überprüfen Helm Verwendung zu Charts verwalten)

Eine grundlegende deployment.yaml von Ruder verwaltet würde wie folgt aussehen:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: {{ template "name" . }} 
    labels: 
    app: {{ template "name" . }} 
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} 
    release: {{ .Release.Name }} 
    heritage: {{ .Release.Service }} 
spec: 
    replicas: {{ .Values.replicaCount }} 
    template: 
    metadata: 
     labels: 
     app: {{ template "name" . }} 
     release: {{ .Release.Name }} 
    spec: 
     containers: 
     - name: {{ .Chart.Name }} 
      image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 
      imagePullPolicy: {{ .Values.image.pullPolicy }} 

und die entsprechenden Werte in der .Values ​​Datei:

image: 
    repository: registry.gitlab.com/my-proj 
    tag: latest 

Eine Probe .gitlab-ci.yml Datei sollte wie folgt aussehen:

... 
deploy: 
    stage: deploy 
    script: 
    - helm upgrade <your-app-name> <path-to-the-helm-chart> --install --set image.tag=$CI_BUILD_REF_NAME 

In der Erstellungsphase wird das Docker-Image veröffentlicht, und in der Bereitstellungsphase wird ein Steuerdiagramm installiert, mit dem versucht wird, das Image von registry.gitlab.com/my-proj herunterzuladen.

Ich nehme an, dass der K8s-Cluster Zugriff auf diese Registrierung hat. Wenn die Registrierung privat ist, müssen Sie ein Geheimnis in Kubernetes erstellen, die die Berechtigungszeichen hält (es sei denn, es wird automatisch erstellt): https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

Die Standard-Pipeline Bild, das Sie verwenden (image: docker:git) nicht das Ruder CLI installiert, also sollten Sie dieses Bild mit einem ändern, auf dem Helm und kubectl installiert sind. Im Gitlab Tutorial, scheinen sie bei jedem Durchlauf um die Installation zu tun: https://gitlab.com/gitlab-org/gitlab-ci-yml/blob/master/Auto-DevOps.gitlab-ci.yml (function install_dependencies() überprüfen)

+0

Ich habe ein privates Docker-Image-Repository. Ich ging die Auto DevOps-Route, wie es die Übertragung der Geheimnisse zu k8s verwaltet. Es erstellt ein Diagramm basierend auf Ihrer Dockerfile und nimmt an, dass Sie Port 5000 verwenden. Die Geheimnisse, die es macht, sind nicht permanent, was die automatische Skalierung unterbricht, aber sie arbeiten daran. –

Verwandte Themen