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