Jenkins+Pipeline流水线项目(1)
说明
Jenkins pipeline 是一套插件,支持将连续输送管道实施和整合到Jenkins。Pipeline提供了一组可扩展的工具,用于通过管道DSL为代码创建简单到复杂的传送流水线。他目前支持jenkins 2.x以上版本。pipeline是由groovy语言编写
1.安装jenkins
可以查看:https://www.cnblogs.com/jxxiaocao/p/16191140.html
设置仓库和jenkins的关联(因为我使用的是gitee所以就介绍gitee,其他的都差不多)
gitee和jenkins关联:https://www.cnblogs.com/jxxiaocao/p/12668993.html
其他插件:
用户相关信息:https://www.cnblogs.com/jxxiaocao/p/16203126.html
2.安装pipeline插件
3.创建job
3.1参数化构建过程
设置git参数
3.2流水线
pipeline {
agent any //环境maven、jdk等
stages { //项目构建
stage('拉取代码') { //拉取代码
steps { //具体实施步骤
echo '拉取代码开始'
//下面 生成流水脚本 生成的 语句
// extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: 'common']]]] 拉取指定目录
checkout([
$class: 'GitSCM', branches: [[name: '*']],
extensions: [
[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]
],
userRemoteConfigs: [[credentialsId: '需要获取', url: 'git地址']]
])
echo "拉取的TAG:${TAGNAME}"
echo '拉取代码结束'
}
}
stage('编译打包') { // 编译打包
steps { //具体实施步骤
echo 'build project' // 打包命令
}
}
stage('部署上线') { // 部署上线
steps { //具体实施步骤
echo 'publish project' // 部署命令
}
}
}
post {
success {
//企微通知 TAGNAME 是上面 git参数 那的 名称
sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh token "环境" "${JOB_NAME}" "${TAGNAME}" "${BUILD_DISPLAY_NAME}" "${BUILD_USER}"'
echo 'whole pipeline successful'
}
failure {
echo 'FAILED (global)'
}
}
}
pipeline脚本式代码:
node { //全局变量(外部可以使用,比如shell中使用) env.ENVI = "test" //定义环境 env.WECHAT_TOKEN = "key" env.ERRI = "false" env.WORKSPACE = "/www/jenkins/workspace/${JOB_NAME}" //局部变量(在shel中不能使用) def GIT_URL = "git地址" try{ stage('拉取代码') { //拉取代码 echo '拉取代码开始' checkout([ $class: 'GitSCM', branches: [[name: '${TAGNAME}']], extensions: [[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]], userRemoteConfigs: [[credentialsId: '4e89640d-3576-4043-a4e2-47d', url: "${GIT_URL}"]] ]) echo "拉取的TAG:${TAGNAME}" echo '拉取代码结束' } stage('编译打包') { // 编译打包 echo '编译打包开始' echo '编译打包结束' } stage('部署上线') { echo '部署上线开始'
// 这里用到 ansible 同步代码(Jenkins+Pipeline+Ansible 自动化部署) sh 'ansible-playbook -e "host=wb workspace=${WORKSPACE} item=${JOB_NAME} exclude=.git*" /etc/ansible/variables.yml' echo '部署上线结束' } env.RESULT = currentBuild.currentResult }catch(err){ echo "编译失败,错误原因如下:${err} " env.ERRI = "true" env.RESULT = "FAILURE:\n ${err}" }finally{ } //获取构建用时 env.DURATION_STRING = currentBuild.durationString //企微通知 sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh "${WECHAT_TOKEN}" \ "${ENVI}" \ "${JOB_NAME}" \ "${TAGNAME}" \ "${BUILD_DISPLAY_NAME}" \ "${DURATION_STRING}" \ "${RESULT}" \ "${BUILD_USER}"' //判断是否失败,如果是强制显示失败图标 if(env.ERRI == "true"){ script { error "${ERRI}" } } }
ps:Pipeline流水线的优化方案
Pipeline语法:
比如获取credentialsId
点击 生成流水脚本
把生成的 checkout(.......) 放到 上面
3.3构建
结果:
wechat_send.sh 脚本(通知)
#!/bin/sh CHAT_WEBHOOK_KEY="$1" ENV="$2" ITEM="$3" TAG="$4" BUILD_DISPLAY_NAME="$5" MILLIS_TIME="$6" STATE="$7" OPERATOR="$8" CHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key' CHAT_CONTENT_TYPE='Content-Type: application/json' curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \ -H "${CHAT_CONTENT_TYPE}" \ -d ' { "msgtype": "markdown", "markdown": { "content": "<font color=\"warning\">版本发布通知</font>\n >发布环境:<font color=\"info\">'"${ENV}"'</font> >项目名称:<font color=\"info\">'"${ITEM}"'</font> >发布Tag:<font color=\"info\">'"${TAG}"'</font> >构建名称:<font color=\"comment\">'"${BUILD_DISPLAY_NAME}"'</font> >构建用时:<font color=\"comment\">'"${MILLIS_TIME}"'</font> >构建状态:<font color=\"warning\">'"${STATE}"'</font> >执行人:<font color=\"comment\">'"${OPERATOR}"'</font>" } }
ps:企微通知需要安装 Qy Wechat Notification 插件,当然也可以用 钉钉 通知就不介绍了都差不多
通知
成功:
失败:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构