У меня есть хост-сервер, на котором работает Jenkins. Я бы хотел, чтобы Дженкинс автоматически создавал новые контейнеры и готовил эти контейнеры с помощью SALT. Конечная цель - использовать эти контейнеры для тестирования кода.
Как лучше всего создать новый контейнер, установить salt-minion и затем снабдить сервер солью?
Я пробовал что-то вроде lxc-attach -n myContainer -- salt-call --local state.highstate
но при этом у меня возникают проблемы. Если я запускаю lxc-attach -n [имя] - [команда] вручную в командной строке, это работает. Однако выполнение этого из сценария дает мне ошибки.
lxc-start -n "$1" -d
lxc-attach -n "$1" -- apt-get update
... приводит к ...
Starting the container 'test2'...
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty Release.gpg
Could not resolve 'archive.ubuntu.com'
Err http://security.ubuntu.com trusty-security InRelease
Err http://security.ubuntu.com trusty-security Release.gpg
Could not resolve 'security.ubuntu.com'
Err http://archive.ubuntu.com trusty-updates Release.gpg
Could not resolve 'archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
... и еще несколько ошибок. Я запускаю сценарий и команды вручную в командной строке от имени одного и того же пользователя.
Что я здесь делаю не так?
Похоже, я пытался запустить apt-get update
слишком быстро после того, как я запустил контейнер (в фоновом режиме). Сеть, по-видимому, не готова, и все команды (которые полагались на сеть) не выполнялись.
Я добавил 5 секунд сна в сценарий подготовки, и он заработал.
lxc-start -n "$1" -d
sleet 5
lxc-attach -n "$1" -- apt-get update