19. jenkins -- weekly CI

软件截图

image
image
image

jenkins配置

#!/usr/bin/groovy
/*引用plll库–plll名称以jenkins的系统配置为准,@V2.02d为plll库中对应分支(当前分支为无线稳定分支)——政通参考分支为feature/plll_zt  */
//@Library('plll@feature/goldendb') _
@Library(['plll@feature/goldendb','jenkins-swap-library@goldendb']) _


/*********************************************************************************************************
 * 主流程
 ********************************************************************************************************/
main()

/* main */
def main() {

/*指定node服务器,优先选择本地slave*/
    pnode('goldendb_devops'){
        /* 初始化环境 */
        set_system_properties()

        /* 更新JOB配置properties */
        set_default_properties()

        /* 执行构建加载 */
        plll([
            /*工作区定义:默认jenkins公用工作区*/
            workspace:"${env.SHARED}",
            /*获取项目并行工作区数*/
            sharenumber: getShareNumber(),
            /*上载制品库服务信息:以jenkins的系统配置为准*/
            artifactory: "nj-artifactory",
            /*是否发送采集数据*/
            sendcidata:true,
        ]) {
            /* 设置运行参数: */
            set_running_properties()

            /* 一些准备工作 */
            run_prepare()

            /* 执行业务pipeline流程 */
            run_pipeline();
        }

        if("${plll.getUserName()}" == "branchindexing"){
            return
        }

        print "get pipeline result: ${plll.getResult()}"

        if( "${plll.getResult()}" != "success" ){
            error "本次构建失败,请检查!"
        }
    }

    return
}

/*********************************************************************************************************
 * 设置参数
 ********************************************************************************************************/
def set_system_properties() {
    /* 设置管理员邮件*/
    env.ADMIN_USER_EMAIL   = "sun.linnan@goldendb.com"

    /* 设置gerrit 认证账号的key:该值取自于jenkins credentials*/
    env.GERRIT_KEY_ID      = "7cbafc4a-fd9d-4e22-a6a9-15910957ce5a"
     /* Jenkins服务gerrit trigger配置 */
    env.GERRIT_SERVER_NAME = "GerritServer"
    /*获取gerrit服务器信息:默认从创建mutlipipeline job的git路径中获取*/
    env.GERRIT_SERVER_URL  = plll.getScmServer()
    /*获取git库信息:创建mutlipipeline job时,git URL有/a/时,一定要去掉/a/ */
    env.GERRIT_PROJECT     = env.GERRIT_PROJECT?:plll.getScmProject()

    /* 设置分支版本 */
    env.ProductModel = "ZXCLOUD GoldenDB"
    env.BRANCH_TAG         = env.BRANCH_TAG?:plll.getJobBaseName()

    /* 制品上载路径: */
    env.ART_TARGET         = "goldendb-snapshot-generic/${plll.getJobName()}/"
    /*制品路径声明,以备调用*/
    plll.setArtifactory(["target":env.ART_TARGET])

    /*邮件接收设置*/
    env.mail_list_exec = ""

    env.mail_list_sel = ""

    if(plll.isDailyCI()){
        env.mail_list_to = "${env.mail_list_exec},${env.mail_list_sel}"
        env.mail_list_cc = "zhang.jun102@goldendb.com"
    }else{
        env.mail_list_to = ""
        env.mail_list_cc = ""
    }

    plll.setMailReceiver([to:"${env.mail_list_to}", cc:"${env.mail_list_cc}"])

    plll.getData().job_keep_times='25'     //设置job老化次数,默认值为60
    plll.getData().job_keep_days='4'       //设置job老化天数,默认值为60

    env.ecversion=params.ecversion
    env.component="DBPROXY"  //组件名称
    return
}

/* 设置分支JOB的属性 */
def set_default_properties() {
    /*mutlipipeline 创建分支job时,相关gerrit 触发配置*/
    def gerrit = null
    def cron = 'H H * * 6'
    def parameters = null

    /*设置分支JOB的属性入口*/
    plll.set_default_properties([
        /* 关联gerrit */
        gerrit: gerrit,
        /* 定时任务 */
        cron: cron,
        /* 自定义参数 */
        parameters: parameters,
    ]);

    return
}

/* 设置运行参数 */
def set_running_properties() {
    plll.setBranchTag(env.BRANCH_TAG)
    plll.setDebug(false)
    plll.getData().kwchecklevel="warn"

    if(env.BRANCH_TAG.contains('ZXCLOUD-GoldenDB-InsightTool')){
        env.PROJECT_VERSION="${env.BRANCH_TAG}"
    }else if (env.BRANCH_TAG.contains('ZXCLOUD-GoldenDB-ALL-InsightTool')){
        env.PROJECT_VERSION="${env.BRANCH_TAG}"
    }else{
        env.PROJECT_VERSION="ZXCLOUD-GoldenDB-InsightToolV${env.BRANCH_TAG}"
    }

    env.GIT_VERSION=""
    env.language="C"
    env.PUBLIC = "${env.SHARED}/public"
    env.CODE= "${env.SHARESPACE}/source"
    env.OUTPUT = "${env.SHARESPACE}/output"
    plll.getData().autoOptimizeCheckout = true
    return
}


