jenkinsci / zulip-plugin

Jenkins plugin for Zulip notifications of build status
https://zulip.com/integrations/doc/jenkins
MIT License
14 stars 22 forks source link

Zulip notifier plugin for Jenkins

This plugin sends messages and notifications of build statuses to Zulip.

It began its life as a fork of the Jenkins Campfire plugin.

Table of contents

  1. Global Configuration
  2. Zulip Notification
  3. Zulip Send
  4. Job DSL
  5. Troubleshooting

Global configuration

The Zulip server is configured globally for the whole Jenkins instance.

Minimal configuration is:

Other attributes are optional:

Global Settings

Zulip Notification

Zulip notification is a post build action step, that posts notification about build statuses to Zulip Streams. The step allows you to configure two optional parameters:

Freestyle project

For freestyle project, simply select a post build action from the dropdown and optionally configure destination stream and topic.

Zulip Notification

Scripted Pipeline

Scripted pipeline have no concept of post build actions, but you can still use the zulipNotification step in the try/catch or preferably using the catchError step.

node {
    catchError {
        // ... Your build stages ...
    }
    zulipNotification stream: 'coolproject', topic: 'jenkins', smartNotification: 'enabled'
}

Declarative Pipeline

In declarative pipeline, simply use the zulipNotification step inside your post actions.

pipeline {
    agent any
    stages {
        // ... Your build stages ...
    }
    post {
        always {
            zulipNotification()
        }
    }
}

Zulip Send

Zulip send is a build step, that allows you to post arbitrary messages to Zulip stream throughout the build process. You can use this e.g. to notify Zulip that build has started or about various phases the build goes through. The step allows you to configure:

Freestyle project

For freestyle project, simply select a build action from the dropdown and fill in desired message. Optionally configure destination stream and topic.

Zulip Send

Scripted Pipeline

In scripted pipeline, simply use the zulipSend step in any stage of the build.

node {
    stage('Prepare') {
        zulipSend message: 'Started build #${BUILD_NUMBER} of project ${JOB_NAME}...'
        // ... Perhaps SCM checkout here ...
    }
    // ... Other build stages ...
}

Declarative Pipeline

In declarative pipeline, simply use the zulipSend step in any stage of the build.

pipeline {
    agent any
    stages {
        stage('Prepare') {
            steps {
                zulipSend message: 'Started build #${BUILD_NUMBER} of project ${JOB_NAME}...'
                // ... Perhaps SCM checkout here ...
            }
        }
        // ... Other build stages ...
    }
}

Job DSL

There is no explicit support for the Job DSL Plugin, but Zulip Send step and Zulip Notification can be configured via dynamically generated DSLs.

Example DSL creating a freestyle job using both Zulip Send and Zulip Notification:


job('DSL-Freestyle') {
  steps {
    zulipSend {
      message('Hello via job DSL!')
      stream('dslproject')
      topic('jenkins')
    }
  }
  publishers {
    zulipNotification {
      stream('dslproject')
      topic('jenkins')
    }
  }
}

Troubleshooting

No such DSL method

If you're using 1.x version of Jenkins and 1.x version of workflow job plugin (previous name for the pipeline jobs) you will encounter exceptions like java.lang.NoSuchMethodError: No such DSL method zulipSend found among [...].

In that case, you will have to use the meta-step instead. Simply replace:

zulipSend message: 'Test'

with

step([$class: 'ZulipSendStep', message: 'Test'])

and

zulipNotification()

with

step([$class: 'ZulipNotifier'])