美文网首页
Jenkins Pipeline系列(二)—— 使用扩展共享库构

Jenkins Pipeline系列(二)—— 使用扩展共享库构

作者: 天行者YANG | 来源:发表于2020-10-07 11:29 被阅读0次

    Jenkins Pipeline Maven Project

    用代码的方式,管理日常的构建

    1.Maven Project构建的阶段(简单流程)

    1. 清理工作区
    2. 获取code
    3. 加载CI配置文件
    4. 打包
    5. 工件归档
    6. 部署或其他操作
    7. 通知构建结果(这里用的是钉钉)

    上面仅仅是针对一般类型项目进行的构建阶段说明,可以针对自己的要求进行增减(还可以包含docker镜像的打包、推送私服、git tag等等)

    2.Maven Demo Project

    .
    ├── README.md
    ├── app                   # 主要的code存放module
    ├── assembly              # 打包module
    ├── commitlint.config.js  # git commit message插件配置
    ├── config                # 相关yml properties配置module
    ├── jenkins.groovy        # Jenkins Pipeline调用的配置文件
    ├── maven                 # mvnw
    ├── mvnw
    ├── mvnw.bat
    ├── package.json          # git commit 依赖包相关
    └── pom.xml
    

    上图是标准的Maven多module项目结构,其中有一个jenkins.groovy是和Jenkins Pipeline相关的

    //打包配置文件,配置打包相关信息,CI打包的时候会加载这个文件
    
    // 项目名称
    env.PROJECT_CHINESE_NAME = "michael的测试项目"
    // 英文名字,用于产物命名,不要随意修改
    env.PROJECT_ENGLISH_NAME = "michael-jenkins-pipeline-demo"
    // 归档文件正则,如:*.jar
    env.ARCH_FILE_PATTERN = "assembly/target/michael-jenkins-pipeline-demo-deploy.zip"
    

    3.Pipeline Scripts

    3.1 辅助脚本

    # 在vars新建fetch_code.groovy
    # BUILD_BRANCH为输入参数
    
    def call(GIT_URL) {
        git branch: "${BUILD_BRANCH}",
        credentialsId: '你的凭证',
        url: "${GIT_URL}"
    }
    
    # 在vars新建log.groovy
    
    def info(message) {
        echo "INFO: ${message}"
    }
    
    def warning(message) {
        echo "WARNING: ${message}"
    }
    
    def error(message) {
        echo "ERROR: ${message}"
    }
    
    # 在vars新建dingding.groovy
    def notice(branch) {
        duration = currentBuild.duration / 1000
        statusMessage = ''
        buildStatusMessage = currentBuild.currentResult
        if(buildStatusMessage == 'SUCCESS') {
            statusMessage="**<font color=red>成功</font>**"
        }else {
            statusMessage="**<font color=red>失败</font>**"
        }
        dingtalk (
            robot: '机器人code',
            type: 'MARKDOWN',
            atAll: false,
            title: "${JOB_NAME} BUILD",
            text:[
            "# 【${JOB_NAME}】构建完成",
            "",
            "---",
            "构建结果: ${statusMessage}",
            "> [查看控制台](${BUILD_URL})",
            "- 构建分支: ${branch}",
            "- 构建用时: ${duration} 秒"
            ]
        )
    }
    

    3.2 构建脚本

    /* Config {
        deployPath: 部署路径
    }
    */
    def call(Map config) {
        node('java') {
            properties([
                buildDiscarder(
                    logRotator(
                        daysToKeepStr: '30',
                        numToKeepStr: '50'
                    )
                )
            ])
            stage('清理工作区') {
                log.info '清理工作区'
                deleteDir()
            }
            stage('获取代码') {
                log.info "获取代码地址:${REPO_URL},获取代码分支: ${BUILD_BRANCH}"
                fetch_code "${REPO_URL}"
            }
            stage('加载CI配置文件') {
                log.info "加载CI配置文件"
                jenkinsConfigFile="./jenkins.groovy"
                if (fileExists("${jenkinsConfigFile}")) {
                    load "${jenkinsConfigFile}"
                    log.info "找到打包参数文件${jenkinsConfigFile},加载成功"
                } else {
                    log.error "${jenkinsConfigFile}不存在,请在项目${jenkinsConfigFile}里面配置打包参数"
                    sh "exit 1"
                }
            }
            stage('构建') {
                log.info '构建'
                sh "mvn wrapper:wrapper && ./mvnw clean package -Dmaven.test.skip=true"
            }
            stage('工件归档') {
                log.info '工件归档'
                archive_file = "${ARCH_FILE_PATTERN}"
                echo "Archive ${archive_file}"
                archiveArtifacts artifacts: "${archive_file}", fingerprint: true
            }
            stage('部署 OR 其他操作') {
                log.info "部署分支: ${BUILD_BRANCH}"
                // 进行对象的部署获取其他操作
                currentBuild.description = "代码分支: ${BUILD_BRANCH}<br>"
            }
            stage('通知') {
                dingding.notice("${BUILD_BRANCH}")
            }
        }   
    }
    
    Jenkins Pipeline系列(一)—— 如何配置扩展共享库
    Jenkins Pipeline系列(二)—— 使用扩展共享库构建Maven项目
    Jenkins Pipeline系列(三)—— 使用扩展共享库构建微信小程序项目

    相关文章

      网友评论

          本文标题:Jenkins Pipeline系列(二)—— 使用扩展共享库构

          本文链接:https://www.haomeiwen.com/subject/mzdrwhtx.html