# Slack plugin

Slack plugin
============

Slack is a business messaging application that connects people to the information they need. By bringing people together to work as one unified team, Slack transforms the way organizations communicate.

The Slack plugin implements the integration with Slack using the incoming webhook interface that allows CloudBees CD/RO to send messages to a Slack channel. Refer to [Slack incoming webhooks](https://api.slack.com/incoming-webhooks) for more information.

[](#_prerequisites)Prerequisites
--------------------------------

When upgrading the Slack plugin from version from 1.x to 2.x, you must update your pipeline procedures and tasks to use the new version. This can be a lengthy process. To help reduce the overhead involved, you can also run the following code to perform these tasks.

If you need help running the code, refer to [Get started with DSL](/docs/cloudbees-cd-api-dsl/latest/get-started).

View code

    procedure 'Upgrade tasks & steps EC-Slack 1.x to EC-Slack 2.x ', {
    projectName = 'Default'
    timeLimit = '0'
    
      step 'Upgrade tasks & steps', {
        command = '''import com.electriccloud.client.groovy.ElectricFlow
    import com.electriccloud.client.groovy.models.ActualParameter
    
    ElectricFlow ef = new ElectricFlow()
    
    def projects = ef.getProjects()
    projects.project.each { projectEntity ->
    if (projectEntity.pluginKey == null || projectEntity.pluginName == null) {
    println "Working on project: " + projectEntity.projectName
    def pipelinesResult = ef.getPipelines(projectName: projectEntity.projectName)
    pipelinesResult.pipeline.each { pipeline ->
    println "... Working on pipeline: " + pipeline.pipelineName
    def stages = ef.getStages(projectName: projectEntity.projectName,
    pipelineName: pipeline.pipelineName)
    stages.stage.each { stage ->
    println "...... Working on stage: " + stage.stageName
    def tasks = ef.getTasks(projectName: projectEntity.projectName,
    pipelineName: pipeline.pipelineName,
    stageName: stage.stageName)
    tasks.task.each { task ->
    println "......... Working on task: " + task.taskName
    if (task.subpluginKey == "EC-Slack") {
    println "............ Task matched "
    def parameterDetails = task.actualParameters.parameterDetail
    def List<ActualParameter> actualParameterArray = new ArrayList<ActualParameter>()
    
                            parameterDetails.each {
                                parameter ->
                                    if (parameter.parameterName == "config" || parameter.parameterName == "payload") {
                                        def actualParameter = new ActualParameter()
                                        actualParameter.setActualParameterName(parameter.parameterName)
                                        actualParameter.setValue(parameter.parameterValue)
                                        actualParameterArray.add(actualParameter)
                                    }
                                    if (parameter.parameterName == "payload-msg") {
                                        def actualParameter = new ActualParameter()
                                        actualParameter.setActualParameterName("payload")
                                        actualParameter.setValue(parameter.parameterValue)
                                        actualParameterArray.add(actualParameter)
                                    }
                            }
                            def result = ef.modifyTask(projectName: projectEntity.projectName,
                                    pipelineName: pipeline.pipelineName,
                                    stageName: stage.stageName,
                                    taskName: task.taskName,
                                    actualParameters: actualParameterArray,
                                    clearActualParameters: true)
                            println "............ Task updated "
                            println "............ New parameters:" + actualParameterArray
                        }
    
                    }
                }
            }
            def procedures = ef.getProcedures(projectName: projectEntity.projectName)
            if (procedures.size() != 0) {
                procedures.procedure.each { procedure ->
                    println "... Working on procedure: : " + procedure.procedureName
                    def steps = ef.getSteps(
                            projectName: projectEntity.projectName,
                            procedureName: procedure.procedureName
                    )
    
                    steps.step.each { step ->
                        def parameters = ef.getActualParameters(
                                projectName: projectEntity.projectName,
                                procedureName: procedure.procedureName,
                                stepName: step.stepName)
                        println "...... Working on step: : " + step.stepName
                        if (step.subproject == \'/plugins/EC-Slack/project\') {
                            println "............ Step matched "
                            def List<ActualParameter> actualParameterArray = new ArrayList<ActualParameter>()
                            def details = parameters.actualParameter
                            parameters.actualParameter.each {
                                parameter ->
                                    if (parameter.actualParameterName == "config" || parameter.actualParameterName == "payload") {
                                        def actualParameter = new ActualParameter()
                                        actualParameter.setActualParameterName(parameter.actualParameterName)
                                        actualParameter.setValue(parameter.value)
                                        actualParameterArray.add(actualParameter)
                                    }
                                    if (parameter.actualParameterName == "payload-msg") {
                                        def actualParameter = new ActualParameter()
                                        actualParameter.setActualParameterName("payload")
                                        actualParameter.setValue(parameter.value)
                                        actualParameterArray.add(actualParameter)
                                    }
    
                            }
                            def result = ef.modifyStep(
                                    projectName: projectEntity.projectName,
                                    procedureName: procedure.procedureName,
                                    stepName: step.stepName,
                                    actualParameters: actualParameterArray,
                                    clearActualParameters: true
                            )
                            println "............ Step updated "
                            println "............ New parameters:" + actualParameterArray
                        }
                    }
                }
            }
            println "==============================================="
        }
    
    }'''
    shell = 'ec-groovy'
    timeLimit = '0'
    timeLimitUnits = 'seconds'
    }
    }