jenkins2 pipeline实例

比较完整的实例,使用了maven打包,git tag,发通知邮件,等待用户deploy,deploy到nexus。



// Run this on the master node:
node  {
    // The JDK is configured as a tool with the name 'jdk-8u77' in the Jenkins 'Global Tool Configuration'
    env.JAVA_HOME="${tool 'jdk-8u77'}"
    // Maven is configured as a tool with the name 'M3' in the Jenkins 'Global Tool Configuration'.
    def mvnHome = tool 'M3'
    stage 'Checkout'
    // Configure the credential in Jenkins, and use the credential's ID in the following step:
    git url: 'ssh://', credentialsId: '8dbfb6d2-2549-4c6e-9a6e-994ae8797efc'
    stage 'Build and tag'
    // Define the version of this build.
    // BASE_VERSION is defined as a build parameter in the UI definition of the job.
    // Note how Groovy code is used to format the number of the current build.
    def version = "${BASE_VERSION}-J2TEST-" + currentBuild.number.toString().padLeft(4,'0')
    // Execute the maven command as a shell command step. On Windows, a 'bat'-step would be used instead.
    sh "${mvnHome}/bin/mvn clean verify -f KnowledgeEditor/pom.xml -Dfs.version=${version}"
    // Archive the zip file for access in through the Jenkins UI, or for other uses.
    archive 'KnowledgeEditor/*.zip'
    // Each build is tagged with an annotated tag.
    // There is no pipeline plugin for this (the Git Publisher plugin is not compatible),
    // so everything has to be implemented using shell commands.
    // First, we have to configure git with the mandatory user information:
    sh "git config \"Jenkins Pipeline\""
    sh "git config"
    // Next, tag this commit.
    def msg = "\"Automatically created tag ${version}\""
    sh "git tag -a -m ${msg} ${version}"
    // Finally, push to the repo.
    // For this to work, the ssh keys must be available in Jenkins' ~/.ssh folder
    sh "git push origin ${version}"
    // Send a mail to the person responsible for manual testing and release.
    mail subject: 'A new version of KEIII is available for testing.',
        body: 'A new version of KEIII is available for testing and approval of release.',
        charset: 'utf-8',
        from: '',
        mimeType: 'text/plain',
        to: ''
    stage 'Release'
    // User input showing up in the Jenkins UI.
    // If the timeout is reached, an exception is thrown and the build aborted.
    timeout(time: 120, unit: 'SECONDS') {
        input message: 'Do you want to release this version, ' +  version + ', of KEIII?', ok: 'Release'
    // A catch block could deal with the exception.
    // In order to release to Nexus, deploy and access information needs to be made available in
    // a maven settings file. This configuration is copied into the file defined as
    // mavenSettingsFile from the corresponding managed file in Jenkins...
    def mavenSettingsFile = "${pwd()}/.m2/settings.xml"
    // ... using the configuration file build wrapper:
    wrap([$class: 'ConfigFileBuildWrapper',
            managedFiles: [
                [fileId: '85adba0c-908b-4dbf-b3aa-65fe823e8984',
                targetLocation: "${mavenSettingsFile}"]]]) {
        // deploy to Nexus
        sh "${mvnHome}/bin/mvn deploy -s ${mavenSettingsFile} -f KnowledgeEditor/pom-deploy.xml -Dfs.version=${version}"


电子邮件地址不会被公开。 必填项已用*标注