我正在尝试使用 Jenkins 在 Docker 容器中构建 C++ 项目。我在 Jenkins 中构建或在 Jenkins 之外的容器中构建都没有问题。
以下是我尝试过的。为清楚起见,我省略了卷映射。
情况1
以下命令在 shell 中成功运行构建。
docker run --rm --interactive=true --tty=true $IMAGE make
Run Code Online (Sandbox Code Playgroud)
但是,当在 Jenkins 中作为“执行 shell”步骤运行时,Docker 会返回以下错误。
cannot enable tty mode on non tty input
Run Code Online (Sandbox Code Playgroud)
案例二
以下命令与前一个命令类似,但禁用交互性。
docker run --rm $IMAGE make
Run Code Online (Sandbox Code Playgroud)
Jenkins 可以成功运行构建。但是,在中止构建时会出现严重的问题。构建会立即标记为中止,但容器会继续运行,直到构建完成。退出后容器也不会被移除。
在 shell 中运行时,命令会成功构建,但无法中断它。退出后容器也会被移除。
题
有谁知道如何在 Jenkins 的 Docker 容器中干净地运行构建并保留中止构建的能力?
使用任何 Jenkins 插件都不是一种选择,因为 Docker 调用在脚本内部并且无法轻松提取。
在 BuildRoot 2015.08.1 /etc/fstab 中包含以下行。
/dev/root / ext2 rw,noauto 0 1
Run Code Online (Sandbox Code Playgroud)
在我加密的 Ubuntu 笔记本电脑上,/etc/fstab 包含以下行。
/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
Run Code Online (Sandbox Code Playgroud)
问题:在 /etc/fstab 中列出 rootfs 的目的是什么?
不是答案:
内核从 root= 参数或在 initramfs 中以只读方式挂载 rootfs。所以 /etc/fstab 无助于以只读方式挂载 rootfs。
init 进程重新挂载 rootfs 读写。这是在 BuildRoot 中的 /etc/inittab 和 Ubuntu 中的 /etc/rcS.d/S06checkroot.sh 中完成的。所以 /etc/fstab 无助于重新挂载 rootfs 读写。
背景:我正在构建一个带有花哨的 initramfs 的嵌入式系统。它在网络上和本地寻找不同的 rootfs 候选者,直到找到合适的候选者。它负责检查文件系统并在调用 switch_root 之前以读写方式重新挂载它。
额外问题:不在 /etc/fstab 中列出 rootfs 会有什么影响?
如果没有就太棒了。我不想为每个 rootfs 维护不同的 /etc/fstab。但是,为什么 BuildRoot 和 Ubuntu 会保留它呢?
剧透:我试过了,它似乎有效,但我对隐藏的后果持谨慎态度。
我正在运行 Debian Stretch 9.1,使用 GNOME 3 作为桌面环境和 GDM 进行会话管理。我从 GDM(齿轮图标)在 Wayland 上尝试了 GNOME,效果很好。我现在想在 Wayland 上配置自动登录到 GNOME。
默认情况下,我无需自动登录即可在 Wayland 上登录 GNOME。我可以自动登录,但只能在 X 上的 GNOME 上进行。后者是我当前的配置。
任何指针将不胜感激。
在阅读了其他发行版的问答后,我尝试/etc/gdm3/daemon.conf在该daemon部分添加以下内容(一次一个)。这些选项都不起作用。DefaultSessions似乎不是/usr/share/gdm/gdm.schemas.
DefaultSession=gnome-wayland.desktop
DefaultSession=gnome-wayland
DefaultSession=/usr/share/wayland-sessions/gnome-wayland.desktop
Run Code Online (Sandbox Code Playgroud)
$ cat /var/lib/AccountsService/users/marc
[User]
Language=en_US.UTF-8
XSession=gnome-wayland
SystemAccount=false
$ ls /usr/share/xsessions/
gnome-classic.desktop gnome.desktop
$ ls /usr/share/wayland-sessions/
gnome-wayland.desktop
$ cat /etc/gdm3/daemon.conf
[daemon]
AutomaticLoginEnable = true
AutomaticLogin = marc
Run Code Online (Sandbox Code Playgroud)
的内容/usr/share/xsessions/gnome.desktop,并/usr/share/wayland-sessions/gnome-wayland.desktop只在不同的Name参数。其他参数(除了Comment)如下。
Exec=gnome-session
TryExec=gnome-session
Icon=
Type=Application
DesktopNames=GNOME
Run Code Online (Sandbox Code Playgroud)