job pipeline如何使用token 触发

Jenkins Pipeline 使用 Token 触发构建的完整指南

Jenkins Pipeline 支持多种通过 Token 触发构建的方式,主要包括 内置远程触发Generic Webhook Trigger 插件 两种方式。下面详细介绍具体实现方法。


一、生成 Token

1. 用户 API Token(用于认证)

在 Jenkins 中生成用户 API Token,用于身份验证:

步骤:

  1. 登录 Jenkins → 点击右上角用户名 → 选择 "Configure"

  2. 找到 "API Token" 部分

  3. 点击 "Add new Token" → 输入 Token 名称 → 点击 "Generate"

  4. 务必保存好生成的 Token,只显示一次

2. Job 触发 Token(用于授权)

在 Job 配置中设置触发令牌:

步骤:

  1. 进入 Pipeline Job 配置页面

  2. 找到 "构建触发器" 部分

  3. 勾选 "Trigger builds remotely"

  4. 输入 "Authentication Token"(例如:my-secret-token-123

  5. 保存配置


二、Pipeline 中配置 Token 触发

方式 1:Generic Webhook Trigger 插件(推荐)

安装插件:Generic Webhook Trigger Plugin

在 Jenkinsfile 中配置触发器:

groovy

复制

pipeline {
    agent any
    
    // 定义触发器
    triggers {
        GenericTrigger(
            // 从 Webhook 请求中提取变量
            genericVariables: [
                [key: 'ref', value: '$.ref'],
                [key: 'branch', value: '$.ref', expressionType: 'JSONPath'],
                [key: 'commit', value: '$.after']
            ],
            
            // 触发 Token,建议从 Jenkins 凭据中获取
            token: 'jenkins-token-xxx',
            // tokenCredentialId: 'webhook-token-credentials', // 从凭据中获取更安全
            
            // 构建原因说明
            causeString: 'Triggered on $ref',
            
            // 打印调试信息
            printContributedVariables: true,
            printPostContent: true,
            
            // 过滤触发条件
            regexpFilterText: '$ref',
            regexpFilterExpression: 'refs/heads/(main|develop)' // 只匹配 main 和 develop 分支
        )
    }
    
    stages {
        stage('Process Webhook') {
            steps {
                script {
                    // 使用从 Webhook 提取的变量
                    echo "Branch: ${env.branch}"
                    echo "Commit: ${env.commit}"
                }
            }
        }
    }
}

触发请求示例:

bash

复制

# 在 URL 中传递 token
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"ref": "refs/heads/main", "after": "abc123"}' \
  http://jenkins.local:8080/generic-webhook-trigger/invoke?token=jenkins-token-xxx

方式 2:内置远程触发配置

Declarative Pipeline 示例

groovy

复制

pipeline {
    agent any
    
    // 配置 Job 属性,包括触发器
    properties([
        pipelineTriggers([
            // 启用远程触发
            triggers: [
                [
                    $class: 'hudson.triggers.TimerTrigger',
                    spec: 'H/15 * * * *' // 定时触发,可选
                ]
            ]
        ])
    ])
    
    parameters {
        string(name: 'ENVIRONMENT', defaultValue: 'dev', description: '部署环境')
        booleanParam(name: 'DEPLOY', defaultValue: false, description: '是否部署')
    }
    
    stages {
        stage('Build') {
            steps {
                echo "Building for ${params.ENVIRONMENT}"
            }
        }
    }
}

注意:内置远程触发在 Job 配置页面设置 Token 即可,Jenkinsfile 中无需额外配置。


三、触发构建的多种方式

1. 使用 curl 命令触发

无参数 Pipeline

bash

复制

# 使用 Job Token 触发(无需认证)
curl -X POST "http://JENKINS_URL/job/PIPELINE_JOB/build?token=my-secret-token-123"

# 使用 API Token 认证(更安全)
curl -X POST "http://JENKINS_URL/job/PIPELINE_JOB/build" \
  --user "username:api-token"
带参数 Pipeline

