大家好我是你们的小圆。
经过了之前的学习,我们了解了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("流水线取消后,要做的事情")
}
}
}
}
最后我来总结一下,今天用pipline的方式去实现了一个简单的自由式风格的构建,主要的目的是,给大家演示一下前几篇文章中所介绍的部分声明式指令在实际中该怎么用,当我们遇到不会写的地方时,如何用流水线开发工具去解决问题。如果你还有什么问题,或者建议,可以给我留言。期待与你共同进步。