用pipeline来实现一个自由风格的构建

Posted 小圆和他的朋友们

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用pipeline来实现一个自由风格的构建相关的知识,希望对你有一定的参考价值。

经过了之前的学习,我们了解了pipline的基本使用方式,那么我们来一个小的实战,之前jenkins构建的时候,我们完成了一个自由风格的构建,那么,我们可不可以用pipline的方式去实现它,当然是可以的,那么我们先回顾一下,构建的流程

我们要配置一个Git的环境变量,可以选择部署哪个分支。然后,我们需要源码管理,来下载代码。之后,我们要打包项目,最后,要把项目复制到远程目录,那么我们一步一步来实现。

首先我们要配置git的环境变量,我们需要的模块是parameters,代码如下:

    parameters 
        gitParameter branchFilter: origin/(.*), defaultValue: main, name: GIT_TAG, type: PT_BRANCH
    

下面我们将开始编写stages的阶段,他一共分为三个stage。首先是CheckOut,我们用来获取代码,然后是Build用来打包程序,最后是Deploy,用来发送到项目服务器。他的大体结构如下

    stages
        //阶段1 获取代码
        stage("CheckOut")
            steps
                script
                    println("获取代码")
                
            
        
        stage("Build")
            steps
                script
                    println("进行构建")
                
            
        
        stage("Deploy")
            steps
                script
                    println("进行部署")
                
            
        
    

然后我们来一步一步,将它填完整
首先是拉取代码,我们需要调用git,

steps
    script
        println("获取代码")
        git branch: main, credentialsId: gitlab, url: https://gitlab.yuanminglei.com/mpweixin/koaserver.git
    

然后,我们进行构建,这里需要在script里面用sh命令运行脚本

 stage("Build")
     steps
         script
             println("进行构建")
             sh "/opt/shell/jenkins/koaserver/build-koaserver-pipline.sh $GIT_TAG"
         
     
 

最后就是,发送到远端服务器,我们要调用sshPublisher模块来完成

stage("Deploy")
    steps
        script
            println("进行部署")
        
        sshPublisher(
            publishers: [sshPublisherDesc
                (configName: aliyun, transfers: 
                    [sshTransfer
                        (cleanRemote: false, 
                         excludes: , 
                         execCommand: pwd, 
                         execTimeout: 120000, 
                         flatten: false, 
                         makeEmptyDirs: false, 
                         noDefaultExcludes: false, 
                         patternSeparator: [, ]+, 
                         remoteDirectory: /opt/test1, 
                         remoteDirectorySDF: false, 
                         removePrefix: target, 
                         sourceFiles: target/jenkins-test-build01-*.tar.gz
                        )
                    ], 
                    usePromotionTimestamp: false, 
                    useWorkspaceInPromotion: false, 
                    verbose: false
                )
            ]
        )
    

这里要主要sshPublisher不在是,包在,script里面的命令了,而是和script平行的模块。

那么有的同学可能要问,想这么复杂的配置,怎么可能记得住,这里就要使用jenkins另外一个工具,流水线语法。它就在,我们配置完pipeline最后。

点击进入

如果我们要用sshPublisher,可以在示例步骤中,选择sshPublisher: Send build artifacts over SSH

配置完成,点击生成流水线脚本

这样就已经生成好了。

下面我把,今天的例子完整部分贴在下面。供你测试

String workspace = "/opt/jenkins/workspace/"

pipeline
    //指定运行此流水线的节点
    agent  node  
            label "master"
            customWorkspace "$workspace"
        
    

    parameters 
        gitParameter branchFilter: origin/(.*), defaultValue: main, name: GIT_TAG, type: PT_BRANCH
    

    //流水线的阶段
    stages
        //阶段1 获取代码
        stage("CheckOut")
            steps
                script
                    println("获取代码")
                    git branch: main, credentialsId: gitlab, url: https://gitlab.yuanminglei.com/mpweixin/koaserver.git
                
            
        
        stage("Build")
            steps
                script
                    sh "/opt/shell/jenkins/koaserver/build-koaserver-pipline.sh $GIT_TAG"
                
            
        
        stage("Deploy")
            steps
                script
                    println("进行部署")
                
                sshPublisher(
                    publishers: [sshPublisherDesc
                        (configName: aliyun, transfers: 
                            [sshTransfer
                                (cleanRemote: false, 
                                 excludes: , 
                                 execCommand: pwd, 
                                 execTimeout: 120000, 
                                 flatten: false, 
                                 makeEmptyDirs: false, 
                                 noDefaultExcludes: false, 
                                 patternSeparator: [, ]+, 
                                 remoteDirectory: /opt/test1, 
                                 remoteDirectorySDF: false, 
                                 removePrefix: target, 
                                 sourceFiles: target/jenkins-test-build01-*.tar.gz
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        )
                    ]
                )
            
        
    
    post 
        always
            script
                println("流水线结束后,经常做的事情")
            
        

        success
            script
                println("流水线成功后,要做的事情")
            

        
        failure
            script
                println("流水线失败后,要做的事情")
            
        

        aborted
            script
                println("流水线取消后,要做的事情")
            

        
    

以上是关于用pipeline来实现一个自由风格的构建的主要内容,如果未能解决你的问题,请参考以下文章

jenkins pipeline部署实践及重点问题分析

jenkins pipeline部署实践及重点问题分析

在k8s+jenkins+github+dockerhub环境中用pipeline部署应用

Jenkins——Jenkins构建Maven项目(三种风格)+Jenkins项目构建细节

Jenkins——Jenkins构建Maven项目(三种风格)+Jenkins项目构建细节

Jenkins 创建自由风格Maven类型和流水线类型的任务,进行项目拉取编译自动部署