7.1 KiB
7.1 KiB
Чтобы запустить скрипт через 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
# Базовый образ
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"]
Пояснение:
- Базовый образ: Используется
redhat/ubi8. - Установка зависимостей:
curlдля выполнения HTTP-запросов.jqдля обработки JSON.
- Копирование скрипта: Скрипт
list_ldap_users.shкопируется в контейнер. - Права доступа: Скрипт делается исполняемым.
- CMD: По умолчанию запускается скрипт.
3. GitLab CI/CD конфигурация (.gitlab-ci.yml)
stages:
- build
- run
variables:
NEXUS_URL: "http://<nexus-host>:<port>" # Замените на ваш 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
Пояснение:
- Стадии (stages):
build: Сборка Docker-образа.run: Запуск скрипта внутри контейнера.
- Переменные окружения:
- Замените значения переменных (
NEXUS_URL,USERNAME,PASSWORD,TARGET_ROLE) на актуальные данные.
- Замените значения переменных (
- Сборка образа:
- Собирается Docker-образ с помощью
docker build. - Образ сохраняется как артефакт (
nexus-ldap-users.tar).
- Собирается Docker-образ с помощью
- Запуск скрипта:
- Образ загружается из артефакта.
- Запускается контейнер с передачей переменных окружения.
4. Модификация скрипта для работы с переменными окружения
Обновите list_ldap_users.sh, чтобы он использовал переменные окружения вместо жестко заданных значений:
#!/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
- Поместите файлы (
Dockerfile,list_ldap_users.sh,.gitlab-ci.yml) в ваш репозиторий. - Настройте переменные окружения в GitLab:
- Перейдите в Settings > CI/CD > Variables.
- Добавьте переменные
NEXUS_URL,USERNAME,PASSWORD,TARGET_ROLE.
- Запустите пайплайн:
- GitLab автоматически запустит пайплайн, который:
- Соберет Docker-образ.
- Запустит скрипт внутри контейнера.
- GitLab автоматически запустит пайплайн, который:
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 или секреты.
- Тестирование: Перед развертыванием протестируйте скрипт локально, чтобы убедиться, что он работает корректно.
Если у вас возникнут вопросы или потребуется помощь с доработкой, дайте знать!