Я запускаю декларативный конвейер 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 на контейнере.