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