def run_prepare(){
    /*更改权限,防止操作因权限问题失败;清理UT测试的中间结果*/
    def cmd = ""
    cmd += "cd /home/workspace;"
    cmd += "chmod -R 777 * || true;"

    pdocker.callbash (
        /* image      */ "docker.artnj.zte.com.cn/cci/cloud-goldendb/redhat6.5:dbproxyv1.0",
        /* cmd           */ "${cmd}",
        /* volumes    */ "-v ${env.SHARESPACE}:/home/workspace",
        /* params     */ "--privileged",
        )

    /*清理并重新创建输出目录以及基线打zip包目录*/
    run "rm -rf ${env.OUTPUT}"
    run "mkdir -p ${env.OUTPUT}"
}

/*********************************************************************************************************
 * 业务流程
 ********************************************************************************************************/
def run_pipeline() {
    parallel 'HardCodeDetect':{
        stage('Checkout') { run_update() }
        stage('HardCodeDetect') { run_hardcode_detect() }
    }, 'Hub':{
        stage('Hub') {
          run_hub()
        }
    }
}

/* 更新 */
def run_update() {
    plll.Update('update', '更新代码', [
    scm:[type:"git", keyid:"${env.GERRIT_KEY_ID}",  repo:"${env.GERRIT_SERVER_URL}", project:"${env.GERRIT_PROJECT}",
            branch:"${env.BRANCH_TAG}", path:"${env.SHARESPACE}/source",refspec:""],
    report:[[report_dir:"${env.SHARESPACE}/target/Update/update/output/", report_file:"commit_files.txt",report_name:"变更文件", report_always:true,report_all:false]],
    measure:null,
    ])
}

def run_hub(){
    def ccaProjectName = 'GoldenDB V7.3'
    def ccaTaskName = "${env.BRANCH_TAG}_GDB_InsightTool_openSrc_ALL"
    plll.ccaHub('ccaHub', 'ccaHub', [
        projectName:ccaProjectName ,
        taskName: ccaTaskName
        ])
}

def run_hardcode_detect() {

    pnode {
        def title = "InsightTool-${env.BRANCH_TAG}-#${BUILD_NUMBER}-"
        def cmd = ""
        echo "开始安全编码扫描。。。。。。。。"
        if (plll.isDailyCI() || plll.isManualCI()) {
            cmd = """cp -rf /home/version/HardCode/* /home/HardCodedInspectionTool &&
                     sed -i s/'GDB'/'${title}'/g /home/HardCodedInspectionTool/llm_hardcode/createIcenter.py &&
                     sh scan.sh &&
                     sh ai.sh &&
                     cp -rf /home/HardCodedInspectionTool/TopN_report /home/output &&
                     cp -r /home/HardCodedInspectionTool/*.tar.gz /home/output/TopN_report/ """
        } else if (plll.isVerifyCI()) {
            cmd = """cp -rf /home/version/HardCode/* /home/HardCodedInspectionTool &&
                     python3 add_prefix.py -i /home/version/codediff -o scanlist.txt -p /home/version &&
                     sed -i s/'GDB'/'${title}'/g /home/HardCodedInspectionTool/llm_hardcode/createIcenter.py &&
                     sh scan.sh &&
                     sh ai.sh &&
                     cp -rf /home/HardCodedInspectionTool/TopN_report /home/output &&
                     cp -r /home/HardCodedInspectionTool/*.tar.gz /home/output/TopN_report/ """
        } else {
            return
        }
        plll.Task("HardCodedInspectionToolV2.5", "明文密码检查", [
            run_execute: {
                pdocker.callbash(
                    "goldendb-release-docker.artnj.zte.com.cn/build/centos8:hardcodev2.5",
                    cmd,
                    "-v ${env.CODE}:/home/version -v ${env.OUTPUT}/hardcode:/home/output -w /home/HardCodedInspectionTool",
                    "--privileged"
                )
                def news = run('grep ",NEW$" ' + "${env.OUTPUT}/hardcode/TopN_report/Team_*.csv | wc -l || true", true)
                if ("${news}" != "0") {
                    error "新引入了${news}个明文密码,请处理!参考: https://i.zte.com.cn/index/ispace/#/space/e63167c497404b58851f0d73d79a5afd/wiki/page/73810e0ab6fa408f9c2ee9f4b14e68b4/view"
                }
            },
            report: [
                [
                    report_dir  : "${env.OUTPUT}/hardcode/TopN_report",
                    report_name : 'HardCodedInspection_html',
                    report_files: ["*.html"],
                    report_all  : true
                ],
                [
                    report_dir  : "${env.OUTPUT}/hardcode/TopN_report",
                    report_name : 'HardCodedInspection_report',
                    report_files: ["*.tar.gz"],
                    report_all  : true
                ]
            ]
        ]);
        echo "---------------------end hardcode detect check------------------------"
    }
}


/*********************************************************************************************************
 * 工具函数
 ********************************************************************************************************/
/**
 * 获取并行数
 * 1、非mesos节点,master不限制(由节点的executor个数决定)
 * 2、mesos节点,master最多10个,非master最多2个
 */
def getShareNumber() {
    def sharenumber=0

    if(plll.isMesos()) {
        sharenumber = 4
    }

    if(!plll.checkBranchName('master')){
        sharenumber = 4
    }

    return sharenumber
}

def getLockName(){
    def lock_name = null
    if(plll.isMergeCI()){
        lock_name = "${plll.getJobName()}/mergeci"
    }
    return lock_name
}

posted @ 2026-02-03 15:28  静水深耕,云停风驻  阅读(2)  评论(0)    收藏  举报