我使用映像jenkins / jenkins:lts作为我自己映像的基础,以便在Centos 7 VM上运行Jenkins主节点。当前,当为Jenkins签入新的Dockerfile时,我正在运行bash脚本以安全地关闭Jenkins,通过轮询其REST API来明确等待它死掉,替换其映像,然后再次启动其容器。
但是,将来,容器可能会由Kubernetes等其他工具进行管理。为了实现这一点,我想将安全关闭事物的行为与容器本身的生命周期联系在一起,我正在寻找一种方法来做到这一点。因此,我想发生的事情是,无论退出容器的方式和停止方式如何,容器始终会在退出之前始终安全地关闭Jenkins(当然,例外/错误情况除外)(我认为这是一件好事在DevOps上下文中)。
到目前为止,我只看到在bash脚本中安装一个陷阱来处理来自Docker引擎的SIGTERM信号的选项,然后将其作为容器的主要进程(带有PID 1)运行在bash脚本中。 docker stop
将这样的信号发送到容器。然后,陷阱函数将执行安全关闭,然后返回0退出代码。
除了Jenkins的图像已经定义了它自己的ENTRYPOINT之外,这并不难,因此,我看不到如何调用自己的脚本来处理该信号。而且,Jenkins本身似乎不能很好地处理SIGTERM信号(不能安全地自行关闭)。
那我该怎么做?