HTML reports publishing in Jenkins - Time & Space Complexity
When Jenkins publishes HTML reports, it processes files to display results. Understanding how the time to publish grows helps us plan for bigger projects.
We want to know: How does publishing time change as the number of report files grows?
Analyze the time complexity of the following Jenkins pipeline snippet that publishes HTML reports.
stage('Publish HTML Reports') {
steps {
publishHTML(target: [
allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: 'reports',
reportFiles: '**/*.html',
reportName: 'Test Report'
])
}
}
This code publishes HTML reports from a directory after tests run, making them visible in Jenkins.
Look for repeated work inside the publishing step.
- Primary operation: Reading and processing each HTML report file in the specified directory.
- How many times: Once per report file found in the 'reports' folder.
As the number of HTML files grows, Jenkins reads and processes each one.
| Input Size (n files) | Approx. Operations |
|---|---|
| 10 | 10 file reads and processing steps |
| 100 | 100 file reads and processing steps |
| 1000 | 1000 file reads and processing steps |
Pattern observation: The work grows directly with the number of files. Double the files, double the work.
Time Complexity: O(n)
This means the time to publish reports grows linearly with the number of HTML files.
[X] Wrong: "Publishing HTML reports takes the same time no matter how many files there are."
[OK] Correct: Each file must be read and processed, so more files mean more work and longer time.
Understanding how Jenkins handles report publishing helps you explain build pipeline efficiency and scaling in real projects. This skill shows you can think about how tools behave as projects grow.
"What if we changed reportFiles from '**/*.html' to 'index.html'? How would the time complexity change?"
Practice
Solution
Step 1: Understand the role of HTML reports in Jenkins
HTML reports are used to show test and build results in a user-friendly way inside Jenkins.Step 2: Identify the correct purpose
Among the options, only displaying results inside Jenkins matches the purpose of HTML reports.Final Answer:
To display test and build results inside Jenkins in a readable format -> Option AQuick Check:
HTML reports = readable results inside Jenkins [OK]
- Confusing HTML reports with build execution steps
- Thinking HTML reports send notifications
- Assuming HTML reports create jobs
Solution
Step 1: Review the correct Jenkins pipeline syntax for publishHTML
The publishHTML step requires a target map with keys like allowMissing, alwaysLinkToLastBuild, keepAll, reportDir, reportFiles, and reportName.Step 2: Compare options to syntax
publishHTML(target: [allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'reports', reportFiles: 'index.html', reportName: 'My Report']) correctly uses the target map with all required keys and proper syntax.Final Answer:
publishHTML(target: [allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'reports', reportFiles: 'index.html', reportName: 'My Report']) -> Option DQuick Check:
publishHTML uses target map syntax [OK]
- Omitting the target keyword
- Passing parameters as separate arguments
- Using curly braces instead of parentheses
publishHTML(target: [allowMissing: true, keepAll: false, reportDir: 'test-results', reportFiles: 'summary.html', reportName: 'Test Summary'])What happens if the 'summary.html' file is missing after the build?
Solution
Step 1: Understand the allowMissing option
allowMissing: true means Jenkins will not fail the build if the report file is missing.Step 2: Predict behavior when file is missing
Since allowMissing is true, the build succeeds but no report is shown.Final Answer:
The build will succeed and no report will be shown -> Option BQuick Check:
allowMissing true = no failure if missing [OK]
- Assuming build fails when allowMissing is true
- Thinking Jenkins creates missing files
- Believing build pauses for missing files
Solution
Step 1: Check common reasons for missing HTML reports
If the reportDir path is wrong or empty, Jenkins cannot find the report files to display.Step 2: Evaluate other options
allowMissing missing does not prevent report display if files exist; reportName length and server restart are unrelated.Final Answer:
The reportDir path is incorrect or does not contain the report files -> Option CQuick Check:
Wrong reportDir = no report shown [OK]
- Ignoring reportDir correctness
- Thinking allowMissing affects report visibility
- Restarting Jenkins unnecessarily
Solution
Step 1: Understand keepAll and alwaysLinkToLastBuild options
keepAll: true keeps reports from all builds. alwaysLinkToLastBuild: true creates a link to the latest report.Step 2: Match options to requirement
publishHTML(target: [keepAll: true, alwaysLinkToLastBuild: true, reportDir: 'output', reportFiles: 'report.html', reportName: 'Build Report']) sets both keepAll and alwaysLinkToLastBuild to true, meeting the requirement.Final Answer:
publishHTML(target: [keepAll: true, alwaysLinkToLastBuild: true, reportDir: 'output', reportFiles: 'report.html', reportName: 'Build Report']) -> Option AQuick Check:
keepAll and alwaysLinkToLastBuild true = keep all and link latest [OK]
- Setting keepAll false loses old reports
- Not linking to last build report
- Confusing option names
Ready to prove it?
Pass the test and this pattern moves unknown
