Чтобы запустить скрипт через `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 или секреты. - **Тестирование:** Перед развертыванием протестируйте скрипт локально, чтобы убедиться, что он работает корректно. Если у вас возникнут вопросы или потребуется помощь с доработкой, дайте знать!