# Склейка DinD и Jenkins SSH Agent.

- Берем [Jenkins SSH Agent](https://github.com/jenkinsci/docker-ssh-agent), а именно [Alpine Dockerfile](https://github.com/jenkinsci/docker-ssh-agent/blob/master/alpine/Dockerfile)
- Изменяем базовый образ на `docker:dind` (по-умолчанию он на базе alpine)
- Добавляем в `Dockerfile` под создание пользователя `jenkins` строки:
```Dockerfile
RUN addgroup docker || true && \
    addgroup ${user} docker
```
- В `setup-sshd` вписываем строки:
```shell
# dockerd's patch
dockerd-entrypoint.sh &
```
- Собираем, тэгаем и пушим

# Как использовать:

## Запуск агента

Генерируем новую пару SSH ключей. 
```shell
ssh-keygen -t rsa -b 4096 -f .ssh/jenkins-ssh-agent -C "jenkins-ssh-agent"
```

Желательно установить [SysBox](https://github.com/nestybox/sysbox/releases/tag/v0.6.6), без него придется делать контейнер с агентом привилегированным. 

Берем `docker-compose.yml` файл:
```yaml
version: '3.7'
services:
  jenkins-agent:
    image: git.tswf.io/docker-base-images/jenkins-ssh-agent-jdk17-dind:1.0.7
    restart: always
    # Используем, если не хотим делать контейнер привилегированным 
    runtime: sysbox-runc
    # Если не используем SysBox, а зря :c
    #privileged: true
    ports:
      - "31674:22"
    environment:
      JENKINS_AGENT_SSH_PUBKEY: "<YOR_SSH_PUBLIC_KEY_HERE>"
```

и заменяем `<YOR_SSH_PUBLIC_KEY_HERE>` на сгенеренный публичный ключ

Запускаем агента:

```shell
docker compose up -d
```

## Настройки Jenkins

Смотри [описание агента](AGENT.README.md)

# Использование от ROOT

Образ пропатчен для возможности запуска агента от имени ROOT. Решает сложности с запуском одноразовых docker-агентов на нашей ноде. 

Просто в credentials при указании логина пишем `root`. Публичный ключ прописывается и на `jenkins`, и на него.