Skip to main content
The audit command gives a complete overview of pipelines on a Jenkins server and produces artifacts you can use to plan and execute a migration to GitHub Actions. It performs three primary tasks:
  • Enumerates all projects configured on the Jenkins instance.
  • Attempts to transform each Jenkins pipeline into an equivalent GitHub Actions workflow.
  • Generates a summary report describing feasibility, complexity, and any manual tasks required for migration.
A presentation slide titled "Perform an Audit" with a banner reading "Audit command provides an overview of all pipelines on a Jenkins server." Below are three numbered panels listing steps: "Retrieves Jenkins projects," "Transforms pipelines to GitHub Actions workflows," and "Creates feasibility and complexity report," each paired with a colorful icon.

Running an audit

By default the audit inspects the entire Jenkins instance. To limit the audit to a single folder, use the -f flag and specify the folder path. You must also set the output directory with --output-dir (or -o); the path must be located beneath the directory from which you run the GitHub Actions Importer commands.
When you provide --output-dir, the tool writes all artifacts (converted workflows, logs, and metadata) into that directory. Ensure you have write permissions and sufficient disk space before starting the audit.
Example audit invocation and sample console output:
> gh actions-importer audit jenkins --output-dir tmp/audit
[2024-02-29 19:47:20] Logs: 'tmp/audit/log/actions-importer-20240229-015817.log'
[2024-02-29 19:47:20] Auditing https://jenkins-url.com
[2024-02-29 19:47:20] Output file(s):===================================|
[2024-02-29 19:47:48]  tmp/audit/demo_pipeline/.github/workflows/nodejs_pipeline.yml
[2024-02-29 19:47:48]  tmp/audit/demo_pipeline/config.json
[2024-02-29 19:47:48]  tmp/audit/demo_pipeline/jenkinsfile
[2024-02-29 19:47:48]  tmp/audit/groovy_script/error.txt
[2024-02-29 19:47:48]  tmp/audit/groovy_script/config.json
All files listed in the output are written to the --output-dir you specified.

Example audit output tree

Below is a representative tree of the audit output showing the types and structure of files the audit produces:
$ tree tmp/audit/
tmp/audit/
├── audit_summary.md
├── ci-pipeline-poll-scm
   ├── config.json
   └── jenkinsfile
├── Generate_ASCII_Artwork
   └── config.json
├── log
   └── valet-20250521-181951.log
├── multi-branch-pipeline
   ├── config.json
   ├── main
   └── config.json
   └── uat
       └── config.json
├── scripted-pipeline
   ├── config.json
   └── error.txt
├── solar-system-ci-pipeline
   ├── config.json
   └── jenkinsfile
└── workflow_usage.csv

13 directories, 19 files

What the audit output contains

