当前位置: 首页 > news >正文

jenkins流水线常规配置教程!

Jenkins流水线是在工作中实现CI/CD常用的工具。以下是一些我在工作和学习中总结出来常用的一些流水线配置:变量需要加双引号括起来 "${main}"

一 引用无账号的凭据

使用变量方式引用,这种方式只适合只由密码,没有用户名的凭证。例如:token。

pipeline {agent anytools {maven 'maven-3.9.6'}environment {// 将凭据定义成变量K8spass = credentials('k8s-service-passwd')}stages {stage('source') {steps {//使用变量就可以了echo"${K8spass}"}}}
}

二 用户名和密码的凭据

此处实例是登陆harbor仓库的。

  • withCredentials

    引用凭证,可将凭证中的密码和账号分开定义,后面登陆时候分别引用。

  • credentialsId

    凭证的ID。

steps {withCredentials([usernamePassword(credentialsId: 'harbor-password', \passwordVariable: 'harborUserPassword', usernameVariable: 'harborUserName')]) {sh "echo ${harborUserPassword} | docker login -u ${harborUserName} --password-stdin XXXXXsh "docker image push harbor.ly01.com/registy/helloword:${BUILD_NUMBER} }}

三 git的使用

git branch: 'main', credentialsId: 'gitee-password-credential', url: 'https://gitee.com/XXXXX.git'

四 发布时暂停下载等待用户确认

pipeline {agent anystages {stage('Hello') {steps {input "是否确认发布?"}}}
}

效果图:

五 条件式判断

when一般写在stage里。当when判断符合条件才会执行stage里其他的内容。

//tag为v1.0则符合条件
when { tag "v1.0" }//not为反向判单
when { not { branch 'master' } }//allOf:当所有条件都满足时符合判断条件
when { allOf {branch 'master';environment name:'tag',valume:'v1.0'} }//anyOf:只要符合其中一个条件就符合,或关系
when { anyOf {branch 'master';branch 'staging'} }

六 实现webhook自动触发

需要gitlab ,generic webhook trigger插件。

下面实例表示push和merge时候会触发:

secretTocken:可自定义的token。

最后定义gitlab的webhook即可。

配置完要执行一遍,然后就会看到流水线里会自动配置了webhook的配置内容(和UI配置的内容一样)。

pipeline {agent anytriggers {gitlab(triggerOnPush: true,triggerOnMergeRequest: true,branchFilterType: 'All',addVoteOnMergeRequest: true,secretToken: 'XXXXXXXXXXXXXXXXXXXXXXXX')}stages {stage('Hello') {steps {input"是否确认发布?"}}}
}triggers {GenericTrigger(genericVariables: [[key: 'ref', value: '$.ref']],token: 'xxxxxxxx',causeString:'Triggered on ${ref}',printContributedVariables: true,printPostContent: true)}

后面只需要将Token存放到gitlab中即可完成webhook.

gitlab配置的URL:

http://jenkins.ly01.com/generic-webhook-trigger/invoke?token=↑

七 分布式构建

需要事先准备好环境:

//根据标签指定在哪个服务器上执行。可在pipeline中指定,也可在stage下添加
agent { label 'linux-jnlp-agent' }//指定不同的构建方式
agent any|none|label{}|docker{}|kubernetes{}

7.1 docker分布式

需要安装docker-pipeline和docker:

agent {docker {image 'eclipse-temurin:17-jre-alpine'label 'master'}
}

7.2 kubenetes分布式

需要安装kubenetes。并添加了clouds的k8s环境:

pipeline {agent {kubernetes {//指定配置的pod模板名称inheritFrom 'kube-agent'}}stages {stage('test') {steps {//固定格式写如container('jnlp')container('jnlp') {sh 'java -version'}}}

7.3 多容器分布式构建

在jenkins的k8s中添加多个pod模板。然后在流水线中引用容器列表的名称即可。

pipeline {agent {kubernetes {inheritFrom 'kube-maven'}}stages {stage('test') {steps {container('jnlp') {sh'java -version'}}}stage('test maven') {steps {//名称为容器列表的自定义名称container('maven') {sh'mvn -version'}}}}
}

7.4 实现pod的配置持久化

因为pod在构建完成后就会被销毁。maven等配置每次都要重新拉取类库。所以需要将这些配置持久化。

这里采用pv-pvc的方式。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-maven-cache
namespace: jenkins
spec:
accessModes:- ReadWriteMany
resources:requests:storage: 10Gi
storageClassName: nfs-csi

在jenkins中配置pvc的挂载:

八 构建完成后的通知操作

注:需要安装钉钉插件和企业微信插件,全局的钉钉配置请看图形化。

post{success{qyWechatNotification failNotify: true, webhookUrl: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx'}failure{qyWechatNotification failNotify: true, webhookUrl: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx'}}post {always {dingtalk(robot: 'dingtalk',type: 'TEXT',text: ["Status of pipeline: ${currentBuild.fullDisplayName}","${env.BUILD_URL} has result ${currentBuild.result}."])}}post {always|failure|success|unstable|aborted|... {}
}


文章转载自:

http://RgV1bu6U.nbgfz.cn
http://HvNAqYWs.nbgfz.cn
http://4d8wGADi.nbgfz.cn
http://n1srOne3.nbgfz.cn
http://s2jgXolG.nbgfz.cn
http://E6hvtnHR.nbgfz.cn
http://WNOdgbs9.nbgfz.cn
http://QNTvN5aF.nbgfz.cn
http://ztPxL3Pm.nbgfz.cn
http://M2NxVDib.nbgfz.cn
http://f6sZmEiW.nbgfz.cn
http://JcGJ4Sqw.nbgfz.cn
http://jXlq0tdI.nbgfz.cn
http://rfEbTzNN.nbgfz.cn
http://7tFBrvWZ.nbgfz.cn
http://wgUp5Sfu.nbgfz.cn
http://p0swxAw5.nbgfz.cn
http://q4ChLfBp.nbgfz.cn
http://3BZmTdfv.nbgfz.cn
http://nLMlmhlJ.nbgfz.cn
http://vIb8uH5M.nbgfz.cn
http://j0pJQSrW.nbgfz.cn
http://yzersvRg.nbgfz.cn
http://Nf2Twaad.nbgfz.cn
http://oe8KQHUy.nbgfz.cn
http://GuCZJTfX.nbgfz.cn
http://rxsQ08xG.nbgfz.cn
http://c9Xil3NU.nbgfz.cn
http://5RiTmVuH.nbgfz.cn
http://pKLMZpAy.nbgfz.cn
http://www.dtcms.com/a/187916.html

相关文章:

  • aardio - 将文本生成CSS格式显示
  • 汽车功能安全--TC3xx MBIST设计要点
  • 2025高质量数据集实践指南
  • 22.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--增加公共代码
  • 裸金属服务器 VS 传统物理机
  • c++STL-list的使用和迭代器
  • 基于Session实现短信登录全流程详解
  • Windows下安装mysql8.0
  • 【Tauri2】044 移动端Android的初步配置
  • React Native告别图标体积大手动更换慢的噩梦:让图标更新像修改文字一样简单
  • STM32 HAL驱动程序 内部Flash
  • 基于深度学习的工业OCR数字识别系统架构解析
  • Linux的文件查找与压缩
  • BGP实验练习2
  • spring中的@Async注解详解
  • 2025年PMP 学习十 -第8章 项目质量管理(8.1,8.2)
  • 内存泄漏与OOM崩溃根治方案:JVM与原生内存池差异化排查手册
  • 【登录认证】JWT令牌
  • D-Pointer(Pimpl)设计模式(指向实现的指针)
  • 【氮化镓】电子辐照下温度对GaN位移阈能的影响
  • 青少年编程与数学 02-019 Rust 编程基础 09课题、流程控制
  • 【js中数据类型及区别】
  • 20250513_问题:由于全局Pytorch导致的错误
  • 十天学会嵌入式技术之51单片机—day-9
  • 深入理解 NumPy:Python 科学计算的基石
  • 【Bootstrap V4系列】学习入门教程之 组件-导航(Navs)高级用法
  • Nacos源码—9.Nacos升级gRPC分析八
  • 物理:从人出生和死亡的角度来讨论基本粒子的创生和湮灭以及是否守恒?
  • Spark 缓存(Caching)
  • 配置Nginx启用Https