莫张周刘王 发表于 2025-9-7 19:27:05

jenkins流水线常规配置教程!

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

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZTNjZTZlYzNlNzQ3NDI0MjgzZDdjNWY3MmZhODY2MWUucG5n


git branch: 'main', credentialsId: 'gitee-password-credential', url: 'https://gitee.com/XXXXX.git'四 发布时暂停下载等待用户确认


pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                input "是否确认发布?"
            }
        }
    }
}结果图:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvMjFiYTA0MDllM2JjNDhkMjgwZjRjNWM1ODQwMGE5MWYucG5n

五 条件式判定

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: [
               
            ],
            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的挂载:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNDczN2JmZDJiNGE3NDMwNDlkMTJiOTE1ZTQyOWNhMDIucG5n

八 构建完成后的通知操纵

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

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|... {
        
    }
}


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: jenkins流水线常规配置教程!