bash

复制

# 使用 buildWithParameters
curl -X POST "http://JENKINS_URL/job/PIPELINE_JOB/buildWithParameters" \
  --user "username:api-token" \
  --data "token=my-secret-token-123" \
  --data "ENVIRONMENT=production" \
  --data "DEPLOY=true"

# 或使用 URL 参数(需设置"Build Authorization Token Root"插件)
curl -X POST "http://JENKINS_URL/job/PIPELINE_JOB/buildWithParameters?token=my-secret-token-123&ENVIRONMENT=production&DEPLOY=true"

2. 使用 Python 脚本触发

Python

复制

import requests
from requests.auth import HTTPBasicAuth

# Jenkins 配置
jenkins_url = "http://localhost:8080"
job_name = "my-pipeline"
username = "jenkins_user"
api_token = "11c343cd5f00421..."  # 用户 API Token
job_token = "my-secret-token-123"    # Job 触发 Token

# 构建 URL
url = f"{jenkins_url}/job/{job_name}/buildWithParameters"

# 参数
params = {
    'token': job_token,
    'ENVIRONMENT': 'staging',
    'DEPLOY': 'true'
}

try:
    response = requests.post(
        url,
        auth=HTTPBasicAuth(username, api_token),
        data=params
    )
    
    if response.status_code == 201:
        print("✅ 构建成功触发!")
        print(f"构建队列位置: {response.headers.get('Location')}")
    else:
        print(f"❌ 构建失败:{response.status_code}")
        print(response.text)

except Exception as e:
    print(f"❌ 发生错误:{str(e)}")

3. 在另一个 Pipeline 中触发

groovy

复制

pipeline {
    agent any
    
    stages {
        stage('Trigger Remote Job') {
            steps {
                script {
                    // 方式 1:使用 build 步骤
                    build(
                        job: '/folder/another-pipeline',
                        parameters: [
                            string(name: 'ENVIRONMENT', value: 'prod'),
                            booleanParam(name: 'DEPLOY', value: true)
                        ],
                        wait: false // 是否等待远程 Job 完成
                    )
                    
                    // 方式 2:使用 HTTP 请求
                    sh """
                        curl -X POST "http://jenkins:8080/job/another-pipeline/buildWithParameters" \
                          --user "user:api-token" \
                          --data "token=job-token" \
                          --data "ENVIRONMENT=prod"
                    """
                }
            }
        }
    }
}

四、安全最佳实践

  1. 使用凭据管理 Token

    • 在 Jenkins 中创建 "Secret text" 类型的凭据存储 Token

    • 在 Pipeline 中通过 credentials() 函数引用

groovy

复制

pipeline {
    agent any
    triggers {
        GenericTrigger(
            tokenCredentialId: 'webhook-token-credentials', // 从凭据获取
            // 其他配置...
        )
    }
}
  1. 限制 Token 权限

    • 为不同的集成创建独立的 Jenkins 用户

    • 只授予最小必要权限

  2. 使用 HTTPS

    • 生产环境务必使用 HTTPS 协议

    • 避免 Token 明文传输

  3. IP 白名单

    • 在 Jenkins 中配置允许的源 IP 地址

    • 防止未授权访问


五、完整示例:GitLab Webhook 触发

groovy

复制

pipeline {
    agent any
    
    triggers {
        GenericTrigger(
            genericVariables: [
                [key: 'ref', value: '$.ref'],
                [key: 'user', value: '$.user_username'],
                [key: 'project', value: '$.project.name']
            ],
            token: 'gitlab-integration-token',
            causeString: '$user 触发了 $project 构建',
            regexpFilterText: '$ref',
            regexpFilterExpression: 'refs/heads/(main|develop|release/.*)'
        )
    }
    
    environment {
        // 使用提取的变量
        BRANCH = env.ref?.replace('refs/heads/', '')
    }
    
    stages {
        stage('Checkout') {
            steps {
                echo "检出分支: ${env.BRANCH}"
                // 根据分支名检出代码
            }
        }
        
        stage('Build') {
            when {
                anyOf {
                    branch 'main'
                    branch 'develop'
                }
            }
            steps {
                echo "构建项目 ${env.project}"
                // 执行构建逻辑
            }
        }
    }
    
    post {
        always {
            echo "构建完成,触发者: ${env.user}"
        }
    }
}

