Jenkins管道自定义脚本(关闭应用程序)

时间:2017-08-21 09:29:40

标签: jenkins

我有几个jenkins管道,在我的情况下,在构建结束时调用“docker-compose up”来运行容器/应用程序。现在,我不需要容器/应用程序一直在运行,我希望从jenkins管道页面有一个方法来关闭(docker-compose stop)应用程序以释放其他构建的资源。你知道有什么好办法吗?

3 个答案:

答案 0 :(得分:0)

您可以在Jenkins作业中声明值为choice parameter (ex: stop_containers)YES的{​​{1}},负责停止容器。

然后在NO部分选择Build并添加以下脚本:

Execute shell

现在,每当你开始工作时,它会询问你是否要停止容器。如果要停止容器,请选择所需选项#!/bin/bash if [ "$stop_containers" = "YES" ] then //Command for stopping containers.... else echo "Do Nothing." fi

如果是YES,那么您可以定义一个阶段来执行停止容器操作。

Pipeline Job

答案 1 :(得分:0)

这就是我看待它的方式 Converting Conditional Build Steps to Jenkins Pipeline

pipeline {
agent any

parameters {
    choice(
        choices: 'full_deploy_and_run_docker_container\nrun_docker_containers\nstop_docker_containers',
        description: '',
        name: 'REQUESTED_ACTION')
}

tools {
    maven 'Maven x.x.x'
    jdk 'jdkYuWZ'
}

environment {
    SVN_URL = 'http://svn.myexample.com/svn/myproject/trunk/'
    DOCKER_PROJECT_DIR = '/home/myuser/docker/containers/myproject/trunk'
}
stages {
    stage ('Initialize') {
        steps {
            sh '''
                echo "Initialize..."
            '''
        }
    }

    stage ('Checkout') {
        when {
            expression { params.REQUESTED_ACTION == 'full_deploy_and_run_docker_container' }
        }
        steps {
            checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: ' something here ', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: "$SVN_URL"]], workspaceUpdater: [$class: 'UpdateUpdater']])
        }
    }

    stage ('Build') {
        when {
            expression { params.REQUESTED_ACTION == 'full_deploy_and_run_docker_container' }
        }
        steps {
            sh 'mvn clean package' 
        }
    }

    stage ('Test') {
        when {
            expression { params.REQUESTED_ACTION == 'full_deploy_and_run_docker_container' }
        }
        steps {
            sh 'echo "Other tests..."' 
        }
    }

    stage ('Deploy') {
        when {
            expression { params.REQUESTED_ACTION == 'full_deploy_and_run_docker_container' }
        }
        steps {
            sh 'echo "The deploy here"'
        }
    }

    stage ('Docker compose run') {
        when {
            expression { params.REQUESTED_ACTION == 'full_deploy_and_run_docker_container' || 
                params.REQUESTED_ACTION == 'run_docker_containers'
            }
        }
        steps {
            sh '''
                cd $DOCKER_PROJECT_DIR
                docker-compose up -d
            '''
        }
    }

    stage ('Docker compose stop') {
        when {
            expression { params.REQUESTED_ACTION == 'stop_docker_containers' }
        }
        steps {
            sh '''
                cd $DOCKER_PROJECT_DIR
                docker-compose stop
            '''
        }
    }

    stage ('Cleanup') {
        steps {
            cleanWs()
       }
    }
}

}

答案 2 :(得分:0)

一种简单的方法,你可以在jenkins管道中使用sh命令。

node {

    stage('stop') {

        sh "ssh root@host.com"
        sh "cd /diretorio_do_docker-compose/"
        sh "docker-compose stop"

    }
}