devops/nexus/nexus_api/Readme.md

182 lines
7.1 KiB
Markdown
Raw Normal View History

2025-03-27 10:13:15 +08:00
Чтобы запустить скрипт через `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://<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
```
#### Пояснение:
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 или секреты.
- **Тестирование:** Перед развертыванием протестируйте скрипт локально, чтобы убедиться, что он работает корректно.
Если у вас возникнут вопросы или потребуется помощь с доработкой, дайте знать!