Bird
Raised Fist0
Jenkinsdevops~20 mins

@Library annotation in Jenkins - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Shared Library Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Purpose of @Library Annotation in Jenkins

What is the main purpose of using the @Library annotation in a Jenkins pipeline script?

ATo import shared pipeline code from a shared library repository into the current pipeline.
BTo declare environment variables for the pipeline execution.
CTo define the stages of the pipeline in a declarative syntax.
DTo specify the Jenkins agent where the pipeline should run.
Attempts:
2 left
💡 Hint

Think about how Jenkins pipelines reuse code across multiple jobs.

💻 Command Output
intermediate
2:00remaining
Output of Using @Library Annotation with Version

Given the Jenkins pipeline snippet below, what will be the effect of the @Library annotation?

@Library('utils@v1.2') _
node {
  echo 'Running pipeline'
}
AIt loads the latest version of the 'utils' library ignoring the version 'v1.2'.
BIt loads the 'utils' shared library at version 'v1.2' for use in the pipeline.
CIt sets the pipeline to run only on nodes labeled 'v1.2'.
DIt causes a syntax error because versioning is not supported in @Library.
Attempts:
2 left
💡 Hint

Consider how versioning works with shared libraries in Jenkins.

❓ Configuration
advanced
2:30remaining
Correct Syntax to Load Multiple Shared Libraries

Which of the following Jenkins pipeline snippets correctly loads two shared libraries named 'libA' and 'libB' using the @Library annotation?

A
@Library('libA')
@Library('libB') _
node {
  echo 'Libraries loaded'
}
B
@Library(['libA', 'libB']) _
node {
  echo 'Libraries loaded'
}
C
@Library('libA,libB') _
node {
  echo 'Libraries loaded'
}
D
@Library(['libA@1.0', 'libB@2.0']) _
node {
  echo 'Libraries loaded'
}
Attempts:
2 left
💡 Hint

Check the syntax for loading multiple libraries with optional versions.

❓ Troubleshoot
advanced
2:30remaining
Troubleshooting @Library Annotation Loading Failure

A Jenkins pipeline uses @Library('commonLib') but fails with the error: Library 'commonLib' not found. What is the most likely cause?

AThe Jenkins agent does not have internet access.
BThe pipeline script has a syntax error unrelated to the library.
CThe shared library 'commonLib' is not configured in Jenkins global settings.
DThe <code>@Library</code> annotation must be placed inside the <code>node</code> block.
Attempts:
2 left
💡 Hint

Think about where Jenkins looks for shared libraries.

✅ Best Practice
expert
3:00remaining
Best Practice for Versioning Shared Libraries with @Library

Which practice is best when using the @Library annotation to ensure pipeline stability and reproducibility?

AAlways specify a fixed version or branch in the <code>@Library</code> annotation instead of using the default branch.
BUse the default branch without specifying a version to always get the latest updates.
CLoad shared libraries dynamically inside pipeline steps instead of using <code>@Library</code> annotation.
DAvoid using shared libraries and duplicate code in each pipeline for clarity.
Attempts:
2 left
💡 Hint

Consider how to avoid unexpected changes breaking your pipelines.

Practice

(1/5)
1. What is the main purpose of the @Library annotation in Jenkins pipelines?
easy
A. To specify the pipeline agent type
B. To load shared code libraries for reuse in pipelines
C. To define environment variables for the pipeline
D. To trigger downstream jobs automatically

Solution

  1. Step 1: Understand the role of @Library

    The @Library annotation is used to load shared libraries in Jenkins pipelines.
  2. Step 2: Identify its main purpose

    Loading shared libraries allows reuse of code and better organization of pipeline scripts.
  3. Final Answer:

    To load shared code libraries for reuse in pipelines -> Option B
  4. Quick Check:

    @Library loads shared libraries = C [OK]
Hint: Remember: @Library loads reusable code libraries [OK]
Common Mistakes:
  • Confusing @Library with environment variable setup
  • Thinking it triggers jobs instead of loading code
  • Using it to specify pipeline agents
