2017-08-21 28 views
0

我有几个jenkins管道,在我的情况下,在构建结束时调用“docker-compose up”来运行容器/应用程序。现在,我不需要容器/应用程序一直处于启动状态,我想从jenkins管道页面到关闭(docker-compose stop)应用程序的一种方式来为其他构建释放资源。你知道有什么好方法可以做到吗?Jenkins管道自定义脚本(关闭应用程序)

+0

您能详细说明吗?就像你想停止容器一样?从流水线上你是怎么做'码头'组成的? – ANIL

+0

我想在需要时停止容器,最好的想法是菜单条目“关闭”或类似“自定义脚本 - >关闭”。关于“docker-compose up”在构建的部署阶段被调用。 – mauros

+0

那么,你有声明性的管道工作吗? – ANIL

回答

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() 
     } 
    } 
} 

}

0

您可以在Jenkins作业中声明choice parameter (ex: stop_containers),值为YESNO,该作业负责停止容器。

然后在Build部分选择Execute shell,并添加下面的脚本给它:

#!/bin/bash 

if [ "$stop_containers" = "YES" ] 
then 
    //Command for stopping containers.... 

else 
    echo "Do Nothing." 
fi 

现在,只要您将运行你的工作,它会问,如果你想停止容器或没有。如果您想停止容器,请选择所需的选项YES

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

stage('stop containers') { 
    properties(
    [parameters([choice(choices: ["YES", "NO"].join("\n"), 
    description: 'Some choice parameter', 
    name: 'STOP_CONTAINERS')])]) 
    agent label:'some-node' 
    when { 
    expression { 
     return env.STOP_CONTAINERS = 'YES'; 
     } 
    } 
    steps { 
     //command to stop containers 
    } 
} 
0

一种简单的方法,你可以在詹金斯管道使用sh命令这一点。

node { 

    stage('stop') { 

     sh "ssh [email protected]" 
     sh "cd /diretorio_do_docker-compose/" 
     sh "docker-compose stop" 

    } 
}