Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
devops:skaffold [2021/02/18 19:52] – [Настройка деплоя во внешний кластер] admindevops:skaffold [2021/04/22 09:44] (current) – [Настройка проекта в GitLab] admin
Line 52: Line 52:
  
 ====== Настройка CI/CD на базе GitLab и Skaffold ====== ====== Настройка CI/CD на базе GitLab и Skaffold ======
 +===== Настройка проекта в GitLab =====
 +  * Включаем CI/CD для проекта - **Settings -> General -> Visibility, project features, permissions -> Pipelines**
 +  * Настраиваем переменные - **Settings -> CI/CD -> Variables**. Нужно добавить **DOCKER_REGISTRY_URL** и конфиги для кластеров (переменные **KUBECONFIG_PROD** и **KUBECONFIG_TEST**), отличных от того, где работает раннер (в своем кластере раннер имеет права). Если **docker registry** требует аутентифиуации, то добавляем переменные **DOCKER_REGISTRY_LOGIN** и **DOCKER_REGISTRY_PASS** и расскоментируем в **.gitlab-ci.yaml** соответствующие строчки.
 +
 ===== .gitlab-ci.yml ===== ===== .gitlab-ci.yml =====
 <code> <code>
Line 81: Line 85:
     name: docker.rdleas.ru/k8s-skaffold/skaffold:v1.19.0     name: docker.rdleas.ru/k8s-skaffold/skaffold:v1.19.0
   stage: build   stage: build
-  before_script: +#  before_script: 
-    - docker login -u `echo $DOCKER_REGISTRY_LOGIN` -p `echo $DOCKER_REGISTRY_PASS` `echo $DOCKER_REGISTRY_URL`+   - docker login -u `echo $DOCKER_REGISTRY_LOGIN` -p `echo $DOCKER_REGISTRY_PASS` `echo $DOCKER_REGISTRY_URL`
 #https://skaffold.dev/docs/references/cli/ #https://skaffold.dev/docs/references/cli/
   script:   script:
Line 132: Line 136:
       namespace: vrm       namespace: vrm
       valuesFiles:       valuesFiles:
-        - chart/values_dev.yaml+        - '{{.VALUES}}'
       artifactOverrides:       artifactOverrides:
         image: vrm         image: vrm
Line 150: Line 154:
 COPY --from=builder /app/. ./ COPY --from=builder /app/. ./
 CMD ["/usr/local/openjdk-11/bin/java", "-jar", "/app/target/vrm-1.0.0-SNAPSHOT.jar"]</code> CMD ["/usr/local/openjdk-11/bin/java", "-jar", "/app/target/vrm-1.0.0-SNAPSHOT.jar"]</code>
-Тут у нас двухстадийная сборка. \\+Тут у нас двухстадийная сборка (**multistage**). \\
 Сначала мы запускаем контейнер **maven**, который получает псевдоним **builder**, который выкачивает зависимости из локальной **proxy**-репы **maven-central** на базе **nexus** (директория **.m2** с файлом **settings.xml** лежит в репозитории проекта). Сначала мы запускаем контейнер **maven**, который получает псевдоним **builder**, который выкачивает зависимости из локальной **proxy**-репы **maven-central** на базе **nexus** (директория **.m2** с файлом **settings.xml** лежит в репозитории проекта).
 А далее мы собираем второй контейнер на базе образа **OpenJDK JRE**, в который копируем файлики, полученные в результате работы первого контейнера-билдера. А далее мы собираем второй контейнер на базе образа **OpenJDK JRE**, в который копируем файлики, полученные в результате работы первого контейнера-билдера.
Line 175: Line 179:
   namespace: vrm   namespace: vrm
 rules: rules:
-- apiGroups: ["", "extensions", "apps"]+- apiGroups: ["*"]
   resources: ["*"]   resources: ["*"]
   verbs: ["*"]   verbs: ["*"]
Line 236: Line 240:
   KUBECONFIG=./vrm-admin-kubeconfig kubectl get po -n vrm   KUBECONFIG=./vrm-admin-kubeconfig kubectl get po -n vrm
 Теперь - добавляем содержимое этого файла в свойтсвах проекта в переменную типа **File**. В итоге -содержимое файла будет доставлено в контейнер **skaffold**  в виде временного файла, а её значение будет указать на расположение этого файла. Теперь - добавляем содержимое этого файла в свойтсвах проекта в переменную типа **File**. В итоге -содержимое файла будет доставлено в контейнер **skaffold**  в виде временного файла, а её значение будет указать на расположение этого файла.
 +А gitlab-ci.yml станет такой:
 +<code>services:
 +#  - name: docker.rdleas.ru/docker:dind
 +# Последнюю версию dind (20+) не удается использовать из-за ошибки: https://github.com/containerd/containerd/issues/4837
 +# Нужно обновлять container.d на хостах
 +# В остальном - всё уже готово. 
 +  - name: docker.rdleas.ru/docker:19-dind
 +    command: 
 +      - /bin/sh
 +      - -c
 +      - |
 +        openssl s_client -showcerts -connect docker.rdleas.ru:443 </dev/null 2>/dev/null | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print }' > /usr/local/share/ca-certificates/ca.crt
 +        update-ca-certificates
 +        unset DOCKER_TLS_CERTDIR
 +        dockerd-entrypoint.sh
 +
 +stages:
 +  - build
 +
 +variables:
 +  DOCKER_DRIVER: overlay2
 +  DOCKER_TLS_CERTDIR: ""
 +  DOCKER_HOST: tcp://0.0.0.0:2375
 +
 +build:
 +  image:
 +    name: docker.rdleas.ru/k8s-skaffold/skaffold:v1.19.0
 +  stage: build
 +  before_script:
 +    - docker login -u `echo $DOCKER_REGISTRY_LOGIN` -p `echo $DOCKER_REGISTRY_PASS` `echo $DOCKER_REGISTRY_URL`
 +#https://skaffold.dev/docs/references/cli/
 +  script:
 +    - | 
 +      openssl s_client -showcerts -connect ${DOCKER_REGISTRY_URL}:443 </dev/null 2>/dev/null | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print }' > /usr/local/share/ca-certificates/ca.crt
 +      update-ca-certificates
 +      env
 +      echo "waiting for the DinD..."
 +      timeout 60 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' 0.0.0.0 2375
 +      case $CI_COMMIT_BRANCH in
 +        DEV)      
 +          VALUES="chart/values_dev.yaml" skaffold run -f skaffold-run.yaml --default-repo ${DOCKER_REGISTRY_URL}/vrm
 +        ;;
 +        TEST)
 +          VALUES="chart/values_test.yaml" \
 +          KUBECONFIG=$KUBECONFIG_TEST \
 +          skaffold run -f skaffold-run.yaml \
 +          --default-repo ${DOCKER_REGISTRY_URL}/vrm
 +        ;;
 +        PROD)
 +          KUBECONFIG=$KUBECONFIG_PROD \
 +          VALUES="chart/values_prod.yaml" \
 +          skaffold run -f skaffold-run.yaml \
 +          --default-repo ${DOCKER_REGISTRY_URL}/vrm
 +        ;;
 +        *)
 +          skaffold build -f skaffold-build.yaml
 +        ;;
 +      esac</code>
  • devops/skaffold.txt
  • Last modified: 2021/04/22 09:44
  • by admin