From d2f652e161da81724819cffe0fdbdb0ed7199bbd Mon Sep 17 00:00:00 2001 From: pashko Date: Thu, 27 Mar 2025 10:13:15 +0800 Subject: [PATCH] Add nexus_api/Readme.md --- nexus_api/Readme.md | 182 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 nexus_api/Readme.md diff --git a/nexus_api/Readme.md b/nexus_api/Readme.md new file mode 100644 index 0000000..e84c951 --- /dev/null +++ b/nexus_api/Readme.md @@ -0,0 +1,182 @@ +Чтобы запустить скрипт через `Dockerfile` (основанный на `redhat/ubi8`) и интегрировать его в GitLab CI/CD, выполните следующие шаги: + +--- + +### **1. Структура проекта** +Создайте структуру проекта, например: +``` +project-root/ +├── Dockerfile +├── list_ldap_users.sh +└── .gitlab-ci.yml +``` + +Здесь: +- `list_ldap_users.sh` — ваш Bash-скрипт. +- `Dockerfile` — файл для создания Docker-образа. +- `.gitlab-ci.yml` — конфигурация для GitLab CI/CD. + +--- + +### **2. Dockerfile** + +```dockerfile +# Базовый образ +FROM redhat/ubi8 + +# Установка необходимых пакетов +RUN dnf install -y curl jq && \ + dnf clean all + +# Копирование скрипта в контейнер +COPY list_ldap_users.sh /usr/local/bin/list_ldap_users.sh + +# Делаем скрипт исполняемым +RUN chmod +x /usr/local/bin/list_ldap_users.sh + +# Команда по умолчанию +CMD ["/usr/local/bin/list_ldap_users.sh"] +``` + +#### Пояснение: +1. **Базовый образ:** Используется `redhat/ubi8`. +2. **Установка зависимостей:** + - `curl` для выполнения HTTP-запросов. + - `jq` для обработки JSON. +3. **Копирование скрипта:** Скрипт `list_ldap_users.sh` копируется в контейнер. +4. **Права доступа:** Скрипт делается исполняемым. +5. **CMD:** По умолчанию запускается скрипт. + +--- + +### **3. GitLab CI/CD конфигурация (.gitlab-ci.yml)** + +```yaml +stages: + - build + - run + +variables: + NEXUS_URL: "http://:" # Замените на ваш URL + USERNAME: "admin" # Замените на имя пользователя + PASSWORD: "password" # Замените на пароль + TARGET_ROLE: "my-role" # Замените на целевую роль + +build_image: + stage: build + image: docker:latest + services: + - docker:dind + script: + - docker build -t nexus-ldap-users:latest . + - docker save nexus-ldap-users:latest > nexus-ldap-users.tar + artifacts: + paths: + - nexus-ldap-users.tar + +run_script: + stage: run + image: docker:latest + services: + - docker:dind + script: + - docker load < nexus-ldap_users.tar + - docker run --rm \ + -e NEXUS_URL="$NEXUS_URL" \ + -e USERNAME="$USERNAME" \ + -e PASSWORD="$PASSWORD" \ + -e TARGET_ROLE="$TARGET_ROLE" \ + nexus-ldap-users:latest +``` + +#### Пояснение: +1. **Стадии (stages):** + - `build`: Сборка Docker-образа. + - `run`: Запуск скрипта внутри контейнера. +2. **Переменные окружения:** + - Замените значения переменных (`NEXUS_URL`, `USERNAME`, `PASSWORD`, `TARGET_ROLE`) на актуальные данные. +3. **Сборка образа:** + - Собирается Docker-образ с помощью `docker build`. + - Образ сохраняется как артефакт (`nexus-ldap-users.tar`). +4. **Запуск скрипта:** + - Образ загружается из артефакта. + - Запускается контейнер с передачей переменных окружения. + +--- + +### **4. Модификация скрипта для работы с переменными окружения** + +Обновите `list_ldap_users.sh`, чтобы он использовал переменные окружения вместо жестко заданных значений: + +```bash +#!/bin/bash + +# Конфигурация из переменных окружения +NEXUS_URL=${NEXUS_URL:-"http://localhost:8081"} # URL Nexus (по умолчанию localhost) +USERNAME=${USERNAME:-"admin"} # Имя пользователя +PASSWORD=${PASSWORD:-"password"} # Пароль +TARGET_ROLE=${TARGET_ROLE:-"my-role"} # Целевая роль + +# Получение списка всех пользователей через API +response=$(curl -s -u "$USERNAME:$PASSWORD" -X GET "$NEXUS_URL/service/rest/v1/security/users") + +# Проверка успешности запроса +if [[ $? -ne 0 ]]; then + echo "Ошибка при получении данных от Nexus API" + exit 1 +fi + +# Фильтрация LDAP-пользователей с целевой ролью +ldap_users_with_role=$(echo "$response" | jq -r --arg role "$TARGET_ROLE" ' + .[] + | select(.source == "LDAP" and (.roles | index($role) != null)) + | "\(.userId) (\(.firstName) \(.lastName))" +') + +# Вывод результата +if [[ -z "$ldap_users_with_role" ]]; then + echo "Нет LDAP-пользователей с ролью '$TARGET_ROLE'." +else + echo "LDAP-пользователи с ролью '$TARGET_ROLE':" + echo "$ldap_users_with_role" +fi +``` + +#### Пояснение: +- Переменные окружения (`NEXUS_URL`, `USERNAME`, `PASSWORD`, `TARGET_ROLE`) используются для настройки скрипта. +- Если переменные не заданы, используются значения по умолчанию. + +--- + +### **5. Запуск в GitLab CI/CD** + +1. **Поместите файлы** (`Dockerfile`, `list_ldap_users.sh`, `.gitlab-ci.yml`) в ваш репозиторий. +2. **Настройте переменные окружения в GitLab:** + - Перейдите в **Settings > CI/CD > Variables**. + - Добавьте переменные `NEXUS_URL`, `USERNAME`, `PASSWORD`, `TARGET_ROLE`. +3. **Запустите пайплайн:** + - GitLab автоматически запустит пайплайн, который: + - Соберет Docker-образ. + - Запустит скрипт внутри контейнера. + +--- + +### **6. Пример вывода в GitLab CI/CD** + +Если все настроено правильно, вы увидите вывод скрипта в логах GitLab CI/CD: +``` +Running with gitlab-runner 15.0.0 +... +$ docker run --rm -e NEXUS_URL="$NEXUS_URL" -e USERNAME="$USERNAME" -e PASSWORD="$PASSWORD" -e TARGET_ROLE="$TARGET_ROLE" nexus-ldap-users:latest +LDAP-пользователи с ролью 'my-role': +user1 (John Doe) +user2 (Jane Smith) +``` + +--- + +### **7. Дополнительные рекомендации** +- **Безопасность:** Не храните чувствительные данные (например, пароли) в коде. Используйте переменные окружения GitLab или секреты. +- **Тестирование:** Перед развертыванием протестируйте скрипт локально, чтобы убедиться, что он работает корректно. + +Если у вас возникнут вопросы или потребуется помощь с доработкой, дайте знать! \ No newline at end of file