前置文档
本教材是在下述文档的基础上修改的,请先阅读下述文档
说明
在Pipeline中,可以创建更灵活、更自由的配置。Pipeline就行dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队的其它成员同时参与进来,同时可以开发web-ui不能完成的复杂的构建逻辑,可读性也更好。
Pipeline语法的五个必备的组成部分有:
- pipeline:整条流水线
- agent:执行器(如果配置了jenkins集群的话,可以指定使用某台机器)
- statges:所有阶段
- statge:某一阶段,可以有多个。
- steps:阶段内的每一步,可以用来执行命令。
示例:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
}
步骤
1. 创建Pipeline项目
2. 定义流水线阶段
根据项目确定你的项目有哪些阶段,如:
- 拉取代码
- 执行构建
- 清理目标服务器
- 上传文件、构建镜像、运行容器
3. 定义每个阶段
点击流水线语法,可像web-ui一样填写信息,然后让它给你生成代码
3.1 从SVN拉取代码
选择【checkout】
checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'd0a3f5e1-b231-43d3-a89d-f0de3c767e7c', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'svn://192.168.3.129/p2/DemoApplication']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']]
3.2 maven构建
在stages前配置maven信息,这里的配的是【Global Tool Configuration】->【Maven】中的【Name】
3.3 清理目标服务器
3.4 发送jar包到目标服务器
3.5 总的pipeline文件
pipeline {
agent any
tools {
maven "maven 3.9.6"
}
stages {
stage('拉取代码') {
steps {
checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'd0a3f5e1-b231-43d3-a89d-f0de3c767e7c', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'svn://192.168.3.129/p2/DemoApplication']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']]
echo '代码拉取完毕'
}
}
stage('执行构建') {
steps {
sh """
pwd
mvn clean package
"""
echo 'mvn打包完成'
}
}
stage('清理目标服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'docker-server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf /opt/test3/*
docker stop DemoApp3
docker rm DemoApp3
docker rmi demo-app-image3''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean target success'
}
}
stage('发送jar包到服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'docker-server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'test3', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker build -t demo-app-image3 /opt/test3
docker run -d -p 8070:8080 --name DemoApp3 demo-app-image3''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'test3', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'send file and start container'
}
}
}
}
4. 安装Blue Ocen插件(可选)
安装Blue Ocen 1.25.5版本