Я пытаюсь заставить Дженкинса запустить Docker, который запускает SystemD .
Пока Я смог запустить systemd внутри Docker локально без Дженкинса ,Вот шаги, чтобы запустить его локально без jenkins:
# pull unop/fedora-systemd and create and run the container for it
sudo docker run --cap-add=SYS_ADMIN -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -t -i unop/fedora-systemd
# on a different terminal window, I can:
# get the container id of the "unop/fedora-systemd" image
sudo docker ps
# then exec bash on it
sudo docker container exec -t -i a98aa2bcd19e bash # where a98aa2bcd19e is the container id found above
# once inside the container, I can run systemd without any problems. examples:
systemctl status
systemctl start dbus.service
systemctl status dbus.service
Выше работает локально, и я могу запустить systemd внутри док-контейнера.Проблема в том, что я пытаюсь сделать то же самое, но внутри Jenkins.
Я несколько раз пытался настроить Jenkinsfile, но мои предыдущие попытки, похоже, не сработали.Я всегда получаю ошибку при работе под Jenkins , похожую на эту:
+ systemctl status
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Это мой последний Jenkinsfile , который я пробовал
pipeline {
agent {
docker {
image 'unop/fedora-systemd'
args '--cap-add=SYS_ADMIN -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -t -i'
}
}
stages {
stage('test') {
steps {
sh "echo hello world"
sh "systemctl status"
sh "systemctl start dbus.service"
sh "systemctl dbus.service"
}
}
}
}
На предыдущих итерациях Jenkinsfile я пытался заменить -cap-add=SYS_ADMIN -e container=docker
на --privileged
, но это не помогло, у меня все те же ошибки
У кого-нибудь есть идеякак я могу заставить это работать?Почему вышеупомянутое работает локально, но не на Дженкинсе?что мне здесь не хватает?
Примечание: версия Jenkins: 2.150.2 и это Dockerfile , используемый unop / fedora-systemd
FROM fedora:rawhide
MAINTAINER http://fedoraproject.org/wiki/Cloud
ENV container docker
RUN dnf -y update && dnf clean all
RUN dnf -y install systemd && dnf clean all && \
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup", "/tmp", "/run" ]
CMD ["/usr/sbin/init"]
PS: я видел связанный вопрос , но то, что они спрашивали, отличается