2. Which of the following is the correct syntax to load a shared library named 'utils' in a Jenkinsfile?
easy
A. @Library('utils') _
B. @Library utils _
C. library('utils') _
D. @LoadLibrary('utils') _

Solution

  1. Step 1: Recall the correct syntax for @Library

    The correct syntax uses parentheses and quotes around the library name, followed by an underscore.
  2. Step 2: Match the syntax to options

    @Library('utils') _ matches @Library('utils') _, which is correct.
  3. Final Answer:

    @Library('utils') _ -> Option A
  4. Quick Check:

    Correct syntax uses parentheses and underscore = A [OK]
Hint: Use parentheses and underscore after @Library [OK]
Common Mistakes:
  • Omitting parentheses or quotes
  • Using wrong annotation like @LoadLibrary
  • Placing underscore before the annotation
3. Given this Jenkinsfile snippet:
@Library('mathLib') _
pipeline {
  agent any
  stages {
    stage('Calculate') {
      steps {
        script {
          echo mathLib.add(2, 3).toString()
        }
      }
    }
  }
}

What will be the output if the shared library 'mathLib' has a method add(a, b) that returns the sum of two numbers?
medium
A. 5
B. mathLib.add(2, 3)
C. Error: method not found
D. 23

Solution

  1. Step 1: Understand the method call in the script block

    The code calls mathLib.add(2, 3) which returns the sum of 2 and 3.
  2. Step 2: Convert the result to string and echo

    The result 5 is converted to string and printed by echo.
  3. Final Answer:

    5 -> Option A
  4. Quick Check:

    Sum of 2 and 3 = 5 [OK]
Hint: Method returns sum; echo prints '5' as string [OK]
Common Mistakes:
  • Expecting the method name printed instead of result
  • Confusing concatenation with addition
  • Assuming method is missing causing error
4. You wrote this at the top of your Jenkinsfile:
@Library('commonLib')
pipeline {
  agent any
  stages {
    stage('Test') {
      steps {
        script {
          commonLib.doSomething()
        }
      }
    }
  }
}

But Jenkins throws an error saying Missing required underscore after @Library annotation. How do you fix it?
medium
A. Change @Library to @LoadLibrary
B. Remove the parentheses from @Library
C. Place the underscore before the annotation like _ @Library('commonLib')
D. Add an underscore _ immediately after the annotation like @Library('commonLib') _

Solution

  1. Step 1: Identify the syntax error from the message

    The error says the underscore is missing after @Library, which is required syntax.
  2. Step 2: Correct the syntax by adding underscore

    Add an underscore immediately after the annotation: @Library('commonLib') _.
  3. Final Answer:

    Add an underscore _ immediately after the annotation like @Library('commonLib') _ -> Option D
  4. Quick Check:

    Underscore after @Library fixes syntax [OK]
Hint: Always put underscore right after @Library(...) [OK]
Common Mistakes:
  • Omitting the underscore
  • Placing underscore before annotation
  • Changing annotation name incorrectly
5. You want to load two shared libraries named 'utils' and 'helpers' in your Jenkinsfile. Which is the correct way to do this using the @Library annotation?
hard
A. @Library('utils_helpers') _
B. @Library('utils') _ @Library('helpers') _
C. @Library(['utils', 'helpers']) _
D. @Library('utils,helpers') _

Solution

  1. Step 1: Recall how to load multiple libraries

    Multiple libraries can be loaded by passing a list of names inside @Library annotation.
  2. Step 2: Identify correct syntax for multiple libraries

    The correct syntax is @Library(['utils', 'helpers']) _ which loads both libraries at once.
  3. Final Answer:

    @Library(['utils', 'helpers']) _ -> Option C
  4. Quick Check:

    Use list inside @Library for multiple libs [OK]
Hint: Use list syntax inside @Library to load many libs [OK]
Common Mistakes:
  • Trying to use multiple @Library annotations
  • Passing comma-separated string instead of list
  • Combining names into one string without list
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard