Jenkins新手实战系列——2.管道(Pipeline)模式项目

1,926 阅读2分钟

前话

前面说到了自由模式,通过简单的配置即可完成简单项目的持续集成。 但在大型项目中,就缺乏灵活性了。这时候我们可以使用管道模式,它能够通过定义脚本的方式细分构建步骤,这方便我们跟踪到持续集成的每个细节,把控进度,大大提高项目的健壮性。

案例

我有一个较为复杂前端项目(React),这个项目使用git进行版本管理,只有一个分支master。 我想在我每次提交代码的时候,这个项目能够被感知有新的提交的时候按顺序执行以下动作:

  1. 拉取最新代码
  2. 执行 npm run build 命令生成最终目标资源文件
  3. 将目标资源文件部署到nginx服务器上
  4. 在部署完成后,jenkins项目管理后台能够下载最新的目标资源文件的压缩包

下面开始案例实战。

开始

1.新建并初始化git项目

过程略,项目名称为my-pipeline,地址为http://localhost:3000/root/my-pipeline.git

2.新建jenkins项目

3.配置jenkins项目

pipeline模式的项目细分每个集成步骤,因此无需配置关联git项目,只需配置构建触发器与pipeline脚本即可。

3.1 配置构建触发器

3.2 配置pipeline脚本

pipeline脚本有两个配置模式:

  1. 在jenkins项目中配置
  2. 在git项目中新建pipeline脚本文件

我们这个案例中选择在jenkins项目中配置,脚本内容如下:

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                echo '开始拉取代码...'
                cleanWs(patterns: [[pattern: 'node_modules', type: 'INCLUDE']])
                git credentialsId: '1b458187-1203-4ef5-8f9a-97fe7576e4b1', url: 'http://gitea:3000/root/my-pipeline.git'
            }
        }
        stage('Build') {
            steps {
                echo '开始构建代码...'
                sh label: '安装依赖', script: 'npm install'
                sh label: '构建代码', script: 'npm run build'
            }
        }
        stage('Archive') {
            steps {
                echo '开始打包文件...'
                archiveArtifacts 'dist/**/*'
            }
        }
        stage('Deploy') {
            steps {
                echo '开始部署文件...'
                sshPublisher(publishers: [sshPublisherDesc(configName: 'nginx', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nginx -s reload', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'dist', sourceFiles: 'dist/**/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}

4.配置git项目

添加钩子调用jenkins项目构建api即可。

测试

git项目中新增变更提交,在jenkins项目首页即可查看构建过程。