Как изящно остановить и запустить докер в среде докера, используемой в Jenkins? - PullRequest
0 голосов
/ 12 марта 2019

Я запускаю декларативный конвейер jenkins и использую образ докера в качестве агента для запуска моих тестов.Мой образ докера определен как:

agent {
   docker {
            image 'jenkinsimage'
            label 'docker'
            args '--user root --name dockerhost --rm -v /var/run/docker.sock:/var/run/docker.sock'
            registryUrl 'https://registry.net'
            registryCredentialsId 'xxx-xxx-xxx-xx-xxxx'
    }
}

Я определил его таким образом, используя .sock, чтобы я мог выполнять команды докера внутри изображения во время его работы.Я добавил --rm в надежде, что он удалит все артефакты, сгенерированные этим контейнером после его запуска.

Я запускаю следующие команды, чтобы настроить мою сеть докеров и postgress (docker in docker)экземпляр:

        sh "docker run --rm --detach -p 9069:5432 --name db postgresDb"
        sh "docker network create -d bridge dockernet"
        sh "docker network connect dockernet dockerhost"
        sh "docker network connect dockernet db"
        sh "ping db"

Есть несколько проблем с этим.После того, как jenkins запускает его один раз, он начинает лаять на меня, говоря, что имена уже заняты, и порты уже используются.Я предполагаю, что это потому, что они не убирают после того, как они бегут. Как мне убедиться, что jenkinsimage полностью обновляется с NOTHING, кроме того, что находится в dockerfile при каждом запуске теста? Это может быть серьезной проблемой, которая портит мою среду тестирования, если у меня нет точно такой же средыкаждый раз, когда jenkins запускает его.

Главное предостережение заключается в том, что, поскольку он работает на сервере Jenkins, перезапуск докера перед его запуском на агенте невозможен.Я пробовал -rm, но все еще вижу артефакты из предыдущих раз, когда я запускал docker run на контейнере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...