Add basic info

This commit is contained in:
Marsel Ibraev
2021-09-24 11:51:02 +03:00
parent 40b04340dd
commit f44beb51a9
197 changed files with 12740 additions and 0 deletions
@@ -0,0 +1,65 @@
variables:
K8S_API_URL: https://172.20.100.2:6443
stages:
- build
- test
- cleanup
- push
- deploy
build:
stage: build
script:
- docker build -t $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID .
test:
stage: test
image:
name: docker/compose:1.27.4
entrypoint: [""]
script:
- docker-compose
-p "$CI_PROJECT_NAME"_"$CI_PIPELINE_ID"
up
--abort-on-container-exit
--exit-code-from app
--quiet-pull
cleanup:
stage: cleanup
image:
name: docker/compose:1.27.4
entrypoint: [""]
script:
- docker-compose -p "$CI_PROJECT_NAME"_"$CI_PIPELINE_ID" down
when: always
push:
stage: push
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
script:
- docker push $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
only:
- master
deploy:
stage: deploy
image: centosadmin/kubernetes-helm:3.3.4
environment:
name: production
resource_group: deploy_production
script:
- kubectl config set-cluster k8s --insecure-skip-tls-verify=true --server=$K8S_API_URL
- kubectl config set-credentials ci --token=$K8S_CI_TOKEN
- kubectl config set-context ci --cluster=k8s --user=ci
- kubectl config use-context ci
- helm upgrade --install $CI_PROJECT_PATH_SLUG .helm
--set image=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
--set imageTag=$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
--debug
--namespace $CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_NAME
only:
- master
+108
View File
@@ -0,0 +1,108 @@
# Добавляем конфиг CI/CD в Gitlab
В этой части добавляем последний шаг - конфиг для Gitlab CI/CD для сборки, тестирования и деплоя приложения в кластер k8s. Деплой производится с использованием утилиты Helm v3.
Gitlab CI/CD описывается в файле `.gitlab-ci.yml` в формате `yaml`. По умолчанию Gitlab ищет этот файл в корне проекта, путь до файла может быть переопределен в настройках проекта.
## 1. Подготавливаем CI/CD
Для этого скопируем заранее подготовленный шаблон `.gitlab-ci.yml` в проект `xpaste`, выполнив команду:
```bash
cp ~/slurm/practice/14.ci-cd/1.2.deploy/.gitlab-ci.yml ~/xpaste/
```
## 2. Адрес Kubernetes API
В файле `.gitlab-ci.yml` указан IP-адрес нашего общего kube api.
## 3. Настройка базы данных
Сервер базы данных общий для всех студентов, каждому студенту выделена своя база данных.
Логин и пароль для доступа к БД мы указывали при создании секрета, а в параметрах чарта укажен название БД.
Для этого откроем `values.yaml`:
```bash
vi ~/xpaste/.helm/values.yaml
```
В начале файла необходимо заменить строку `<Ваш номер логина> - меняем на свой номер студента!!`:
```diff
- DB_NAME: <номер своего логина>_xpaste
+ DB_NAME: s000001_xpaste
```
## 3. Настройка ingress
Доступ к приложению будет осуществляться через ingress. Ingress устанавливается вместе с приложением, но для его корректной работы необходимо прописать ему адрес.
Для этого откроем `values.yaml`:
```bash
vi ~/xpaste/.helm/values.yaml
```
В конце файла необходимо заменить строку `<Ваш номер логина> - меняем на свой номер студента!!`:
```diff
- host: xpaste.s<Ваш номер логина>.k8s.slurm.io
+ host: xpaste.s000001.k8s.slurm.io
```
Сохраняем все изменения и пушим их в gitlab. Для этого необходимо выполнить команды:
```bash
cd ~/xpaste
git add .
git commit -am "Add CI/CD config"
git push
```
## 4. Переключаемся в namespace приложения
До сих пор мы работали в неймспейсе кластера Kubernetes с названием `s<номер_студента>`
Но наше приложение xpaste устанавливается в другой namespace `s<номер_студента>-xpaste-production`.
Для удобства работы, чтобы не набирать каждый раз опцию `--namespace` изменим namespace, который kubectl использует по умолчанию:
```bash
kubectl config set-context --current --namespace=s<номер_студента>-xpaste-production
```
## 5. Проверка результата
Для проверки результата необходимо перейти в Gitlab в раздел `ci/cd -> pipelines` форка проекта xpaste.
Можно воспользоваться прямой ссылкой: `https://gitlab.slurm.io/sXXXXXX/xpaste/pipelines`. `sXXXXXX` необходимо заменить на номер своего студента.
В результате все job должны закончиться без ошибок.
## 6.Открываем приложение в браузере
В браузере открываем URL: http://xpaste.s<Ваш номер логина>.k8s.slurm.io. `<Ваш номер логина>` необходимо заменить на номер своего студента. Открывать нужно в режиме `инкогнито`.
Если вы увидели `503` ошибку, значит практику выполнили верно.
## 7. Самостоятельная работа
Самостоятельная работа продолжительностью 5 минут. Во время самостоятельной работы надо попробовать ответить на вопросы:
* Почему деплой закончился успешно, а приложение недоступно?
* Что надо исправить в CI/CD ?
* Что надо исправить в приложении или его настройках ?
Ошибку пока исправлять не надо.
## 8. Доработка CI/CD
* Для корректировки поведения CI/CD необходимо внести изменения в ci/cd, описанные в [snippet](https://gitlab.slurm.io/-/snippets/107)
Удаляем установленный релиз helm чарта:
```bash
helm delete s<номер_студента>-xpaste
```
Далее пушим изменения и смотрим за процессом CI/CD.
После внесения изменений процесс деплоя должен завершиться с ошибкой.