devops/nexus/nexus_api/Readme.md

182 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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