其他
生成或脚手架 Jenkinsfile…
适用于需要创建 Jenkins 声明式或脚本式 pipeline、并行/矩阵构建、Docker/K8s 部署、DevSecOps 扫描或共享库脚手架的 CI/CD 场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
生成或脚手架 Jenkinsfile 时特定
解决思路
- 默认选择 Declarative Pipeline;当 stage 顺序和行为基本静态时使用。
- 当需要运行时生成 stage、复杂循环或动态控制流时选择 Scripted Pipeline。
- 当请求涉及可复用 pipeline 函数(vars/、src/、resources/)时生成 Shared Library scaffolding。
- 不确定时先写 Declarative,只有需求无法清晰表达时才切换 Scripted。
- 按模板映射选择模板:标准 CI/CD 且阶段可预测用 assets/templates/declarative/basic.Jenkinsfile;并行测试/构建分支且 fail-fast 用 examples/declarative-parallel.Jenkinsfile;Kubernetes agent pod template 用 examples/declarative-kubernetes.Jenkinsfile;复杂条件或生成 stage 用 assets/templates/scripted/basic.Jenkinsfile;可复用函数用 scripts/generate_shared_library.py 生成。
- 最小 Declarative Pipeline 使用 pipeline { agent any; stages { stage('Build') { steps { sh 'make' } }; stage('Test') { steps { sh 'make test' } } } }。
- 易失败 stage 用 catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') { sh 'run-flaky-tests.sh' } 包裹,使失败不终止构建。
- 条件部署加审批:stage('Deploy') 中设置 when { branch 'main'; beforeAgent true }、input { message 'Deploy to production?' }、steps { sh './deploy.sh' }。
- options 中用 timeout(time: 1, unit: 'HOURS') 防止构建挂起。
- options 中用 buildDiscarder(logRotator(numToKeepStr: '10')) 管理磁盘空间。
- options 中用 disableConcurrentBuilds() 防止竞态。
- 用 catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') 在错误时继续。
- 生成 Declarative Pipeline 时读取 assets/templates/declarative/basic.Jenkinsfile 理解标准结构:pipeline → agent → environment → options → parameters → stages → post;复杂请求适配结构而非逐字复制。
- 读取 references/best_practices.md 获取性能、安全、可靠性模式。
- 读取 references/common_plugins.md 获取插件特定语法。
- 生成 Declarative Pipeline 时包含描述性 stage 名称。
- 包含 environment block 并绑定 credentials,绝不硬编码 secrets。
- 包含 options:timeout、buildDiscarder、timestamps、disableConcurrentBuilds。
- 包含 post conditions:always 清理、success 归档产物、failure 通知。
- 对 parallel blocks 总是添加 failFast true 或 parallelsAlwaysFailFast()。
- 使用 archiveArtifacts 时总是包含 fingerprint: true。
- 生成 Declarative Pipeline 后始终用 devops-skills:jenkinsfile-validator skill 验证。
- 生成 Scripted Pipeline 时读取 assets/templates/scripted/basic.Jenkinsfile 了解 node/stage 模式和 try-catch-finally 错误处理。
- Scripted Pipeline 中实现 try-catch-finally 错误处理。
- 生成 Scripted Pipeline 后始终用 devops-skills:jenkinsfile-validator skill 验证。
- 并行/矩阵 pipeline 使用 parallel {} 或 matrix {} 搭配 axes {} 做多维构建。
- 生成的并行 pipeline 默认 fail-fast,使用 parallelsAlwaysFailFast() 或 stage 级 failFast true。
- DevSecOps 安全扫描:添加 SonarQube、OWASP Dependency-Check、Trivy stages,并设置失败阈值。
- 共享库脚手架运行 python3 scripts/generate_shared_library.py --name my-library --package org.example。
- Agent 类型:agent any;agent { label 'linux && docker' };agent { docker { image 'maven:3.9.11-eclipse-temurin-21' } };agent { kubernetes { yaml '...' } };agent { kubernetes { yamlFile 'pod.yaml' } }。
- Environment & credentials:environment { VERSION = '1.0.0'; AWS_KEY = credentials('aws-key-id') },credentials 会创建 _USR 和 _PSW 变量。
- Options:包含 buildDiscarder(logRotator(numToKeepStr: '10'))、timeout(time: 1, unit: 'HOURS')、disableConcurrentBuilds()、timestamps()、parallelsAlwaysFailFast()、durabilityHint('PERFORMANCE_OPTIMIZED')(简单 pipeline 可快 2-6 倍)。
- Parameters:使用 string(name: 'VERSION', defaultValue: '1.0.0')、choice(name: 'ENV', choices: ['dev', 'staging', 'prod'])、booleanParam(name: 'SKIP_TESTS', defaultValue: false)。
- When 条件:branch(branch 'main' 或 branch pattern: 'release/*', comparator: 'GLOB')、tag(tag pattern: 'v*', comparator: 'GLOB')、changeRequest(changeRequest target: 'main')、changeset(changeset 'src/**/*.java')、expression(expression { env.DEPLOY == 'true' })、allOf/anyOf/not 组合条件。
- When 条件中加 beforeAgent true 以在条件失败时跳过 agent 分配。
- 错误处理:catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { sh '...' };warnError('msg') { sh '...' } 标记 UNSTABLE 但继续;unstable(message: 'Coverage low') 显式 UNSTABLE;error('Config missing') 失败且无堆栈。
- Post 段:always { junit '**/target/*.xml'; cleanWs() };success { archiveArtifacts artifacts: '**/*.jar', fingerprint: true };failure { slackSend color: 'danger', message: 'Build failed' };fixed { echo 'Build fixed!' };顺序:always → changed → fixed → regression → failure → success → unstable → cleanup。
- archiveArtifacts 总是用 fingerprint: true 以追踪构建和产物。
- Parallel fail-fast 全局推荐:在 options 中设置 parallelsAlwaysFailFast(),覆盖所有 parallel blocks。
- Parallel per-block:在单个 parallel stage 上设置 failFast true,仅影响该 parallel block。
- 当 options 已设 parallelsAlwaysFailFast() 时,单个 parallel block 的 failFast true 是冗余的。
- Matrix:stage('Matrix') 中设 failFast true;matrix { axes { axis { name 'PLATFORM'; values 'linux', 'windows' }; axis { name 'BROWSER'; values 'chrome', 'firefox' } }; excludes { exclude { axis { name 'PLATFORM'; values 'linux' }; axis { name 'BROWSER'; values 'safari' } } }; stages { stage('Test') { steps { echo "Testing ${PLATFORM}/${BROWSER}" } } } }。
- Input 手动审批:stage('Deploy') { input { message 'Deploy?'; ok 'Deploy'; submitter 'admin,ops' }; steps { sh './deploy.sh' } }。
- 将 input 放在 steps 外部,避免占用 agent。
- Scripted 基本结构:node('agent-label') { try { stage('Build') { sh 'make build' }; stage('Test') { sh 'make test' } } catch (Exception e) { currentBuild.result = 'FAILURE'; throw e } finally { deleteDir() } }。
- Scripted 并行:parallel('Unit': { node { sh 'npm test:unit' } }, 'E2E': { node { sh 'npm test:e2e' } })。
- Scripted 环境:withEnv(['VERSION=1.0.0']) { sh 'echo $VERSION' };withCredentials([string(credentialsId: 'key', variable: 'KEY')]) { sh 'curl -H "Auth: $KEY" ...' }。
- @NonCPS 用于非可序列化操作:@NonCPS def parseJson(String json) { new groovy.json.JsonSlurper().parseText(json) };规则:@NonCPS 内不要用 pipeline steps(sh、echo),用于 JsonSlurper、iterators、regex Matchers。
- Docker agent:agent { docker { image 'maven:3.9.11'; args '-v $HOME/.m2:/root/.m2'; reuseNode true } }。
- Build & push:def img = docker.build("myapp:${BUILD_NUMBER}");docker.withRegistry('https://registry.example.com', 'creds') { img.push(); img.push('latest') }。
- Kubernetes pod:agent { kubernetes { yaml '''...''' } },容器用 container('maven') { sh 'mvn package' }。
- Shared Libraries:@Library('my-shared-library') _ 或 library 'my-library@1.0.0';vars/log.groovy 中 def info(msg) { echo "INFO: ${msg}" };使用 log.info 'Starting build'。
- 验证流程:生成 Jenkinsfile;调用 devops-skills:jenkinsfile-validator skill;按严重级别处理:ERRORS 必须修复后再展示;WARNINGS 应修复;INFO/SUGGESTIONS 按用例考虑,parallel blocks 的 failFast true 默认应用,build triggers 询问用户,其他优化若能改进 pipeline 则应用。
- 修复后重新验证,只向用户展示已验证的 Jenkinsfile。
- 验证命令:bash ../jenkinsfile-validator/scripts/validate_jenkinsfile.sh Jenkinsfile;快速仅语法:bash ../jenkinsfile-validator/scripts/validate_jenkinsfile.sh --syntax-only Jenkinsfile。
- 生成脚本 vs 手工:简单标准 pipeline 使用脚本;复杂多特性(并行测试+安全扫描+Docker+K8s 部署)、自定义逻辑或非标准需求手工生成。
- generate_declarative.py:必填 --output;可选 --stages、--agent、--build-tool、--build-cmd、--test-cmd、--deploy-*、--notification-*、--archive-artifacts、--k8s-yaml;--k8s-yaml 接受内联 YAML 内容或现有 .yaml/.yml 文件路径;stage keys 按 [a-z0-9_-] 校验;shell 命令输出为转义 Groovy literals。
- generate_scripted.py:必填 --output;可选 stage/agent/SCM/notification 参数,取决于 pipeline 功能。
- generate_shared_library.py:必填 --name;可选 --package、--output;共享库部署 helper 包含显式 rollout target(deployment/<name>),通知 helper 发出有效 HTML email bodies。
- 生成脚本示例:python3 scripts/generate_declarative.py --output Jenkinsfile --stages build,test,deploy --agent docker;python3 scripts/generate_scripted.py --output Jenkinsfile --stages build,test --agent label:linux;python3 scripts/generate_shared_library.py --name my-library --package com.example。
- 完成前检查:明确且合理解释 pipeline 风格选择(Declarative vs Scripted)。
- 完成前检查:生成的 Jenkinsfile 通过可执行验证命令的 smoke validation。
- 完成前检查:并行 pipeline 默认 fail-fast,除非用户明确要求否则不改变。
- 完成前检查:自定义 stage 名称和 shell 命令安全输出,无未转义 Groovy literals。
- 完成前检查:--k8s-yaml 同时支持内联 YAML 和现有文件路径。
- 完成前检查:启用通知的 post block 在请求时仍归档 artifacts。
- 插件文档查询:对于 references/common_plugins.md 未覆盖的插件、版本特定文档、复杂插件配置或高级选项、用户明确要求最新文档时,始终查 Context7 或 WebSearch。
- 可跳过外部查询:使用 common_plugins.md 已记录的基本插件语法,或简单且文档充分的插件步骤(如基本 sh、checkout scm、junit)。
- common_plugins.md 覆盖插件:Git、Docker、Kubernetes、Credentials、JUnit、Slack、SonarQube、OWASP Dependency-Check、Email、AWS、Azure、HTTP Request、Microsoft Teams、Nexus、Artifactory、GitHub。
- 查询方法优先级:Context7 用 mcp__context7__resolve-library-id 和 /jenkinsci/<plugin-name>-plugin;WebSearch 用 Jenkins [plugin-name] plugin documentation 2025;官方 plugins.jenkins.io、jenkins.io/doc/pipeline/steps/。
- 参考:references/best_practices.md、references/common_plugins.md、assets/templates/、devops-skills:jenkinsfile-validator skill。
- 总是优先 Declarative,除非需要 Scripted 灵活性。
适用边界 · 注意事项
- 不适用于非 Jenkins 的 CI/CD 系统(如 GitHub Actions、GitLab CI)生成 pipeline。
- 不适用于无法使用 devops-skills:jenkinsfile-validator 进行语法/最佳实践校验的场景。
- 不适用于用户只需要一次性通用 Groovy 脚本或不需要 Jenkins 生态与 Jenkins 插件的任务。