Jenkinsfile 5.79 KB
pipeline {
    agent any
    //环境定义
    environment{
        //服务名称
        SVN_FOLD = "fe-data-asset-management"
        //部署远程服务器
        //192.168.4.4服务器
        //SSH_PATH = "csbr4.4"
        //192.168.5.4
        SSH_PATH = "csbr5.4"
        SVN_TYPE = "temp"
        //139.9.190.186
        //SSH_PATH = "csbr190.186"
        //SVN_TYPE = "master"
        //镜像版本号
        image_tag = "1.0.0"
        //docker私服ip
        ip = "192.168.5.4:82"
        //前端端口号
        port = "80"
        //映射端口号
        vport = "80"

    }
    //定时任务
    //triggers { pollSCM('H 4/* 0 0 1-5') }
    //triggers {
        //每天凌晨2点自动构建
    //    cron('H 2 * * *')
    //}
     options {
            // 设置保留的最大历史构建数为6
        buildDiscarder(logRotator(numToKeepStr: '2'))
     }
    //全局定义工具
    tools {
        //工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。
        nodejs 'node 16.20.2'
    }
    stages {
	    //清空
	    stage('Clean') {
            steps {
                sh 'rm -rf dist/*'
            }
        }
        //构建
        stage('Node Build') {
            steps {
               nodejs('node 16.20.2'){}
               //配置私有npm仓库
                sh 'npm config set registry http://49.4.23.228:8001/repository/csbr-npm/'
               sh 'yarn config set registry http://49.4.23.228:8001/repository/csbr-npm/'
               // 配置后可通过下面方式来验证是否成功
               sh 'npm config get registry'
               sh 'npm install -g pnpm'
               sh 'pnpm config set registry http://registry.npm.taobao.org'
               sh 'pnpm install'
               sh 'pnpm build:product'
            }
        }
        stage('Docker Build') {
                    steps {
                       //分分支构建
                       script{
                            if(env.BRANCH_NAME=='master'){
                                //master-asset分支环境
                                echo 'start to deploy ${SVN_FOLD} on master ...'
                                 sh '''
                                    #docker rmi -f $(docker images | grep "none" | awk '{print $3}')
                                    CID=$(docker ps -a | grep "${SVN_FOLD}" | awk '{print $1}')
                                    #IID=$(docker images | grep "${SVN_FOLD}" | awk '{print $3}')
                                    IID=$(docker images | grep "none" | awk '{print $3}')
                                    if [ -n "$IID" ]; then
                                       echo "存在'${SVN_FOLD}'镜像,IID='$IID'"
                                       cd "$WORKSPACE"/
                                       ##构建镜像到远程仓库
                                       docker login "${ip}" -u admin -p E6w611g864wQ2
                                       #docker tag "${SVN_FOLD}":"${image_tag}" "${ip}"/csbr/"${SVN_FOLD}":"${image_tag}"
                                       docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" .
                                        docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
                                    else
                                       echo "不存在'${SVN_FOLD}'镜像,开始构建镜像"
                                       ##构建镜像到远程仓库
                                       docker login "${ip}" -u admin -p E6w611g864wQ2
                                       #docker tag "${SVN_FOLD}":"${image_tag}" "${ip}"/csbr/"${SVN_FOLD}":"${image_tag}"
                                        docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" .
                                       docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
                                    fi
                                    '''
                                echo 'Depoly ${SVN_FOLD} success ...'
                            }
                       }
                    }
                }
        //测试(暂时不用)
        //stage('Test') {
            //steps {
                //sh './gradlew check'
                //sh 'mvn -f ${SVN_FOLD}/pom.xml test'
                //sh 'mvn -f ${SVN_FOLD}/pom.xml test'
            //}
        //}
        //部署
        stage('Deploy') {
            steps {
                echo 'Deploying'
                //分分支部署
                script{
                    if(env.BRANCH_NAME=='master'){
                        //master-asset分支环境
                        echo 'start to deploy ${SVN_FOLD} on master ...'
                        //调用Publish Over SSH插件,上传docker-compose.yaml文件并且执行deploy脚本
                        sshPublisher(publishers: [sshPublisherDesc(configName: "csbr5.4", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """
                             #使用k8s构建
                             kubectl delete -f /mnt/k8s/daop/zq-production/daop-zcgl/fe-data-asset-management.yaml
                             kubectl apply -f /mnt/k8s/daop/zq-production/daop-zcgl/fe-data-asset-management.yaml
                        """, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/mnt/csbr/data', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'output/*.*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

                        echo 'Depoly ${SVN_FOLD} success ...'
                    }
                }
            }
        }
    }

    //归档
    post {
        always {
            echo 'Archive artifacts'
            archiveArtifacts artifacts: "dist/**", excludes: "dist"
        }
    }


}