In this lab you will use the dry-run
command to convert a Jenkins pipeline to its equivalent GitHub Actions workflow.
- Followed the steps here to set up your GitHub Codespaces environment and start a Jenkins server.
- Completed the configure lab.
- Completed the audit lab.
You will be performing a dry run against a pipeline in your preconfigured Jenkins server. Answer the following questions before running this command:
-
What is the name of the pipeline you want to convert?
- test_pipeline
-
What is the URL of the pipeline you want to convert?
-
Where do you want to store the result?
- tmp/dry-run. This can be any path within the working directory from which GitHub Actions Importer commands are executed.
-
Navigate to your codespace terminal.
-
Run the following command from the root directory:
gh actions-importer dry-run jenkins --source-url http://localhost:8080/job/test_pipeline --output-dir tmp/dry-run
-
The command will list all the files written to disk when the command succeeds.
$ gh actions-importer dry-run jenkins --source-url http://localhost:8080/job/test_pipeline --output-dir tmp/dry-run [2022-09-28 20:12:00] Logs: 'tmp/dry-run/log/actions-importer-20220928-201200.log' [2022-09-28 20:12:00] Output file(s): [2022-09-28 20:12:00] tmp/dry-run/test_pipeline/.github/workflows/test_pipeline.yml
-
View the converted workflow:
- Find
tmp/dry-run/test_pipeline/.github/workflows
in the file explorer pane in your codespace. - Click
test_pipeline.yml
to open.
- Find
The files generated from the dry-run
command represent the equivalent Actions workflow for the given Jenkins pipeline. The Jenkins pipeline and converted workflow can be seen below:
Jenkins pipeline 👇
pipeline {
agent {
label 'TeamARunner'
}
environment {
DISABLE_AUTH = 'true'
DB_ENGINE = 'sqlite'
}
stages {
stage('build') {
steps {
echo "Database engine is ${DB_ENGINE}"
sleep 80
echo "DISABLE_AUTH is ${DISABLE_AUTH}"
}
}
stage('test') {
steps{
junit '**/target/*.xml'
}
}
}
}
Converted workflow 👇
name: test_pipeline
on:
push:
paths: "*"
schedule:
- cron: 0-29/10 * * * *
env:
DISABLE_AUTH: 'true'
DB_ENGINE: sqlite
jobs:
build:
runs-on:
- self-hosted
- TeamARunner
steps:
- name: checkout
uses: actions/checkout@v2
- name: echo message
run: echo "Database engine is ${{ env.DB_ENGINE }}"
# # This item has no matching transformer
# - sleep:
# - key: time
# value:
# isLiteral: true
# value: 80
- name: echo message
run: echo "DISABLE_AUTH is ${{ env.DISABLE_AUTH }}"
test:
runs-on:
- self-hosted
- TeamARunner
needs: build
steps:
- name: checkout
uses: actions/checkout@v2
- name: Publish test results
uses: EnricoMi/[email protected]
if: always()
with:
files: "**/target/*.xml"
These two pipelines function equivalently despite using different syntax. In this case, the pipeline conversion was “partially successful” (that is, some item[s] were not automatically converted) and the unconverted item was placed as comment in the location the Jenkins pipeline used it. For example:
- sleep 80
+ # # This item has no matching transformer
+ # - sleep:
+ # - key: time
+ # value:
+ # isLiteral: true
+ # value: 80
In the next lab, you'll learn how to override GitHub Actions Importer's default behavior and customize the converted workflow that is generated.
Try running the dry-run
command for different pipelines in the Jenkins server. As a hint, you only have to change the --source-url
CLI option.
Use custom transformers to customize GitHub Actions Importer's behavior