我有一个Jenkinsfile或Jenkins管道,该管道创建一个新图像并从该图像中启动一个容器。第一次运作良好。但是在随后的运行中,我希望停止并删除先前的容器。我的Jenkinsfile如下:
node {
def commit_id
stage('Preparation') {
checkout scm
sh "git rev-parse --short HEAD > .git/commit-id"
commit_id = readFile('.git/commit-id').trim()
}
stage('docker build/push') {
docker.withRegistry('https://index.docker.io/v1/', 'dockerhub') {
def app = docker.build("my-docker-id/my-api:${commit_id}", '.').push()
}
}
stage('docker stop container') {
def apiContainer = docker.container('api-server')
apiContainer.stop()
}
stage('docker run container') {
def apiContainer = docker.image("my-docker-id/my-api:${commit_id}").run("--name api-server --link mysql_server:mysql --publish 3100:3100")
}
}
“ docker stop container”阶段失败。那是因为我不知道获取容器并停止它的正确API。谢谢。
就像在此Jenkinsfile中一样,您可以改用sh
命令。
这样,您可以使用以下行:
sh 'docker ps -f name=zookeeper -q | xargs --no-run-if-empty docker container stop'
sh 'docker container ls -a -fname=zookeeper -q | xargs -r docker container rm'
这样可以确保首先停止并删除一个容器x
(这里称为zookeper
)(如果正在运行)。
迈克尔A.指出在评论这不是一个妥善的解决办法,并承担码头工人正在安装的奴隶。
他指的是jenkinsci/plugins/docker/workflow/Docker.groovy
,但Docker
该类的容器方法尚未实现。
2018年8月更新:
Pieter Vogelaar在对“Jenkinsfile Docker管道多阶段 ” 的评论中指出,他写道:
通过使用全局
pipelineContext
对象,可以进一步使用返回的容器对象。
它是:
pipelineContext
全局变量,其类型为LinkedHashMap。
Jenkinsfile编程语言是Groovy。在Groovy中,这几乎等同于JavaScript对象。该变量可以在阶段之间共享数据或对象。
因此,这是一个声明性管道,以:
// Initialize a LinkedHashMap / object to share between stages
def pipelineContext = [:]
问题内容: 我正在尝试制作一个简单的计时器,该计时器在指定的秒数后发出提示音。我设法使其正常工作,但是TimerTask在蜂鸣声后继续运行。现在我停止执行吗?这是我的代码: 问题答案: 您需要通过调用以下方法来取消计时器 这将取消任务,因此可以执行以下操作:
我正在创建一个BLE应用程序,需要连续启动和停止扫描预定义的时间间隔。我实现它的方式是使用两个Runnable,它们相互调用,如下所示: 我正在尝试开始连续扫描并在单击按钮时暂停。开始按钮可以启动过程,但我无法停止扫描。 如果在停止间隔期间按下停止按钮,扫描将停止。但是,如果在扫描可运行状态下按stop按钮,则会删除stopScan可运行状态下的回调,同时保持扫描可运行状态持续运行。我需要的是两个
问题内容: 我从Linux Shell 连接到。我时不时地运行一个太大的查询。它可以打印,我已经知道这不是我的意思。我想停止查询。 击中(几次)会完全杀死并把我带回外壳,因此我必须重新连接。 是否可以在不杀死自己的情况下停止查询? 问题答案:
问题内容: 如何以编程方式停止正在运行的mysql查询? 我面临的问题是查询是使用用户提供的数据构造的,并且偶尔可能需要很长时间才能执行(大型表15-3000万行)。我想为用户提供一个cancel- option,但不知道如何停止当前正在执行的mysql-query。 该应用程序是Java applet- servlet:用户在applet中指定条件,该条件将传递给servlet,在servlet
问题内容: 我希望实用地停止并删除docker容器(如果正在运行)。这是用于构建脚本的。 请看下面的例子。我将如何停止和删除docker容器“ rabbitmq”,如bash脚本中的NAMES列所示。 以下命令将删除容器并执行即时通讯 但是它把它组合成一个我想知道的脚本吗?我认为它看起来像这样。 问题答案: 您可能已经注意到,如果容器不存在或未运行,则退出并显示状态代码以指示失败。这导致您的构建失
问题内容: 我在Docker容器上安装了Nginx,并且正在尝试像这样运行它: 问题在于Nginx的工作方式,即初始进程会立即产生一个主要的Nginx进程和一些工作程序,然后退出。由于Docker仅监视原始命令的PID,因此容器将暂停。 如何防止容器停止?我需要能够告诉它绑定到第一个子进程,或者阻止Nginx的初始进程退出。 问题答案: 像所有行为良好的程序一样,可以配置为不自我守护。 使用htt