tmp/audit/) containing logs (tmp/audit/log) and the primary audit.log. Use these artifacts to verify what was inspected, which pipeline elements were auto-converted, and which require manual attention or custom transformers.
Quick CSV summary (excerpt)
Below is an excerpt of the CSV summary the tool generates (the full file is larger — ~100 lines):What audit.log records
- The audit log tracks the Importer tool’s operations while it inspects Jenkins jobs and evaluates possible conversions to GitHub Actions. It is an audit — not an automatic, guaranteed migration.
- The Importer:
- Fetches Jenkins job listings and individual
config.xmlfiles via the Jenkins API. - Retrieves Jenkinsfiles from SCM (e.g., GitHub) using the repository API when jobs reference them.
- Posts declarative pipeline job definitions to the Jenkins Pipeline Model Converter endpoint (
/pipeline-model-converter/toJson) to obtain a standardized JSON representation that’s easier to analyze. - Attempts to locate transformer modules for pipeline elements and logs which transformers are found or missing.
- Fetches Jenkins job listings and individual
- Use
tmp/audit/to inspect generated artifacts (YAML, JSON, Jenkinsfiles), error output, and theaudit.logfor debugging.
Representative, cleaned log excerpt (key steps)
Key observations from the excerpt
- The Importer calls the Jenkins API (
/api/json) to list jobs, then fetches each job’sconfig.xml. - When a Jenkins job references a Jenkinsfile in GitHub, the Importer fetches the Jenkinsfile from the GitHub API (masked as
REDACTED://...in logs). - The Pipeline Model Converter (
/pipeline-model-converter/toJson) is used to convert declarative pipeline definitions to JSON for easier transformation. - The log contains transformer lookup results (located vs failed). Located transformers will attempt an automatic conversion to a GitHub Actions construct; missing ones need manual handling or new transformers.
If a step was converted incorrectly or not converted at all, consult the audit log for the HTTP calls, transformer lookups, and any redactions. These entries help decide whether to create a custom transformer or edit the generated workflow manually.
Transformer results — summary
Use the following summary to understand which Jenkins constructs the Importer can map automatically and which commonly fail (plugin-specific behaviors).| Located transformers (examples) | Failed-to-locate transformers (examples) |
|---|---|
- RunsOn: label → maps node/label usage- Container: docker → maps container/docker usage- StepTransformer: sh → maps shell/script steps- StepTransformer: publishHTML → maps HTML publishing steps- StepTransformer: junit → maps JUnit test result publishing | - Defaults: label (in some contexts)- Container: label- StepTransformer: dependencyCheck- StepTransformer: dependencyCheckPublisher- StepTransformer: catchError- StepTransformer: withDockerRegistry- Options: retry- Concurrency: org.jenkinsci.plugins.workflow.job.properties.Pipeline |
- Located transformers indicate constructs that the tool can map directly to a GitHub Actions equivalent, reducing manual effort.
- Missing transformers often correspond to Jenkins plugins or advanced Pipeline properties that require either:
- Manual translation into Actions logic, or
- Development of a custom transformer to handle the plugin-specific behavior.
Files generated under tmp/audit/
After auditing and attempting conversions the tool writes output totmp/audit/. Example files from the log:
| Path (example) | Description |
|---|---|
tmp/audit/ci-pipeline-poll-scm/.github/workflows/ci-pipeline-poll-scm.yml | Generated GitHub Actions workflow (auto-converted) |
tmp/audit/ci-pipeline-poll-scm/config.json | Pipeline model JSON from Pipeline Model Converter |
tmp/audit/ci-pipeline-poll-scm/jenkinsfile | Retrieved Jenkinsfile (if present in SCM) |
tmp/audit/Generate_ASCII_Artwork/.github/workflows/generate_ascii_artwork.yml | Generated workflow for another job |
tmp/audit/scripted-pipeline/error.txt | Conversion error/details for scripted pipeline |
tmp/audit/solar-system-ci-pipeline/config.json | Model for the solar-system job |
tmp/audit/solar-system-ci-pipeline/jenkinsfile | Jenkinsfile for solar-system (from GitHub) |
tmp/audit/workflow_usage.csv | CSV summary of actions and runners used |
tmp/audit/audit_summary.md | Human-readable audit summary |
tmp/audit/log/valet-20250521-181951.log | Raw importer log for this run |
Secrets and redaction
The audit process detects and redacts secrets. Look for WARN entries like:Next steps / recommendations
- Inspect artifacts under
tmp/audit/<job>/:config.json— review the pipeline model the importer used to decide mappings.jenkinsfile— confirm the Jenkinsfile the importer fetched from SCM..github/workflows/*.yml— review the autogenerated workflow and identify missing or incorrect steps.
- Prioritize work using the audit outputs:
- Jobs with many located transformers are easier to convert.
- Jobs with multiple failed transformers will require manual edits or new transformers.
- For missing transformations:
- Implement a custom transformer that maps the Jenkins construct to one or more GitHub Actions steps, or
- Manually edit the generated workflow YAML to replace plugin-specific steps (e.g.,
dependencyCheck,withDockerRegistry) with appropriate Actions, containers, or scripts.
- When conversions are unclear:
- Check
tmp/audit/<job>/error.txt(if present) for conversion errors and stack traces. - Consult
audit.logfor debugging details (HTTP requests, transformer lookups, and debug messages).
- Check
Links and references
- Jenkins: https://learn.kodekloud.com/user/courses/jenkins
- GitHub Actions: https://learn.kodekloud.com/user/courses/github-actions
- Jenkins Pipeline Model Converter (documentation): https://plugins.jenkins.io/pipeline-model-definition/
- GitHub API (repos/contents): https://docs.github.com/en/rest/repos/contents
config.json, jenkinsfile, and the fragment of the generated workflow YAML and I can suggest a conversion strategy.