点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


变量需要加双引号括起来 "${main}"
引用无账号的凭据
使用变量方式引用,这种方式只适合只由密码,没有用户名的凭证。例如:token。
pipeline {
agent any
tools {
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 XXXXX
sh "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 any
stages {
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 any
triggers {
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|... {
}
}复制

本文作者:刘 营(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
60分钟部署Oracle 21c RAC
王先生
251次阅读
2025-03-04 16:31:52
玩转DeepSeek系列:使用OCI GPU快速部署推理模型
甲骨文云技术
101次阅读
2025-03-03 09:46:33
EMQX MCP Server:实现 Claude 与 MQTT 交互新可能
EMQX
43次阅读
2025-03-07 10:29:52
如何使用 RisingWave 和 PuppyGraph 构建高性能实时图分析框架
RisingWave中文开源社区
29次阅读
2025-03-18 10:49:54
详细到没朋友的 NebulaGraph 桌面版部署指南
NebulaGraph 技术社区
25次阅读
2025-03-07 10:29:53
一键部署 GPU Kind 集群,体验 vLLM 极速推理
Se7en的架构笔记
21次阅读
2025-03-24 09:41:41
NineData 社区版初体验,大超预期
老叶茶馆
16次阅读
2025-03-18 10:45:49
下一代DBA必备技能
Bytebase
15次阅读
2025-03-28 14:59:40
使用Docker五分钟快速安装配置oracle数据库【最新版】【测试成功】
巴韭特锁螺丝
10次阅读
2025-03-10 08:47:21
Docker更新反人类?一款容器管理效率翻倍工具,还自带备份防崩溃
科技小猿
10次阅读
2025-03-10 08:01:15