Какие проекты вы реализовывали с использованием GitLab CI?
Answer from AI
sobes.tech AI
Реализовал проекты по автоматизации CI/CD для различных типов приложений.
-
Веб-приложение на Python/Django: Настроен конвейер CI/CD для автоматического тестирования (pytest), проверки стиля кода (flake8), сборки Docker-образа, пуша образа в GitLab Container Registry и деплоя в Kubernetes с использованием kubectl и Helm.
# .gitlab-ci.yml stages: - test - build - deploy variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" test: stage: test image: python:3.9 script: - pip install -r requirements.txt - pytest - flake8 . build: stage: build image: docker:latest services: - docker:dind script: - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA deploy: stage: deploy image: alpine/k8s:1.25.2 before_script: - apk add gettext # For envsubst - echo "$KUBE_CONFIG" | base64 -d > $KUBE_CONFIG_PATH script: # Example deploy using kubectl - kubectl apply -f kubernetes/deployment.yaml -f kubernetes/service.yaml # Example deploy using Helm # - helm upgrade --install myapp ./helm/myapp --namespace default --set image.tag=$CI_COMMIT_SHORT_SHA variables: KUBE_CONFIG_PATH: $KUBECONFIG # Kubeconfig is stored in a CI/CD variable only: - main -
Микросервисы на Golang: Создан пайплайн для сборки Go-приложений, выполнения юнит-тестов, статического анализа кода (go vet, golint), сборки минималистичных статических Docker-образов (используя многостадийную сборку или scratch), пуша образов и деплоя в Docker Swarm или Kubernetes.
# .gitlab-ci.yml stages: - test - build - deploy variables: # Disable CGO to build static binaries for smaller images CGO_ENABLED: 0 test: stage: test image: golang:1.19 script: - go test -v ./... - go vet ./... # - golint ./... # Example linters build: stage: build image: docker:latest services: - docker:dind script: - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA . # Uses Dockerfile with multi-stage build - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA deploy: stage: deploy image: docker/compose:1.29.2 # Example Docker Swarm deploy script: - docker stack deploy -c docker-compose.yml my_stack --resolve-image always only: - main -
Проект с инфраструктурой как кодом (Terraform): Автоматизировано применение Terraform-изменений. Пайплайн включает этапы планирования (terraform plan) на каждом пуше в merge request и применения (terraform apply) при слиянии в основную ветку. Использовались GitLab Managed Terraform state и GitLab Environment variables для хранения чувствительных данных.
# .gitlab-ci.yml stages: - validate - plan - apply image: name: hashicorp/terraform:1.3.0 entrypoint: ["/usr/bin/env", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "/usr/bin/tf"] variables: TF_ROOT: ${CI_PROJECT_DIR}/terraform # Adjust if your terraform code is in a subdirectory TF_VAR_GITLAB_TOKEN: ${GITLAB_TOKEN} # Example: Passing GitLab API token before_script: - cd ${TF_ROOT} - gitlab-terraform init -upgrade # Handles state backend configuration validate: stage: validate script: - gitlab-terraform validate plan: stage: plan script: - gitlab-terraform plan - gitlab-terraform plan-json > plan.json # Generate plan in JSON for MR widget artifacts: reports: terraform: ${TF_ROOT}/plan.json # Enable MR widget integration apply: stage: apply script: - gitlab-terraform apply -auto-approve # Apply changes automatically only: - main # Only apply on merge to main branch dependencies: - plan -
Проект с фронтендом на Vue.js: Настроен пайплайн для сборки фронтенд-приложения (npm install, npm run build), линтинга (ESLint), запуска юнит-тестов (Jest), создания Docker-образа (nginx serving static files) и деплоя статики на S3 или в Nginx-контейнере.
# .gitlab-ci.yml stages: - build - test - deploy build: stage: build image: node:16 script: - npm ci - npm run build test: stage: test image: node:16 needs: [build] # Ensure build stage runs first script: - npm ci - npm run lint - npm run test --ci --json --outputFile=report.json # Run tests and generate report artifacts: reports: junit: report.json # Integrate test results into MR/Pipeline view deploy: stage: deploy image: python:latest # Using Python for AWS CLI example script: # Example deploy to S3 - pip install awscli - aws s3 sync ./dist s3://$S3_BUCKET_NAME --delete only: - main dependencies: - build # Ensure build artifacts are available
Во всех проектах применялись следующие практики:
- Использование GitLab Runners (Shared или Specific VM/Docker).
- Конфигурация с помощью
.gitlab-ci.yml. - Работа с Docker образами через GitLab Container Registry.
- Использование CI/CD Variables (Secret и Protected) для хранения учетных данных и конфигурации.
- Настройка Environments для организации деплоев (Development, Staging, Production).
- Создание Merge Request Pipelines для ранней валидации изменений.
- Настройка расписаний для периодического запуска пайплайнов.
- Использование GitLab Review Apps для динамического развертывания окружений для каждого Merge Request. (Особенно актуально для веб-приложений).
- Интеграция с Snyk или другими инструментами для анализа уязвимостей (в некоторых проектах).
Эти проекты демонстрируют опыт в построении надежных и автоматизированных процессов доставки кода, охватывающих тестирование, сборку и деплой для разных стеков технологий и инфраструктур.