文章简介

        在“DevOps 生态介绍(三):零基础入门 Jenkins:部署成功后编译你的第一个项目”这篇文章中主要介绍了在Jenkins UI界面手动配置完成项目的前后端构建。今天这边文章主要介绍通过Jenkins pipeline来完成前后端项目的构建。

        备注:今天这边文章直接上干货,不具体介绍pipeline的语法,直接根据我在用的Jenkinsfile文件进行实战介绍,这两个Jenkinsfile文件我个人觉得可以拿过来根据自己的实际情况修改下就能直接使用

Jenkins pipeline构建前端项目        

#前端项目Jenkinsfile文件内容
pipeline {
    agent any

    tools {
        nodejs 'NodeJS'
    }
    parameters {

        gitParameter(
            name: 'BRANCH',
            type: 'PT_BRANCH',
            defaultValue: 'master',
            branchFilter: 'origin/(.*)',
            sortMode: 'DESCENDING_SMART',
            selectedValue: 'DEFAULT',
            description: '请选择要构建的分支'
        )

        choice(
            name: 'RUN_COVERAGE',
            choices: ['YES','NO'],
            description: '请选择YES/NO'
        )
    }


    stages {

        stage('checkout_get_code') {
            steps {

                checkout([
                    $class: 'GitSCM',
                    branches: [[name: "*/${params.BRANCH}"]],
                    userRemoteConfigs: [[
                        credentialsId: 'f245a11f-afe0-4ca4-aa2d-1e574724677d',
                        url: 'https://codeup.xxxx.com/60b83b8301d20d58b8017/test-front.git'
                    ]]
                ])

            }
        }

        stage('Build_front') {
            steps {
			    	nodejs('NodeJS') {
                    // some block
                  }

                sh """
                    cd $WORKSPACE/
                    npm config set registry https://registry.npmmirror.com
                    #npm install -g pnpm@9
                    pnpm install
                    #pnpm -r --filter=main-ocbc run coverage build
                    if [ "${params.RUN_COVERAGE}" = "YES" ]; then
                        echo "Running coverage tests..."
                        pnpm run coverage
                    fi
                    pnpm run  build-ocbc


                """

            }
        }

        stage('tar_package') {
            steps {

                sh """
                    echo "tar package 开始..."

                    cd $WORKSPACE/packages/main-ocbo/dist
                    tar -zcvf test-front.tar.gz *
					
                """

            }
        }

        stage('CD') {
            steps {

                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: '192.168.1.170',

                            transfers: [
                                sshTransfer(
                                    cleanRemote: false,
                                    excludes: '',

                                    execCommand: '''
                                      #!/bin/bash
                                      
                                      DATE=`date '+%Y-%m-%d-%H:%M:%S'`

                                      cd /tmp
                                      mkdir test-front
                                      chmod 755  test-front
                                      mv  test-front.tar.gz   test-front/
                                      cd /tmp/test-front/
                                      tar -zxvf test-front.tar.gz && rm -f  test-front.tar.gz
                                      chmod 755 * -R

                                      mv /data/app/test-front     /home/backup/test-front.$DATE.bak
                                      mv /tmp/test-front     /data/app/
                                      ''',

                                    execTimeout: 120000,
                                    flatten: false,
                                    makeEmptyDirs: false,
                                    noDefaultExcludes: false,
                                    patternSeparator: '[, ]+',
                                    remoteDirectory: '/tmp/',
                                    remoteDirectorySDF: false,
                                    removePrefix: 'packages/main-ocbo/dist/',
                                    sourceFiles: 'packages/main-ocbo/dist/test-front.tar.gz'
                                )
                            ],

                            usePromotionTimestamp: false,
                            useWorkspaceInPromotion: false,
                            verbose: false
                        )
                    ]
                )

            }
        }

    }
}

Jenkins pipeline构建后端java项目

#java 后端项目Jenkinsfile内容
pipeline {
    agent any

    tools {
        maven 'Maven'
    }

    parameters {

        gitParameter(
            name: 'BRANCH',
            type: 'PT_BRANCH',
            defaultValue: 'master',
            branchFilter: 'origin/(.*)',
            sortMode: 'DESCENDING_SMART',
            selectedValue: 'DEFAULT',
            description: '请选择要构建的分支'
        )

        booleanParam(
            name: 'SKIP_TEST',
            defaultValue: true,
            description: '是否跳过单元测试'
        )
        
        choice(
            name: 'JDK_VERSION',
            choices: ['JDK17','JDK21'],
            description: '请选择JDK版本'
        )
    }
    
    
    environment {

        JAVA_HOME = tool "${params.JDK_VERSION}"

        PATH = "${env.JAVA_HOME}/bin:${env.PATH}"
    }

    stages {

        stage('checkout_get_code') {
            steps {

                checkout([
                    $class: 'GitSCM',
                    branches: [[name: "*/${params.BRANCH}"]],
                    userRemoteConfigs: [[
                        credentialsId: 'f245a11f-afe0-4ca4-aa2d-1e574724677d',
                        url: 'https://codeup.xxxx.com/60b83b301d20d58b8017/test.git'
                    ]]
                ])

            }
        }

        stage('Build_jar') {
            steps {

                sh """
                    echo "build jar"
                    
                    java -version
                    echo $JAVA_HOME

                    mvn clean package \
                    -DskipTests=${params.SKIP_TEST}

                """

            }
        }

        stage('tar_package') {
            steps {

                sh """
                    echo "tar package 开始..."

                    cd target

                    tar -zcvf test.tar.gz \
                    ms-util-1.2.0-SNAPSHOT.jar
                """

            }
        }

        stage('CD') {
            steps {

                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: '192.168.1.170',

                            transfers: [
                                sshTransfer(
                                    cleanRemote: false,
                                    excludes: '',

                                    execCommand: '''
                                      #!/bin/bash
                                      
                                      source /etc/profile
                                      
                                      cd /data/app/mq_util
                                      
                                      ./server.sh stop
                                      
                                      tar zxvf test.tar.gz
                                      
                                      sleep 2
                                      
                                      rm -rf test.tar.gz
                                      
                                      BUILD_ID=dontKillMe
                                      
                                      ./server.sh start
                                      
                                      sleep 2
                                      ''',

                                    execTimeout: 120000,
                                    flatten: false,
                                    makeEmptyDirs: false,
                                    noDefaultExcludes: false,
                                    patternSeparator: '[, ]+',
                                    remoteDirectory: '/data/app/mq_util',
                                    remoteDirectorySDF: false,
                                    removePrefix: 'target/',
                                    sourceFiles: 'target/test.tar.gz'
                                )
                            ],

                            usePromotionTimestamp: false,
                            useWorkspaceInPromotion: false,
                            verbose: false
                        )
                    ]
                )

            }
        }

        stage('jacoco') {
            steps {
                jacoco()
            }
        }

    }
}

Jenkinsfile 注意事项

        1:Jenkinsfile 文件名必须严格是“Jenkinsfile ”,没有后缀之类的格式

        2:Jenkinsfile 文件存放目录必须是在项目的根目录下,与根pom.xml文件在同一目录下

        3:每个项目都有很多分支,不需要每个分支下都有Jenkinsfile文件,可以单独创一个pipeline的分支就放一个Jenkinsfile文件,构建时在选择业务分支进行构建即可。

下一批文章将介绍

DevOps 生态介绍(七):Jenkins Pipeline 核心语法大全,这一篇就够了!

  

更多推荐