A Jenkinsfile is a complex Pipeline file that uses Agent, parameters, script, build job, sh, if-else. Where parameters contains extendedChoice.

pipeline {
    agent { label 'master' }

    parameters {
        extendedChoice (
            name: 'projectApiBranch'.defaultValue: 'master'.description: 'Project API branch name'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh project-api demo-ai-api-core' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list project api branches'
        )
        extendedChoice (
            name: 'projectWebBranch'.defaultValue: 'master'.description: 'Project Web Branch name'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh project-web demo-project-web' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list project web branches'
        )
        extendedChoice (
            name: 'wikiApiBranch'.defaultValue: 'master'.description: 'Wiki API branch name'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh wiki-api demo-wiki-api-core' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list wiki api branches'
        )
        extendedChoice (
            name: 'wikiWebBranch'.defaultValue: 'master'.description: 'Wiki Web branch name'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh wiki-web demo-wiki-web' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list wiki api branches'
        )
        extendedChoice (
            name: 'thirdImportTag'.defaultValue: 'v1.0.3'.description: 'Third-party imported Versions'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/demo/go/src/github.com/bangwork/demo-third-importer && git tag -l |grep -v "{}"|sed "s/\\\\^{}//g"|sed "s/.*tags\\\\///g"|sort -rV ']
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list third import tags'
        )
        extendedChoice (
            name: 'devopsBranch'.defaultValue: 'master'.description: 'Devops branch name'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh devops-api demo-devops-api-core' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list devops branches'
        )
        extendedChoice (
            name: 'auditlogSyncTag'.defaultValue: 'master'.description: Audit Log Component Branch number.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh audit-log-sync demo-ai-audit-log-sync' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list auditlog sync tags'
        )
        choice (
            description: 'Fluter (Mobile Web Page) Version'.name: 'mobileWebTag'.choices: ['v1.0.0'.'v1.1.0'.'v1.1.1.'v1.2.1'.'v1.3.0'.'v1.3.1'.'v1.3.2']
        )
        choice (
            name: 'binlogSyncTag'.description: 'Log Event Synchronization Component Version'.choices: ['v1.0.9'.'v1.0.8'.'v1.0.7'.'v1.0.6'.'v1.0.5'.'v1.0.3'.'v1.0.0']
        )
        string (
            name: 'baseImageVersion'.defaultValue: 'latest'.description: The default value is Latest. If you need to replace the base image, prepare the base image on the build machine and fill in the specified version, for example, V1.0.8.
        )
        string (
            name: 'demobuildBinVersion'.defaultValue: 'default'.description: 'release The version of the mirror generator that needs to be replaced by a binary on the builder and filled in with the specified version number. '
        )

        extendedChoice (
            name: 'democonfigureBranch'.defaultValue: 'master'.description: 'demo - ai - docker branch'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_bin_file_branches.sh demo-ai-docker democonfigure' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list demo-ai-docker branches'
        )

        string (
            name: 'instanceName'.defaultValue: ' '.description: 'No more than 8 characters, not unique, used only to identify the test environment, generally the same as the iteration number, for example, S1001, optionally named (if left blank, randomly generated)'
        )

        extendedChoice (
            name: 'version'.defaultValue: ' '.description: 'Version number (this parameter does not take effect if you are not using an old version number)'.type: 'PT_SINGLE_SELECT'.groovyScript: '''def ver_keys = [ 'bash', '-c', '/var/jenkins_home/scripts/get_versions.sh | sort -rV' ]
ver_keys.execute().text.tokenize('\\n')'''.multiSelectDelimiter: ', '.visibleItemCount: 5.descriptionGroovyScript: 'list versions'
        )
        booleanParam(
            name: 'useOldVersion'.defaultValue: false.description: 'Whether to use the old version number, if so skip build_image and use the version number corresponding to version'
        )
    }

    stages {
        stage('build_image') {
            steps {
                script {
                    if (params.useOldVersion == false) {
                        build job: 'build-image'.parameters: [
                            extendedChoice(name: 'projectApiBranch'.value: "${params.projectApiBranch}"),
                            extendedChoice(name: 'projectWebBranch'.value: "${params.projectWebBranch}"),
                            extendedChoice(name: 'wikiApiBranch'.value: "${params.wikiApiBranch}"),
                            extendedChoice(name: 'wikiWebBranch'.value: "${params.wikiWebBranch}"),
                            extendedChoice(name: 'thirdImportTag'.value: "${params.thirdImportTag}"),
                            extendedChoice(name: 'devopsBranch'.value: "${params.devopsBranch}"),
                            string(name: 'mobileWebTag'.value: "${params.mobileWebTag}"),
                            string(name: 'binlogSyncTag'.value: "${params.binlogSyncTag}"),
                            extendedChoice(name: 'auditlogSyncTag'.value: "${params.auditlogSyncTag}"),
                            string(name: 'baseImageVersion'.value: "${params.baseImageVersion}"),
                            string(name: 'demobuildBinVersion'.value: "${params.demobuildBinVersion}")]}else {
                        echo 'use old version'
                    }
                }
            }
        }

        stage('build_install_pak') {
            steps {
                script {
                    if (params.useOldVersion == true) {
                        version = params.version
                    } else {
                        version = sh (
                            script: 'echo 0.1.`ssh -p8022 [email protected] cat /disk2/mars_jenkins_user_data/demo/buildNum.info`'.returnStdout: true
                        ).trim()
                    }
                    build job: 'build-install-pak'.parameters: [
                        extendedChoice(name: 'version'.value: "${version}"),
                        extendedChoice(name: 'branch'.value: "${params.democonfigureBranch}")
                    ]
                }
            }
        }

        stage('create_test_env') {
            steps {
                build job: 'create-test-env'.parameters: [
                    string(name: 'instanceName'.value: "${params.instanceName}"),
                    extendedChoice(name: 'version'.value: "${version}")]}}}}Copy the code

Official Docs: www.jenkins.io/doc/book/pi…

Original link: k8scat.com/posts/jenki…