The audit directory will contain a mix of human-readable reports, original Jenkins content, converted workflows, metadata files, and logs:
ArtifactPurposeExample
audit_summary.mdHuman-readable conversion metrics and findingstmp/audit/audit_summary.md
Jenkinsfiles & network responsesOriginals used for conversion and troubleshootingtmp/audit/demo_pipeline/jenkinsfile
Converted GitHub Actions workflows.github/workflows/* files you can validate and committmp/audit/demo_pipeline/.github/workflows/nodejs_pipeline.yml
config.jsonConversion metadata for each pipelinetmp/audit/demo_pipeline/config.json
Error stack tracesFailure diagnostics for problematic conversionstmp/audit/groovy_script/error.txt
workflow_usage.csvManifest of actions, secrets, and runners per workflowtmp/audit/workflow_usage.csv
Open audit_summary.md first to get a quick overview of conversion success rates and items requiring manual attention.

Pipeline Summary (example)

The Pipeline Summary in audit_summary.md reports high-level conversion statistics:
## Pipelines

Total: **7**

- Successful: **3 (42%)**
- Partially successful: **3 (42%)**
- Unsupported: **1 (14%)**
- Failed: **0 (0%)**

### Job types

Supported: **6 (85%)**

- flow-definition: **3**
- project: **2**
- org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject: **1**

Unsupported: **1 (14%)**

- scripted: **1**
Definitions used in the summary:
  • Successful: converted automatically to equivalent GitHub Actions constructs.
  • Partially successful: converted but requires manual adjustments for one or more items.
  • Unsupported: pipeline types the importer cannot convert automatically (for example, some scripted pipelines).
  • Failed: conversions that error out due to invalid Jenkins configurations, internal conversion errors, or inaccessible resources.

Build steps summary (example)

The audit aggregates build steps across pipelines to show how Jenkins steps map to GitHub Actions and which steps need manual attention:
### Build steps

Total: **17**

Known: **13 (76%)**

- echo: **6**
- hudson.tasks.Shell: **3**
- junit: **2**
- archiveArtifacts: **1**
- sh: **1**

Unknown: **3 (17%)**

- sleep: **2**
- hudson.plugins.git.GitPublisher: **1**

Unsupported: **1 (5%)**

- hudson.tasks.Mailer: **1**

Actions: **22**

- run: **10**
- actions/checkout@v2: **9**
- EnricoMi/publish-unit-test-result-action@v1.7: **2**
- actions/upload-artifact@v2: **1**
Key terms:
  • Known: automatically mapped to an equivalent Action or run step.
  • Unknown: no direct mapping; requires manual replacement or a custom action.
  • Unsupported: fundamentally incompatible with GitHub Actions as detected by the importer.
This breakdown is useful for security and compliance reviews (for example, creating an allow-list for actions on GitHub Enterprise Server).

Manual tasks summary (example)

Items the importer could not configure automatically are shown under Manual Tasks. These require repository or organization-level configuration:
### Manual tasks

Total: **9**

Secrets: **2**

- `${{ secrets.SECRET_TEST_EXPRESSION_VAR }}`: **1**
- `${{ secrets.EXPRESSION_FIRST_VAR }}`: **1**

Self hosted runners: **7**

- `TeamARunner`: **6**
- `DemoRunner`: **1**
Manual tasks explained:
  • Secrets: repository/organization secrets referenced by converted workflows. Create these manually in GitHub so workflows run correctly.
  • Self-hosted runners: runner labels referenced by workflows. Provision and register these runners in GitHub if required.
Workflows that reference secrets or self-hosted runners will not run until those resources are created and configured. Plan to create required secrets and register self-hosted runners before enabling converted workflows in production.

Manifest of conversion artifacts (example)

The final section of the audit report lists all files written to disk, grouped by Successful, Partially successful, and Failed conversions. These links and files help you inspect original and converted artifacts side-by-side.
### Successful

#### demo_pipeline
- [monas_dev_work/monas_freestyle/config.json](monas_dev_work/monas_freestyle/config.json)

#### test_multibranch_pipeline
- [test_multibranch_pipeline/config.json](test_multibranch_pipeline/config.json)

### Partially successful

#### test_freestyle_project
#### test_pipeline
- [test_pipeline/.github/workflows/test_pipeline.yml](test_pipeline/.github/workflows/test_pipeline.yml)
- [test_pipeline/config.json](test_pipeline/config.json)
- [test_pipeline/jenkinsfile](test_pipeline/jenkinsfile)

### Failed

#### groovy_script
- [groovy_script/error.txt](groovy_script/error.txt)
- [groovy_script/config.json](groovy_script/config.json)
A presentation slide titled "Review the Audit Summary" showing four colored rounded cards numbered 01–04 labeled "Original Jenkins Pipeline," "Network Responses," "Converted Workflow," and "Stack Traces." Each card contains a short descriptive line about that audit output.

workflow_usage.csv

The audit produces workflow_usage.csv, which maps pipelines to Actions, Secrets, and Runner labels. This is especially valuable for:
  • Security reviews (which actions must be allowed or mirrored to an enterprise appliance).
  • Creating repository/organization secrets required by converted workflows.
  • Identifying self-hosted runners you must provision.
Example CSV contents:
Pipeline,Action,File path
demo_pipeline,actions/checkout@v2,tmp/audit/demo_pipeline/.github/workflows/demo_pipeline.yml
demo_pipeline,actions/upload-artifact@v2,tmp/audit/demo_pipeline/.github/workflows/demo_pipeline.yml

Pipeline,Secret,File path
test_freestyle_project,`${{ secrets.EXPRESSION_FIRST_VAR }}`,tmp/audit/test_freestyle_project/.github/workflows/test_freestyle_project.yml

Pipeline,Runner,File path
demo_pipeline,TeamARunner,tmp/audit/demo_pipeline/.github/workflows/demo_pipeline.yml
test_freestyle_project,DemoRunner,tmp/audit/test_freestyle_project/.github/workflows/test_freestyle_project.yml
  1. Review audit_summary.md to identify:
    • Pipelines that converted successfully and can be enabled quickly.
    • Partially converted pipelines that need manual edits.
    • Unsupported or failed conversions requiring investigation.
  2. Use workflow_usage.csv to:
    • Create or approve external Actions.
    • Add required secrets in GitHub (repository or organization level).
    • Provision and register any self-hosted runners referenced by workflows.
  3. Validate converted workflows by running them in a staging repository before enabling in production.
  4. Use logs and error.txt stack traces to troubleshoot failed conversions.
That concludes the audit overview.

Watch Video