在Jenkinsfile中检查docker服务是否存在

时间:2017-08-21 08:47:09

标签: docker jenkins continuous-integration jenkins-pipeline

我正在通过Jenkins建立CI Pipelin。

我创建了以下Jenkins文件:

pipeline {
agent none

stages {
    stage('Build and push image') {
        agent {
                label 'man'
              }
        steps {
            sh 'docker image build -t login:stage .'
            sh 'docker tag login:stage 192.168.66.201:5000/login:stage'
            sh 'docker push 192.168.66.201:5000/login:stage'
        }
    }
    stage('Create Service') {
        agent {
                label 'dev'
              }
        steps {
            sh 'docker service create --name loginService -p 40001:40001 --replicas=3  192.168.66.201:5000/login:stage'
        }
    }
} 
}

我知道,我可以使用docker(docker.withRegistry)的组件,但我喜欢在第一次尝试时手动完成,以确切知道会发生什么。

但我的问题是如果已经存在docker服务,如何检查“创建服务”-Stage。如果他存在,我喜欢执行更新声明。

你有什么想法吗?使用谷歌或詹金斯文档并没有真正帮助我..

2 个答案:

答案 0 :(得分:5)

执行此操作的一种方法:

docker service ls | grep <service-name> && echo service-exists

如果存在名称服务,则将执行echo。将echo替换为您要使用的更新命令。

答案 1 :(得分:0)

检查服务是否已经存在的另一种方法是使用检查命令并查看退出代码

def inspectExitCode = sh script: "docker service inspect loginService", returnStatus: true
if (inspectExitCode == 0) {
    sh "docker service update --name loginService ... "
} else {
    sh script: "docker service create --name loginService ... "
}

在这种情况下,您不会遇到@ volker-schukai提到的问题