GitLab Webhook 配置:

  • URL: http://jenkins.example.com/generic-webhook-trigger/invoke?token=gitlab-integration-token

  • Trigger: Push events

  • Secret Token: gitlab-integration-token


六、常见问题排查

  1. 403 错误:检查用户权限和 CSRF Protection 设置

  2. 401 错误:API Token 或用户名错误

  3. 无法触发:检查 Token 是否匹配,正则过滤条件是否满足

  4. 参数缺失:确保 URL 使用 buildWithParameters 而不是 build

通过以上配置,你可以安全、灵活地使用 Token 触发 Jenkins Pipeline 构建,实现与 GitLab、GitHub、自定义脚本等系统的集成。

### 集成钉钉通知到 Jenkins Pipeline 为了在 Jenkins Pipeline 中集成钉钉的通知功能,可以按照以下方法实现。这通常涉及配置 Jenkins 插件以及编写相应的脚本。 #### 1. 安装必要的插件 首先需要安装支持 Webhook 或 HTTP 请求发送的插件来完成与钉钉 API 的交互。可以通过以下方式安装 `HTTP Request Plugin` 和其他可能需要用到的相关插件: - 进入 **Manage Jenkins >> Manage Plugins** 页面。 - 切换至 “可选插件” 选项卡并搜索 `_Maven Integration_` 插件[^4](虽然这里提到的是 Maven 插件,但类似的逻辑适用于查找和安装任何插件)。对于钉钉通知来说,推荐搜索关键词如 `HTTP Request` 并安装该插件。 #### 2. 获取钉钉机器人 Webhook 地址 钉钉提供了群聊机器人服务以便于开发者通过自定义接口向指定聊天组发送消息。具体操作如下: - 登录钉钉管理后台创建一个新的群聊机器人; - 复制生成好的 webhook URL (形似 https://oapi.dingtalk.com/robot/send?access_token=...)用于后续调用API时传递数据给服务器端处理请求。 #### 3. 编写Pipeline 脚本 下面是一个简单的例子展示如何利用 Groovy 脚本来构建一个能够触发钉钉通知的任务流程: ```groovy pipeline { agent any stages { stage('Example Build') { steps { echo 'Building....' script{ def response = httpRequest contentType: 'APPLICATION_JSON', customHeaders:[[name:'Content-Type', value:'application/json']], httpMode: 'POST', requestBody: """{"msgtype": "text", "text": {"content":"Build Successful"}}""", url: '<your_dingtalk_webhook_url>' println(response.content) } } } stage('Fail Example'){ steps{ error 'Simulate a failure.' } post{ always{ script{ try{ def failResponse = httpRequest contentType: 'APPLICATION_JSON', customHeaders:[[name:'Content-Type', value:'application/json']], httpMode: 'POST', requestBody: """{"msgtype": "text", "text": {"content":"Build Failed!"}}""", url: '<your_dingtalk_webhook_url>' println(failResponse.content) }catch(e){ echo e.getMessage() } } } } } } } ``` 上述代码展示了两个阶段的例子——一个是成功的构建过程会发送成功的信息;另一个模拟失败场景并向相关人员报告错误详情。注意替换 `<your_dingtalk_webhook_url>` 成为你自己的实际URL地址[^2]。 #### 4. 测试运行 保存修改后的 pipeline 后即可测试其效果。如果一切正常的话,则每次执行相应job的时候都会自动推送对应状态的消息到关联好的钉钉群里去啦! --- ### 注意事项 确保防火墙设置允许外发 HTTPS 请求到达互联网上的目标位置 (即 DingTalk 的官方 endpoint),否则可能会遇到连接超时等问题[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值