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
Next revisionBoth sides next revision
devops:skaffold [2021/02/18 19:52] – [Настройка деплоя во внешний кластер] admindevops:skaffold [2021/03/24 12:50] – [.gitlab-ci.yml] admin
Line 81: Line 81:
     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 132:
       namespace: vrm       namespace: vrm
       valuesFiles:       valuesFiles:
-        - chart/values_dev.yaml+        - '{{.VALUES}}'
       artifactOverrides:       artifactOverrides:
         image: vrm         image: vrm
Line 150: Line 150:
 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 175:
   namespace: vrm   namespace: vrm
 rules: rules:
-- apiGroups: ["", "extensions", "apps"]+- apiGroups: ["*"]
   resources: ["*"]   resources: ["*"]
   verbs: ["*"]   verbs: ["*"]
Line 236: Line 236:
   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