• Jenkins的流水线(Pipeline)


    目录

    Jenkins安装部署使用_南宫乘风的博客-CSDN博客

    Jenkins入门配置_南宫乘风的博客-CSDN博客

    Jenkins集成Sonar Qube_南宫乘风的博客-CSDN博客

    Jenkins流水线

    Jenkins流水线任务介绍

    之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

    Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。

    所以Pipeline相对自由风格或者其他的项目风格更容易操作。

    Jenkins流水线任务

    构建Jenkins流水线任务

    构建任务

     生成Groovy脚本

    Hello World脚本生成

     构建后查看视图

    Groovy脚本

    Groovy脚本基础语法

    // 所有脚本命令包含在pipeline{}中
    pipeline {  
    	// 指定任务在哪个节点执行(Jenkins支持分布式)
        agent any
        
        // 配置全局环境,指定变量名=变量值信息
        environment{
        	host = '172.17.1.22'
        }
    
        // 存放所有任务的合集
        stages {
        	// 单个任务
            stage('任务1') {
            	// 实现任务的具体流程
                steps {
                    echo 'do something'
                }
            }
    		// 单个任务
            stage('任务2') {
            	// 实现任务的具体流程
                steps {
                    echo 'do something'
                }
            }
            // ……
        }
    }

    编写例子测试

    pipeline {
        agent any
    
        // 存放所有任务的合集
        stages {
            stage('拉取Git代码') {
                steps {
                    echo '拉取Git代码'
                }
            }
    
            stage('检测代码质量') {
                steps {
                    echo '检测代码质量'
                }
            }
    
            stage('构建代码') {
                steps {
                    echo '构建代码'
                }
            }
    
            stage('制作自定义镜像并发布Harbor') {
                steps {
                    echo '制作自定义镜像并发布Harbor'
                }
            }
    
            stage('基于Harbor部署工程') {
                steps {
                    echo '基于Harbor部署工程'
                }
            }
        }
    }

    配置Grovvy脚本

     查看效果

     Ps:涉及到特定脚本,Jenkins给予了充足的提示,可以自动生成命令

    生成命令位置

    Jenkinsfile实现

    Jenkinsfile方式需要将脚本内容编写到项目中的Jenkinsfile文件中,每次构建会自动拉取项目并且获取项目中Jenkinsfile文件对项目进行构建

    配置pipeline

     准备Jenkinsfile

     Jenkinsfile · 南宫乘风/java-demo - Gitee.com

    测试效果

    Jenkins流水线任务实现

    参数化构建

    添加参数化构建,方便选择不的项目版本

    拉取Git代码

    通过流水线语法生成Checkout代码的脚本

     

     

      将*/master更改为标签${tag}

    pipeline {
    
        agent any
            environment{
            harborRepo = 'heianapp'
            harborUser = 'heian99'
            harborPasswd = 'NG+.mK4M-(s4CYX'
        }
        // 存放所有任务的合集
        stages {
            stage('拉取Git代码') {
                steps {
                    echo '拉取Git代码'
                    checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'https://gitee.com/chengfeng99/java-demo.git']]])
                }
            }
    
            stage('检测代码质量') {
                steps {
                    echo '检测代码质量'
                     sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=19d0d6b885e18455d257d61da08776bd4e180c04'
                }
            }
    
            stage('构建代码') {
                steps {
                    echo '构建代码'
                     sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
                }
            }
    
            stage('制作自定义镜像并发布Harbor') {
                            steps {
                    echo '制作自定义镜像并发布Harbor'
                    sh '''
                    cp ./target/*.jar ./docker/demo.jar
                    cd ./docker
                    docker build -t ${JOB_NAME}:${BUILD_NUMBER} . '''
                    
                     sh '''docker login -u ${harborUser} -p ${harborPasswd} 
                    docker tag ${JOB_NAME}:${BUILD_NUMBER} ${harborUser}/${harborRepo}:${JOB_NAME}_${BUILD_NUMBER}
                    docker push ${harborUser}/${harborRepo}:${JOB_NAME}_${BUILD_NUMBER}'''
                }
            }
    
            stage('基于Harbor部署工程') {
                steps {
                    echo '基于Harbor部署工程'
                   sshPublisher(publishers: [sshPublisherDesc(configName: 'node-Linux32', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /opt/java/
    echo "测试成功" >> log.txt
     date >> log.txt''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/*.jar,docker/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                }
            }
        }
    }

    Ps:由于采用变量,记得使用双引号

    进行构建

     已经成功

  • 相关阅读:
    互联网+总决赛有感
    PyQt QListWidget修改列表项item的行高
    virtualenv 安装不同版本的虚拟环境的办法
    OpenDayLight Helium实验三 OpenDaylight二层转发机制实验
    OpenDayLight Helium实验一 OpenDaylight的C/S模式实验
    数据结构上机 经典进出栈问题
    【转载】解决telnet无法连接 Connection refused
    【Python初学者】准备
    OpenDayLight Helium安装
    Mininet实验 测量路径损耗率
  • 原文地址:https://www.cnblogs.com/heian99/p/16295727.html
Copyright © 2020-2023  润新知