[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DRXA2MW6CPSC2MP3GEM62E":3,"skill-same:01M6DRXA2MW6CPSC2MP3GEM62E":161},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M6DRXA2MW6CPSC2MP3GEM62E","jenkinsfile-generator",null,"Generate\u002Fcreate\u002Fscaffold Jenkinsfile — declarative, scripted, shared library, CI\u002FCD pipelines.","AntifragileTech\u002Fantifragile-claude-code","AntifragileTech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F174357194?v=4","01M6DQCYMK4CDSQQAN0ZC72NTV","01M6DQCYS9YPW1WKMQ5TJMPQ43",9,"MIT","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27,28,29,30,31,32,33,34],"jenkinsfile generator","scaffold","create","generate","library","ci","pipelines","shared","cd","2026-11-10 10:12:30",false,"---\nname: jenkinsfile-generator\ndescription: Generate\u002Fcreate\u002Fscaffold Jenkinsfile — declarative, scripted, shared library, CI\u002FCD pipelines.\n---\n\n# Jenkinsfile Generator Skill\n\nGenerate production-ready Jenkinsfiles following best practices. All generated files are validated using devops-skills:jenkinsfile-validator skill.\n\n## Trigger Phrases\n- \"Generate a CI pipeline for Maven\u002FGradle\u002Fnpm\"\n- \"Create a Jenkins deployment pipeline with approvals\"\n- \"Build a Jenkinsfile with parallel test stages\"\n- \"Create a scripted pipeline with dynamic stage logic\"\n- \"Scaffold a Jenkins shared library\"\n- \"Generate a Jenkinsfile for Docker or Kubernetes agents\"\n\n## When to Use\n- Creating new Jenkinsfiles (declarative or scripted)\n- CI\u002FCD pipelines, Docker\u002FKubernetes deployments\n- Parallel execution, matrix builds, parameterized pipelines\n- DevSecOps pipelines with security scanning\n- Shared library scaffolding\n\n## Declarative vs Scripted Decision Tree\n1. Choose **Declarative** by default when stage order and behavior are mostly static.\n2. Choose **Scripted** when runtime-generated stages, complex loops, or dynamic control flow are required.\n3. Choose **Shared Library scaffolding** when request is about reusable pipeline functions (`vars\u002F`, `src\u002F`, `resources\u002F`).\n4. If unsure, start Declarative and only switch to Scripted if requirements cannot be expressed cleanly.\n\n## Template Map\n| Template | Path | Use When |\n|---|---|---|\n| Declarative basic | `assets\u002Ftemplates\u002Fdeclarative\u002Fbasic.Jenkinsfile` | Standard CI\u002FCD with predictable stages |\n| Declarative parallel example | `examples\u002Fdeclarative-parallel.Jenkinsfile` | Parallel test\u002Fbuild branches with fail-fast behavior |\n| Declarative kubernetes example | `examples\u002Fdeclarative-kubernetes.Jenkinsfile` | Kubernetes agent execution using pod templates |\n| Scripted basic | `assets\u002Ftemplates\u002Fscripted\u002Fbasic.Jenkinsfile` | Complex conditional logic or generated stages |\n| Shared library scaffold | Generated by `scripts\u002Fgenerate_shared_library.py` | Reusable pipeline functions and organization-wide patterns |\n\n## Quick Reference\n\n```groovy\n\u002F\u002F Minimal Declarative Pipeline\npipeline {\n    agent any\n    stages {\n        stage('Build') { steps { sh 'make' } }\n        stage('Test') { steps { sh 'make test' } }\n    }\n}\n\n\u002F\u002F Error-tolerant stage\nstage('Flaky Tests') {\n    steps {\n        catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {\n            sh 'run-flaky-tests.sh'\n        }\n    }\n}\n\n\u002F\u002F Conditional deployment with approval\nstage('Deploy') {\n    when { branch 'main'; beforeAgent true }\n    input { message 'Deploy to production?' }\n    steps { sh '.\u002Fdeploy.sh' }\n}\n```\n\n| Option | Purpose |\n|--------|---------|\n| `timeout(time: 1, unit: 'HOURS')` | Prevent hung builds |\n| `buildDiscarder(logRotator(numToKeepStr: '10'))` | Manage disk space |\n| `disableConcurrentBuilds()` | Prevent race conditions |\n| `catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')` | Continue on error |\n\n## Core Capabilities\n\n### 1. Declarative Pipelines (RECOMMENDED)\n**Process:**\n1. **Read templates for structure reference:**\n   - Read `assets\u002Ftemplates\u002Fdeclarative\u002Fbasic.Jenkinsfile` to understand the standard structure\n   - Templates show the expected sections: pipeline → agent → environment → options → parameters → stages → post\n   - For complex requests, adapt the structure rather than copying verbatim\n2. **Consult reference documentation:**\n   - Read `references\u002Fbest_practices.md` for performance, security, and reliability patterns\n   - Read `references\u002Fcommon_plugins.md` for plugin-specific syntax\n3. **Generate with required elements:**\n   - Proper stages with descriptive names\n   - Environment block with credentials binding (never hardcode secrets)\n   - Options: timeout, buildDiscarder, timestamps, disableConcurrentBuilds\n   - Post conditions: always (cleanup), success (artifacts), failure (notifications)\n   - **Always add `failFast true` or `parallelsAlwaysFailFast()` for parallel blocks**\n   - **Always include `fingerprint: true` when using `archiveArtifacts`**\n4. **ALWAYS validate** using devops-skills:jenkinsfile-validator skill\n\n### 2. Scripted Pipelines\n**When:** Complex conditional logic, dynamic generation, full Groovy control\n**Process:**\n1. **Read templates for structure reference:**\n   - Read `assets\u002Ftemplates\u002Fscripted\u002Fbasic.Jenkinsfile` for node\u002Fstage patterns\n   - Understand try-catch-finally structure for error handling\n2. Implement try-catch-finally for error handling\n3. **ALWAYS validate** using devops-skills:jenkinsfile-validator skill\n\n### 3. Parallel\u002FMatrix Pipelines\nUse `parallel {}` block or `matrix {}` with `axes {}` for multi-dimensional builds.\n- Default behavior is fail-fast for generated parallel pipelines (`parallelsAlwaysFailFast()` or stage-level `failFast true`).\n\n### 4. Security Scanning (DevSecOps)\nAdd SonarQube, OWASP Dependency-Check, Trivy stages with fail thresholds.\n\n### 5. Shared Library Scaffolding\n```bash\npython3 scripts\u002Fgenerate_shared_library.py --name my-library --package org.example\n```\n\n## Declarative Syntax Reference\n\n### Agent Types\n```groovy\nagent any                                    \u002F\u002F Any available agent\nagent { label 'linux && docker' }           \u002F\u002F Label-based\nagent { docker { image 'maven:3.9.11-eclipse-temurin-21' } }\nagent { kubernetes { yaml '...' } }         \u002F\u002F K8s pod template\nagent { kubernetes { yamlFile 'pod.yaml' } } \u002F\u002F External YAML\n```\n\n### Environment & Credentials\n```groovy\nenvironment {\n    VERSION = '1.0.0'\n    AWS_KEY = credentials('aws-key-id')     \u002F\u002F Creates _USR and _PSW vars\n}\n```\n\n### Options\n```groovy\noptions {\n    buildDiscarder(logRotator(numToKeepStr: '10'))\n    timeout(time: 1, unit: 'HOURS')\n    disableConcurrentBuilds()\n    timestamps()\n    parallelsAlwaysFailFast()\n    durabilityHint('PERFORMANCE_OPTIMIZED')  \u002F\u002F 2-6x faster for simple pipelines\n}\n```\n\n### Parameters\n```groovy\nparameters {\n    string(name: 'VERSION', defaultValue: '1.0.0')\n    choice(name: 'ENV', choices: ['dev', 'staging', 'prod'])\n    booleanParam(name: 'SKIP_TESTS', defaultValue: false)\n}\n```\n\n### When Conditions\n| Condition | Example |\n|-----------|---------|\n| `branch` | `branch 'main'` or `branch pattern: 'release\u002F*', comparator: 'GLOB'` |\n| `tag` | `tag pattern: 'v*', comparator: 'GLOB'` |\n| `changeRequest` | `changeRequest target: 'main'` |\n| `changeset` | `changeset 'src\u002F**\u002F*.java'` |\n| `expression` | `expression { env.DEPLOY == 'true' }` |\n| `allOf\u002FanyOf\u002Fnot` | Combine conditions |\n\nAdd `beforeAgent true` to skip agent allocation if condition fails.\n\n### Error Handling\n```groovy\ncatchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { sh '...' }\nwarnError('msg') { sh '...' }      \u002F\u002F Mark UNSTABLE but continue\nunstable(message: 'Coverage low')   \u002F\u002F Explicit UNSTABLE\nerror('Config missing')             \u002F\u002F Fail without stack trace\n```\n\n### Post Section\n```groovy\npost {\n    always { junit '**\u002Ftarget\u002F*.xml'; cleanWs() }\n    success { archiveArtifacts artifacts: '**\u002F*.jar', fingerprint: true }\n    failure { slackSend color: 'danger', message: 'Build failed' }\n    fixed { echo 'Build fixed!' }\n}\n```\n**Order:** always → changed → fixed → regression → failure → success → unstable → cleanup\n\n**NOTE:** Always use `fingerprint: true` with `archiveArtifacts` for build traceability and artifact tracking.\n\n### Parallel & Matrix\n\n**IMPORTANT:** Always ensure parallel blocks fail fast on first failure using one of these approaches:\n\n**Option 1: Global (RECOMMENDED)** - Use `parallelsAlwaysFailFast()` in pipeline options:\n```groovy\noptions {\n    parallelsAlwaysFailFast()  \u002F\u002F Applies to ALL parallel blocks in pipeline\n}\n```\nThis is the preferred approach as it covers all parallel blocks automatically.\n\n**Option 2: Per-block** - Use `failFast true` on individual parallel stages:\n```groovy\nstage('Tests') {\n    failFast true  \u002F\u002F Only affects this parallel block\n    parallel {\n        stage('Unit') { steps { sh 'npm test:unit' } }\n        stage('E2E') { steps { sh 'npm test:e2e' } }\n    }\n}\n```\n\n**NOTE:** When `parallelsAlwaysFailFast()` is set in options, explicit `failFast true` on individual parallel blocks is redundant.\n\n```groovy\nstage('Matrix') {\n    failFast true\n    matrix {\n        axes {\n            axis { name 'PLATFORM'; values 'linux', 'windows' }\n            axis { name 'BROWSER'; values 'chrome', 'firefox' }\n        }\n        excludes { exclude { axis { name 'PLATFORM'; values 'linux' }; axis { name 'BROWSER'; values 'safari' } } }\n        stages { stage('Test') { steps { echo \"Testing ${PLATFORM}\u002F${BROWSER}\" } } }\n    }\n}\n```\n\n### Input (Manual Approval)\n```groovy\nstage('Deploy') {\n    input { message 'Deploy?'; ok 'Deploy'; submitter 'admin,ops' }\n    steps { sh '.\u002Fdeploy.sh' }\n}\n```\n**IMPORTANT:** Place `input` outside steps to avoid holding agents.\n\n## Scripted Syntax Reference\n\n```groovy\nnode('agent-label') {\n    try {\n        stage('Build') { sh 'make build' }\n        stage('Test') { sh 'make test' }\n    } catch (Exception e) {\n        currentBuild.result = 'FAILURE'\n        throw e\n    } finally {\n        deleteDir()\n    }\n}\n\n\u002F\u002F Parallel\nparallel(\n    'Unit': { node { sh 'npm test:unit' } },\n    'E2E': { node { sh 'npm test:e2e' } }\n)\n\n\u002F\u002F Environment\nwithEnv(['VERSION=1.0.0']) { sh 'echo $VERSION' }\nwithCredentials([string(credentialsId: 'key', variable: 'KEY')]) { sh 'curl -H \"Auth: $KEY\" ...' }\n```\n\n### @NonCPS for Non-Serializable Operations\n```groovy\n@NonCPS\ndef parseJson(String json) {\n    new groovy.json.JsonSlurper().parseText(json)\n}\n```\n**Rules:** No pipeline steps (`sh`, `echo`) inside @NonCPS. Use for JsonSlurper, iterators, regex Matchers.\n\n## Docker & Kubernetes\n\n### Docker Agent\n```groovy\nagent { docker { image 'maven:3.9.11'; args '-v $HOME\u002F.m2:\u002Froot\u002F.m2'; reuseNode true } }\n```\n\n### Build & Push\n```groovy\ndef img = docker.build(\"myapp:${BUILD_NUMBER}\")\ndocker.withRegistry('https:\u002F\u002Fregistry.example.com', 'creds') { img.push(); img.push('latest') }\n```\n\n### Kubernetes Pod\n```groovy\nagent {\n    kubernetes {\n        yaml '''\napiVersion: v1\nkind: Pod\nspec:\n  containers:\n  - name: maven\n    image: maven:3.9.11-eclipse-temurin-21\n    command: [sleep, 99d]\n'''\n    }\n}\n\u002F\u002F Use: container('maven') { sh 'mvn package' }\n```\n\n## Shared Libraries\n\n```groovy\n@Library('my-shared-library') _\n\u002F\u002F or dynamically: library 'my-library@1.0.0'\n\n\u002F\u002F vars\u002Flog.groovy\ndef info(msg) { echo \"INFO: ${msg}\" }\n\n\u002F\u002F Usage\nlog.info 'Starting build'\n```\n\n## Validation Workflow\n\n**CRITICAL: ALWAYS validate using devops-skills:jenkinsfile-validator skill:**\n\n1. Generate Jenkinsfile\n2. Invoke `devops-skills:jenkinsfile-validator` skill\n3. **Handle validation results by severity:**\n   - **ERRORS:** MUST fix before presenting to user - these break the pipeline\n   - **WARNINGS:** SHOULD fix - these indicate potential issues\n   - **INFO\u002FSUGGESTIONS:** Consider applying based on use case:\n     - `failFast true` for parallel blocks → apply by default\n     - Build triggers → ask user if they want automated builds\n     - Other optimizations → apply if they improve the pipeline\n4. Re-validate after fixes\n5. Only present validated Jenkinsfiles to user\n\n**Validation commands:**\n```bash\n# Full validation (syntax + security + best practices)\nbash ..\u002Fjenkinsfile-validator\u002Fscripts\u002Fvalidate_jenkinsfile.sh Jenkinsfile\n\n# Syntax only (fastest)\nbash ..\u002Fjenkinsfile-validator\u002Fscripts\u002Fvalidate_jenkinsfile.sh --syntax-only Jenkinsfile\n```\n\n## Generator Scripts\n\n**When to use scripts vs manual generation:**\n- **Use scripts for:** Simple, standard pipelines with common patterns (basic CI, straightforward CD)\n- **Use manual generation for:** Complex pipelines with multiple features (parallel tests + security scanning + Docker + K8s deployments), custom logic, or non-standard requirements\n\n### Script Arguments: Required vs Optional\n- `generate_declarative.py`\n- Required: `--output`\n- Optional: `--stages`, `--agent`, `--build-tool`, `--build-cmd`, `--test-cmd`, `--deploy-*`, `--notification-*`, `--archive-artifacts`, `--k8s-yaml`\n- Notes:\n- `--k8s-yaml` accepts either inline YAML content or a path to an existing `.yaml`\u002F`.yml` file.\n- Stage keys are validated (`[a-z0-9_-]`) and shell commands are emitted as escaped Groovy literals.\n- `generate_scripted.py`\n- Required: `--output`\n- Optional: stage\u002Fagent\u002FSCM\u002Fnotification parameters depending on requested pipeline features.\n- `generate_shared_library.py`\n- Required: `--name`\n- Optional: `--package`, `--output`\n- Shared library deployment helper now includes explicit rollout target (`deployment\u002F\u003Cname>`) and notification helper emits valid HTML email bodies.\n\n```bash\n# Declarative (simple pipelines)\npython3 scripts\u002Fgenerate_declarative.py --output Jenkinsfile --stages build,test,deploy --agent docker\n\n# Scripted (simple pipelines)\npython3 scripts\u002Fgenerate_scripted.py --output Jenkinsfile --stages build,test --agent label:linux\n\n# Shared Library (always use script for scaffolding)\npython3 scripts\u002Fgenerate_shared_library.py --name my-library --package com.example\n```\n\n## Done Criteria\n- Pipeline style selection (Declarative vs Scripted) is explicit and justified.\n- Generated Jenkinsfiles pass smoke validation with executable validator commands.\n- Parallel pipelines are fail-fast by default unless user explicitly requests otherwise.\n- Custom stage names and shell commands are safely emitted (no unescaped Groovy literals).\n- `--k8s-yaml` works with both inline YAML and existing file paths.\n- Notification-enabled post blocks still archive artifacts when requested.\n\n## Plugin Documentation Lookup\n\n**Always consult Context7 or WebSearch for:**\n- Plugins NOT covered in `references\u002Fcommon_plugins.md`\n- Version-specific documentation requests\n- Complex plugin configurations or advanced options\n- When user explicitly asks for latest documentation\n\n**May skip external lookup when:**\n- Using basic plugin syntax already documented in `references\u002Fcommon_plugins.md`\n- Simple, well-documented plugin steps (e.g., basic `sh`, `checkout scm`, `junit`)\n\n**Plugins covered in common_plugins.md:** Git, Docker, Kubernetes, Credentials, JUnit, Slack, SonarQube, OWASP Dependency-Check, Email, AWS, Azure, HTTP Request, Microsoft Teams, Nexus, Artifactory, GitHub\n\n**Lookup methods (in order of preference):**\n1. **Context7:** `mcp__context7__resolve-library-id` with `\u002Fjenkinsci\u002F\u003Cplugin-name>-plugin`\n2. **WebSearch:** `Jenkins [plugin-name] plugin documentation 2025`\n3. **Official:** plugins.jenkins.io, jenkins.io\u002Fdoc\u002Fpipeline\u002Fsteps\u002F\n\n## References\n\n- `references\u002Fbest_practices.md` - Performance, security, reliability patterns\n- `references\u002Fcommon_plugins.md` - Git, Docker, K8s, credentials, notifications\n- `assets\u002Ftemplates\u002F` - Declarative and scripted templates\n- `devops-skills:jenkinsfile-validator` skill - Syntax and best practices validation\n\n**Always prefer Declarative unless scripted flexibility is required.**\n","# Jenkinsfile Generator Skill\n\nGenerate production-ready Jenkinsfiles following best practices. All generated files are validated using devops-skills:jenkinsfile-validator skill.\n\n## Trigger Phrases\n- \"Generate a CI pipeline for Maven\u002FGradle\u002Fnpm\"\n- \"Create a Jenkins deployment pipeline with approvals\"\n- \"Build a Jenkinsfile with parallel test stages\"\n- \"Create a scripted pipeline with dynamic stage logic\"\n- \"Scaffold a Jenkins shared library\"\n- \"Generate a Jenkinsfile for Docker or Kubernetes agents\"\n\n## When to Use\n- Creating new Jenkinsfiles (declarative or scripted)\n- CI\u002FCD pipelines, Docker\u002FKubernetes deployments\n- Parallel execution, matrix builds, parameterized pipelines\n- DevSecOps pipelines with security scanning\n- Shared library scaffolding\n\n## Declarative vs Scripted Decision Tree\n1. Choose **Declarative** by default when stage order and behavior are mostly static.\n2. Choose **Scripted** when runtime-generated stages, complex loops, or dynamic control flow are required.\n3. Choose **Shared Library scaffolding** when request is about reusable pipeline functions (`vars\u002F`, `src\u002F`, `resources\u002F`).\n4. If unsure, start Declarative and only switch to Scripted if requirements cannot be expressed cleanly.\n\n## Template Map\n| Template | Path | Use When |\n|---|---|---|\n| Declarative basic | `assets\u002Ftemplates\u002Fdeclarative\u002Fbasic.Jenkinsfile` | Standard CI\u002FCD with predictable stages |\n| Declarative parallel example | `examples\u002Fdeclarative-parallel.Jenkinsfile` | Parallel test\u002Fbuild branches with fail-fast behavior |\n| Declarative kubernetes example | `examples\u002Fdeclarative-kubernetes.Jenkinsfile` | Kubernetes agent execution using pod templates |\n| Scripted basic | `assets\u002Ftemplates\u002Fscripted\u002Fbasic.Jenkinsfile` | Complex conditional logic or generated stages |\n| Shared library scaffold | Generated by `scripts\u002Fgenerate_shared_library.py` | Reusable pipeline functions and organization-wide patterns |\n\n## Quick Reference\n\n```groovy\n\u002F\u002F Minimal Declarative Pipeline\npipeline {\n    agent any\n    stages {\n        stage('Build') { steps { sh 'make' } }\n        stage('Test') { steps { sh 'make test' } }\n    }\n}\n\n\u002F\u002F Error-tolerant stage\nstage('Flaky Tests') {\n    steps {\n        catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {\n            sh 'run-flaky-tests.sh'\n        }\n    }\n}\n\n\u002F\u002F Conditional deployment with approval\nstage('Deploy') {\n    when { branch 'main'; beforeAgent true }\n    input { message 'Deploy to production?' }\n    steps { sh '.\u002Fdeploy.sh' }\n}\n```\n\n| Option | Purpose |\n|--------|---------|\n| `timeout(time: 1, unit: 'HOURS')` | Prevent hung builds |\n| `buildDiscarder(logRotator(numToKeepStr: '10'))` | Manage disk space |\n| `disableConcurrentBuilds()` | Prevent race conditions |\n| `catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')` | Continue on error |\n\n## Core Capabilities\n\n### 1. Declarative Pipelines (RECOMMENDED)\n**Process:**\n1. **Read templates for structure reference:**\n   - Read `assets\u002Ftemplates\u002Fdeclarative\u002Fbasic.Jenkinsfile` to understand the standard structure\n   - Templates show the expected sections: pipeline → agent → environment → options → parameters → stages → post\n   - For complex requests, adapt the structure rather than copying verbatim\n2. **Consult reference documentation:**\n   - Read `references\u002Fbest_practices.md` for performance, security, and reliability patterns\n   - Read `references\u002Fcommon_plugins.md` for plugin-specific syntax\n3. **Generate with required elements:**\n   - Proper stages with descriptive names\n   - Environment block with credentials binding (never hardcode secrets)\n   - Options: timeout, buildDiscarder, timestamps, disableConcurrentBuilds\n   - Post conditions: always (cleanup), success (artifacts), failure (notifications)\n   - **Always add `failFast true` or `parallelsAlwaysFailFast()` for parallel blocks**\n   - **Always include `fingerprint: true` when using `archiveArtifacts`**\n4. **ALWAYS validate** using devops-skills:jenkinsfile-validator skill\n\n### 2. Scripted Pipelines\n**When:** Complex conditional logic, dynamic generation, full Groovy control\n**Process:**\n1. **Read templates for structure reference:**\n   - Read `assets\u002Ftemplates\u002Fscripted\u002Fbasic.Jenkinsfile` for node\u002Fstage patterns\n   - Understand try-catch-finally structure for error handling\n2. Implement try-catch-finally for error handling\n3. **ALWAYS validate** using devops-skills:jenkinsfile-validator skill\n\n### 3. Parallel\u002FMatrix Pipelines\nUse `parallel {}` block or `matrix {}` with `axes {}` for multi-dimensional builds.\n- Default behavior is fail-fast for generated parallel pipelines (`parallelsAlwaysFailFast()` or stage-level `failFast true`).\n\n### 4. Security Scanning (DevSecOps)\nAdd SonarQube, OWASP Dependency-Check, Trivy stages with fail thresholds.\n\n### 5. Shared Library Scaffolding\n```bash\npython3 scripts\u002Fgenerate_shared_library.py --name my-library --package org.example\n```\n\n## Declarative Syntax Reference\n\n### Agent Types\n```groovy\nagent any                                    \u002F\u002F Any available agent\nagent { label 'linux && docker' }           \u002F\u002F Label-based\nagent { docker { image 'maven:3.9.11-eclipse-temurin-21' } }\nagent { kubernetes { yaml '...' } }         \u002F\u002F K8s pod template\nagent { kubernetes { yamlFile 'pod.yaml' } } \u002F\u002F External YAML\n```\n\n### Environment & Credentials\n```groovy\nenvironment {\n    VERSION = '1.0.0'\n    AWS_KEY = credentials('aws-key-id')     \u002F\u002F Creates _USR and _PSW vars\n}\n```\n\n### Options\n```groovy\noptions {\n    buildDiscarder(logRotator(numToKeepStr: '10'))\n    timeout(time: 1, unit: 'HOURS')\n    disableConcurrentBuilds()\n    timestamps()\n    parallelsAlwaysFailFast()\n    durabilityHint('PERFORMANCE_OPTIMIZED')  \u002F\u002F 2-6x faster for simple pipelines\n}\n```\n\n### Parameters\n```groovy\nparameters {\n    string(name: 'VERSION', defaultValue: '1.0.0')\n    choice(name: 'ENV', choices: ['dev', 'staging', 'prod'])\n    booleanParam(name: 'SKIP_TESTS', defaultValue: false)\n}\n```\n\n### When Conditions\n| Condition | Example |\n|-----------|---------|\n| `branch` | `branch 'main'` or `branch pattern: 'release\u002F*', comparator: 'GLOB'` |\n| `tag` | `tag pattern: 'v*', comparator: 'GLOB'` |\n| `changeRequest` | `changeRequest target: 'main'` |\n| `changeset` | `changeset 'src\u002F**\u002F*.java'` |\n| `expression` | `expression { env.DEPLOY == 'true' }` |\n| `allOf\u002FanyOf\u002Fnot` | Combine conditions |\n\nAdd `beforeAgent true` to skip agent allocation if condition fails.\n\n### Error Handling\n```groovy\ncatchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { sh '...' }\nwarnError('msg') { sh '...' }      \u002F\u002F Mark UNSTABLE but continue\nunstable(message: 'Coverage low')   \u002F\u002F Explicit UNSTABLE\nerror('Config missing')             \u002F\u002F Fail without stack trace\n```\n\n### Post Section\n```groovy\npost {\n    always { junit '**\u002Ftarget\u002F*.xml'; cleanWs() }\n    success { archiveArtifacts artifacts: '**\u002F*.jar', fingerprint: true }\n    failure { slackSend color: 'danger', message: 'Build failed' }\n    fixed { echo 'Build fixed!' }\n}\n```\n**Order:** always → changed → fixed → regression → failure → success → unstable → cleanup\n\n**NOTE:** Always use `fingerprint: true` with `archiveArtifacts` for build traceability and artifact tracking.\n\n### Parallel & Matrix\n\n**IMPORTANT:** Always ensure parallel blocks fail fast on first failure using one of these approaches:\n\n**Option 1: Global (RECOMMENDED)** - Use `parallelsAlwaysFailFast()` in pipeline options:\n```groovy\noptions {\n    parallelsAlwaysFailFast()  \u002F\u002F Applies to ALL parallel blocks in pipeline\n}\n```\nThis is the preferred approach as it covers all parallel blocks automatically.\n\n**Option 2: Per-block** - Use `failFast true` on individual parallel stages:\n```groovy\nstage('Tests') {\n    failFast true  \u002F\u002F Only affects this parallel block\n    parallel {\n        stage('Unit') { steps { sh 'npm test:unit' } }\n        stage('E2E') { steps { sh 'npm test:e2e' } }\n    }\n}\n```\n\n**NOTE:** When `parallelsAlwaysFailFast()` is set in options, explicit `failFast true` on individual parallel blocks is redundant.\n\n```groovy\nstage('Matrix') {\n    failFast true\n    matrix {\n        axes {\n            axis { name 'PLATFORM'; values 'linux', 'windows' }\n            axis { name 'BROWSER'; values 'chrome', 'firefox' }\n        }\n        excludes { exclude { axis { name 'PLATFORM'; values 'linux' }; axis { name 'BROWSER'; values 'safari' } } }\n        stages { stage('Test') { steps { echo \"Testing ${PLATFORM}\u002F${BROWSER}\" } } }\n    }\n}\n```\n\n### Input (Manual Approval)\n```groovy\nstage('Deploy') {\n    input { message 'Deploy?'; ok 'Deploy'; submitter 'admin,ops' }\n    steps { sh '.\u002Fdeploy.sh' }\n}\n```\n**IMPORTANT:** Place `input` outside steps to avoid holding agents.\n\n## Scripted Syntax Reference\n\n```groovy\nnode('agent-label') {\n    try {\n        stage('Build') { sh 'make build' }\n        stage('Test') { sh 'make test' }\n    } catch (Exception e) {\n        currentBuild.result = 'FAILURE'\n        throw e\n    } finally {\n        deleteDir()\n    }\n}\n\n\u002F\u002F Parallel\nparallel(\n    'Unit': { node { sh 'npm test:unit' } },\n    'E2E': { node { sh 'npm test:e2e' } }\n)\n\n\u002F\u002F Environment\nwithEnv(['VERSION=1.0.0']) { sh 'echo $VERSION' }\nwithCredentials([string(credentialsId: 'key', variable: 'KEY')]) { sh 'curl -H \"Auth: $KEY\" ...' }\n```\n\n### @NonCPS for Non-Serializable Operations\n```groovy\n@NonCPS\ndef parseJson(String json) {\n    new groovy.json.JsonSlurper().parseText(json)\n}\n```\n**Rules:** No pipeline steps (`sh`, `echo`) inside @NonCPS. Use for JsonSlurper, iterators, regex Matchers.\n\n## Docker & Kubernetes\n\n### Docker Agent\n```groovy\nagent { docker { image 'maven:3.9.11'; args '-v $HOME\u002F.m2:\u002Froot\u002F.m2'; reuseNode true } }\n```\n\n### Build & Push\n```groovy\ndef img = docker.build(\"myapp:${BUILD_NUMBER}\")\ndocker.withRegistry('https:\u002F\u002Fregistry.example.com', 'creds') { img.push(); img.push('latest') }\n```\n\n### Kubernetes Pod\n```groovy\nagent {\n    kubernetes {\n        yaml '''\napiVersion: v1\nkind: Pod\nspec:\n  containers:\n  - name: maven\n    image: maven:3.9.11-eclipse-temurin-21\n    command: [sleep, 99d]\n'''\n    }\n}\n\u002F\u002F Use: container('maven') { sh 'mvn package' }\n```\n\n## Shared Libraries\n\n```groovy\n@Library('my-shared-library') _\n\u002F\u002F or dynamically: library 'my-library@1.0.0'\n\n\u002F\u002F vars\u002Flog.groovy\ndef info(msg) { echo \"INFO: ${msg}\" }\n\n\u002F\u002F Usage\nlog.info 'Starting build'\n```\n\n## Validation Workflow\n\n**CRITICAL: ALWAYS validate using devops-skills:jenkinsfile-validator skill:**\n\n1. Generate Jenkinsfile\n2. Invoke `devops-skills:jenkinsfile-validator` skill\n3. **Handle validation results by severity:**\n   - **ERRORS:** MUST fix before presenting to user - these break the pipeline\n   - **WARNINGS:** SHOULD fix - these indicate potential issues\n   - **INFO\u002FSUGGESTIONS:** Consider applying based on use case:\n     - `failFast true` for parallel blocks → apply by default\n     - Build triggers → ask user if they want automated builds\n     - Other optimizations → apply if they improve the pipeline\n4. Re-validate after fixes\n5. Only present validated Jenkinsfiles to user\n\n**Validation commands:**\n```bash\n# Full validation (syntax + security + best practices)\nbash ..\u002Fjenkinsfile-validator\u002Fscripts\u002Fvalidate_jenkinsfile.sh Jenkinsfile\n\n# Syntax only (fastest)\nbash ..\u002Fjenkinsfile-validator\u002Fscripts\u002Fvalidate_jenkinsfile.sh --syntax-only Jenkinsfile\n```\n\n## Generator Scripts\n\n**When to use scripts vs manual generation:**\n- **Use scripts for:** Simple, standard pipelines with common patterns (basic CI, straightforward CD)\n- **Use manual generation for:** Complex pipelines with multiple features (parallel tests + security scanning + Docker + K8s deployments), custom logic, or non-standard requirements\n\n### Script Arguments: Required vs Optional\n- `generate_declarative.py`\n- Required: `--output`\n- Optional: `--stages`, `--agent`, `--build-tool`, `--build-cmd`, `--test-cmd`, `--deploy-*`, `--notification-*`, `--archive-artifacts`, `--k8s-yaml`\n- Notes:\n- `--k8s-yaml` accepts either inline YAML content or a path to an existing `.yaml`\u002F`.yml` file.\n- Stage keys are validated (`[a-z0-9_-]`) and shell commands are emitted as escaped Groovy literals.\n- `generate_scripted.py`\n- Required: `--output`\n- Optional: stage\u002Fagent\u002FSCM\u002Fnotification parameters depending on requested pipeline features.\n- `generate_shared_library.py`\n- Required: `--name`\n- Optional: `--package`, `--output`\n- Shared library deployment helper now includes explicit rollout target (`deployment\u002F\u003Cname>`) and notification helper emits valid HTML email bodies.\n\n```bash\n# Declarative (simple pipelines)\npython3 scripts\u002Fgenerate_declarative.py --output Jenkinsfile --stages build,test,deploy --agent docker\n\n# Scripted (simple pipelines)\npython3 scripts\u002Fgenerate_scripted.py --output Jenkinsfile --stages build,test --agent label:linux\n\n# Shared Library (always use script for scaffolding)\npython3 scripts\u002Fgenerate_shared_library.py --name my-library --package com.example\n```\n\n## Done Criteria\n- Pipeline style selection (Declarative vs Scripted) is explicit and justified.\n- Generated Jenkinsfiles pass smoke validation with executable validator commands.\n- Parallel pipelines are fail-fast by default unless user explicitly requests otherwise.\n- Custom stage names and shell commands are safely emitted (no unescaped Groovy literals).\n- `--k8s-yaml` works with both inline YAML and existing file paths.\n- Notification-enabled post blocks still archive artifacts when requested.\n\n## Plugin Documentation Lookup\n\n**Always consult Context7 or WebSearch for:**\n- Plugins NOT covered in `references\u002Fcommon_plugins.md`\n- Version-specific documentation requests\n- Complex plugin configurations or advanced options\n- When user explicitly asks for latest documentation\n\n**May skip external lookup when:**\n- Using basic plugin syntax already documented in `references\u002Fcommon_plugins.md`\n- Simple, well-documented plugin steps (e.g., basic `sh`, `checkout scm`, `junit`)\n\n**Plugins covered in common_plugins.md:** Git, Docker, Kubernetes, Credentials, JUnit, Slack, SonarQube, OWASP Dependency-Check, Email, AWS, Azure, HTTP Request, Microsoft Teams, Nexus, Artifactory, GitHub\n\n**Lookup methods (in order of preference):**\n1. **Context7:** `mcp__context7__resolve-library-id` with `\u002Fjenkinsci\u002F\u003Cplugin-name>-plugin`\n2. **WebSearch:** `Jenkins [plugin-name] plugin documentation 2025`\n3. **Official:** plugins.jenkins.io, jenkins.io\u002Fdoc\u002Fpipeline\u002Fsteps\u002F\n\n## References\n\n- `references\u002Fbest_practices.md` - Performance, security, reliability patterns\n- `references\u002Fcommon_plugins.md` - Git, Docker, K8s, credentials, notifications\n- `assets\u002Ftemplates\u002F` - Declarative and scripted templates\n- `devops-skills:jenkinsfile-validator` skill - Syntax and best practices validation\n\n**Always prefer Declarative unless scripted flexibility is required.**\n",{"name":5,"description":7},"master","c73386b305dec167db7654e0e6feacb462d4f9dc","assets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator",1,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code","https:\u002F\u002Fgithub.com\u002FAntifragileTech","2026-10-02 14:22:14",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add AntifragileTech\u002Fantifragile-claude-code --skill jenkinsfile-generator",{"tool":53,"command":54},"bunx","bunx skills add AntifragileTech\u002Fantifragile-claude-code --skill jenkinsfile-generator",{"tool":56,"command":57},"pnpm","pnpm dlx skills add AntifragileTech\u002Fantifragile-claude-code --skill jenkinsfile-generator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002FSKILL.md",true,[61,67,73,77,81,85,89,93,97,101,105,109,113,117,123,127,133,137,141,145,149,153,157],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},".gitignore","OTHER","其他",330,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002F.gitignore",{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"assets\u002Ftemplates\u002Fdeclarative\u002Fbasic.Jenkinsfile","ASSET","资产文件",4256,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fassets\u002Ftemplates\u002Fdeclarative\u002Fbasic.Jenkinsfile",{"path":74,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":75,"sourceHtmlUrl":76},"assets\u002Ftemplates\u002Fscripted\u002Fbasic.Jenkinsfile",3903,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fassets\u002Ftemplates\u002Fscripted\u002Fbasic.Jenkinsfile",{"path":78,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":79,"sourceHtmlUrl":80},"examples\u002Fdeclarative-ci-basic.Jenkinsfile",1102,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-ci-basic.Jenkinsfile",{"path":82,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":83,"sourceHtmlUrl":84},"examples\u002Fdeclarative-docker.Jenkinsfile",1873,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-docker.Jenkinsfile",{"path":86,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":87,"sourceHtmlUrl":88},"examples\u002Fdeclarative-kubernetes.Jenkinsfile",2536,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-kubernetes.Jenkinsfile",{"path":90,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":91,"sourceHtmlUrl":92},"examples\u002Fdeclarative-matrix.Jenkinsfile",6103,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-matrix.Jenkinsfile",{"path":94,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":95,"sourceHtmlUrl":96},"examples\u002Fdeclarative-parallel.Jenkinsfile",4200,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-parallel.Jenkinsfile",{"path":98,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":99,"sourceHtmlUrl":100},"examples\u002Fdeclarative-security-scan.Jenkinsfile",8137,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-security-scan.Jenkinsfile",{"path":102,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":103,"sourceHtmlUrl":104},"examples\u002Fdeclarative-shared-library.Jenkinsfile",6093,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fdeclarative-shared-library.Jenkinsfile",{"path":106,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":107,"sourceHtmlUrl":108},"examples\u002Fscripted-basic.Jenkinsfile",770,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fscripted-basic.Jenkinsfile",{"path":110,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":111,"sourceHtmlUrl":112},"examples\u002Fscripted-conditional.Jenkinsfile",1535,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fscripted-conditional.Jenkinsfile",{"path":114,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":115,"sourceHtmlUrl":116},"examples\u002Fscripted-docker.Jenkinsfile",1568,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fexamples\u002Fscripted-docker.Jenkinsfile",{"path":118,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":121,"sourceHtmlUrl":122},"references\u002Fbest_practices.md","REFERENCE","参考文档",14489,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Freferences\u002Fbest_practices.md",{"path":124,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":125,"sourceHtmlUrl":126},"references\u002Fcommon_plugins.md",16652,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Freferences\u002Fcommon_plugins.md",{"path":128,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":131,"sourceHtmlUrl":132},"scripts\u002Fgenerate_declarative.py","SCRIPT","脚本",19599,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Fgenerate_declarative.py",{"path":134,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":135,"sourceHtmlUrl":136},"scripts\u002Fgenerate_scripted.py",15073,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Fgenerate_scripted.py",{"path":138,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":139,"sourceHtmlUrl":140},"scripts\u002Fgenerate_shared_library.py",24740,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Fgenerate_shared_library.py",{"path":142,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":143,"sourceHtmlUrl":144},"scripts\u002Flib\u002F__init__.py",585,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Flib\u002F__init__.py",{"path":146,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":147,"sourceHtmlUrl":148},"scripts\u002Flib\u002Fcommon_patterns.py",16161,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Flib\u002Fcommon_patterns.py",{"path":150,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":151,"sourceHtmlUrl":152},"scripts\u002Flib\u002Fsyntax_helpers.py",18336,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Flib\u002Fsyntax_helpers.py",{"path":154,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":155,"sourceHtmlUrl":156},"scripts\u002Ftest_generate_declarative.py",3816,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Ftest_generate_declarative.py",{"path":158,"resourceType":129,"resourceTypeDesc":130,"sizeBytes":159,"sourceHtmlUrl":160},"scripts\u002Ftest_generate_shared_library.py",2325,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fjenkinsfile-generator\u002Fscripts\u002Ftest_generate_shared_library.py",[162,186,201,216,229,242],{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":179,"publishedAt":35},"01M6DT9Q6VYA615SCXR757TZZ7","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-skills\u002FSKILL.md",[168,171,174],{"categoryNo":169,"categoryName":170,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":172,"categoryName":173,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":175,"categoryName":176,"taxonomyType":177,"taxonomyTypeDesc":178},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[180,181,182,183,184,185],"writing skills","writing","use","editing","work","deployment",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":194,"publishedAt":35},"01M6DT9GFHDNY90P41WGAE1TV0","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-plans\u002FSKILL.md",[192,193],{"categoryNo":172,"categoryName":173,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":175,"categoryName":176,"taxonomyType":177,"taxonomyTypeDesc":178},[195,196,181,197,198,182,199,200],"plans","writing plans","requirements","task","code","spec",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":209,"publishedAt":35},"01M6DT9C6PFGD86WS3HY7YE3XG","docs:write-concisely","Apply writing rules to any documentation that humans will read. Makes your writing clearer, stronger, and more professional.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwrite-concisely\u002FSKILL.md",[207,208],{"categoryNo":172,"categoryName":173,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":175,"categoryName":176,"taxonomyType":177,"taxonomyTypeDesc":178},[210,211,212,213,214,215,181],"docs:write concisely","write","docs","read","Rules","documentation",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":222,"publishedAt":35},"01M6DT98AWQ27P0N1CG97WAG66","kaizen:why","Iterative Five Whys root cause analysis drilling from symptoms to fundamentals","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwhy\u002FSKILL.md",[],[218,223,224,225,226,227,228],"why","kaizen","issue","five whys","analysis","root cause analysis",{"skillNo":230,"name":231,"nameZh":6,"description":232,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":233,"categories":234,"keywords":235,"publishedAt":35},"01M6DT93EH25NAX19R3WGE1P53","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-loop\u002FSKILL.md",[],[236,237,238,239,199,240,241],"verification loop","verification","loop","sessions","claude code sessions","system",{"skillNo":243,"name":244,"nameZh":6,"description":245,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":246,"categories":247,"keywords":248,"publishedAt":35},"01M6DT90GW7Z7VCN98P9DVYSNC","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-before-completion\u002FSKILL.md",[],[249,237,250,184,182,251,252,253],"verification before completion","commands","evidence","claim","complete"]