前话
前面说到了自由模式,通过简单的配置即可完成简单项目的持续集成。 但在大型项目中,就缺乏灵活性了。这时候我们可以使用管道模式,它能够通过定义脚本的方式细分构建步骤,这方便我们跟踪到持续集成的每个细节,把控进度,大大提高项目的健壮性。
案例
我有一个较为复杂前端项目(React),这个项目使用git进行版本管理,只有一个分支master。 我想在我每次提交代码的时候,这个项目能够被感知有新的提交的时候按顺序执行以下动作:
- 拉取最新代码
- 执行
npm run build
命令生成最终目标资源文件 - 将目标资源文件部署到nginx服务器上
- 在部署完成后,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脚本有两个配置模式:
- 在jenkins项目中配置
- 在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项目首页即可查看构建过程。