Add nexus_api/Readme.md
This commit is contained in:
parent
a7663837b4
commit
d2f652e161
182
nexus_api/Readme.md
Normal file
182
nexus_api/Readme.md
Normal file
@ -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://<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 или секреты.
|
||||
- **Тестирование:** Перед развертыванием протестируйте скрипт локально, чтобы убедиться, что он работает корректно.
|
||||
|
||||
Если у вас возникнут вопросы или потребуется помощь с доработкой, дайте знать!
|
||||
Loading…
x
Reference in New Issue
Block a user