Bird
Raised Fist0
Jenkinsdevops~5 mins

Implicit vs explicit loading in Jenkins - CLI Comparison

Choose your learning style10 modes available
Introduction
Jenkins pipelines can load shared code or libraries in two ways: implicitly or explicitly. This helps reuse code and organize your pipeline scripts better.
When you want Jenkins to automatically load shared libraries without mentioning them in every pipeline.
When you prefer to control exactly when and which shared libraries are loaded in your pipeline.
When you want to avoid loading unused libraries to speed up pipeline execution.
When you want to make your pipeline scripts clearer by showing all dependencies explicitly.
When you want to share common functions or steps across multiple pipelines.
Config File - Jenkinsfile
Jenkinsfile
pipeline {
  agent any
  stages {
    stage('Example with Explicit Loading') {
      steps {
        script {
          // Explicitly load the shared library
          def myLib = library('my-shared-library')
          myLib.someFunction()
        }
      }
    }
    stage('Example with Implicit Loading') {
      steps {
        script {
          // Use functions from implicitly loaded library directly
          someFunction()
        }
      }
    }
  }
}

This Jenkinsfile shows two ways to load shared libraries.

Explicit loading uses the library() step inside the script block to load the library and assign it to a variable. You then call functions via that variable.

Implicit loading assumes the library is configured in Jenkins global settings to load automatically. You can call its functions directly without extra code.

Commands
This command updates the Jenkins job configuration with the pipeline that uses explicit or implicit loading. It applies the pipeline script to Jenkins.
Terminal
jenkins-jobs --conf jenkins.ini update my-pipeline.yaml
Expected OutputExpected
Job 'my-pipeline' updated successfully
This command triggers the pipeline build and shows the console output to verify the shared library functions run correctly.
Terminal
jenkins-cli build my-pipeline -s
Expected OutputExpected
[Pipeline] Start of Pipeline [Pipeline] stage [Pipeline] { (Example with Explicit Loading) [Pipeline] script [Pipeline] library [Pipeline] someFunction Function from shared library executed [Pipeline] } [Pipeline] stage [Pipeline] { (Example with Implicit Loading) [Pipeline] script [Pipeline] someFunction Function from shared library executed [Pipeline] } [Pipeline] End of Pipeline Finished: SUCCESS
→
-s - Show console output after build
Key Concept

If you remember nothing else from this pattern, remember: implicit loading lets Jenkins auto-load shared libraries, while explicit loading requires you to load them in your pipeline code.

Common Mistakes
Calling shared library functions without explicit loading when the library is not configured for implicit loading.
Jenkins will fail to find the functions and the pipeline will error out.
Either configure the library for implicit loading in Jenkins global settings or load it explicitly in the pipeline using the library() step.
Using explicit loading but forgetting to assign the library to a variable before calling its functions.
Functions cannot be called directly without the variable reference, causing errors.
Assign the library to a variable like def myLib = library('lib-name') and call functions via myLib.functionName().
Summary
Explicit loading requires calling the library() step in the pipeline script to load shared code.
Implicit loading lets Jenkins automatically load shared libraries configured globally, so functions can be called directly.
Use explicit loading for control and clarity; use implicit loading for convenience and less code.

Practice

(1/5)
1. What is the main difference between implicit and explicit loading of shared libraries in Jenkins pipelines?
easy
A. Implicit loading loads libraries from GitHub, explicit loads from local files.
B. Implicit loading requires manual script calls, explicit loading is automatic.
C. Implicit loading is only for scripted pipelines, explicit is for declarative pipelines.
D. Implicit loading uses the @Library annotation, explicit uses the library() step.

Solution

  1. Step 1: Understand implicit loading

    Implicit loading uses the @Library annotation at the top of the Jenkinsfile to automatically load shared libraries.
  2. Step 2: Understand explicit loading

    Explicit loading uses the library() step inside the pipeline script to load libraries manually when needed.
  3. Final Answer:

    Implicit loading uses the @Library annotation, explicit uses the library() step. -> Option D
  4. Quick Check:

    Implicit = @Library, Explicit = library() [OK]
Hint: Remember: @Library is automatic, library() is manual [OK]
Common Mistakes:
  • Confusing which method is automatic
  • Thinking explicit loading is automatic
  • Mixing up syntax of @Library and library()
  • Assuming implicit loading requires code inside pipeline
2. Which of the following is the correct syntax for implicit loading of a shared library named 'utils' in a Jenkinsfile?
easy
A. library('utils')
B. @Library('utils') _
C. loadLibrary('utils')
D. import 'utils'

Solution

  1. Step 1: Recall implicit loading syntax

    Implicit loading uses the @Library('libraryName') _ annotation at the top of the Jenkinsfile.
  2. Step 2: Check options for correct syntax

    @Library('utils') _ matches the correct syntax: @Library('utils') _. Others are incorrect or invalid in Jenkins.
  3. Final Answer:

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

    Implicit loading = @Library('name') _ [OK]
Hint: Implicit loading always starts with @Library and ends with underscore [OK]
Common Mistakes:
  • Using library() instead of @Library for implicit loading
  • Missing the underscore after @Library annotation
  • Using import or loadLibrary which are invalid
  • Placing @Library inside pipeline steps
3. Given the Jenkinsfile snippet below, what will be the output if the shared library 'mathLib' has a function add(a, b) that returns the sum?
@Library('mathLib') _
pipeline {
  agent any
  stages {
    stage('Add') {
      steps {
        script {
          def result = add(3, 4)
          echo "Sum is ${result}"
        }
      }
    }
  }
}
medium
A. Sum is 7
B. Error: add() function not found
C. Sum is 34
D. Pipeline fails to load

Solution

  1. Step 1: Identify loading method

    The Jenkinsfile uses implicit loading with @Library('mathLib') _, so the library functions are available automatically.
  2. Step 2: Understand function call and output

    The add(3, 4) function returns 7, so the echo prints "Sum is 7".
  3. Final Answer:

    Sum is 7 -> Option A
  4. Quick Check:

    Implicit loading allows direct function use = Sum is 7 [OK]
Hint: Implicit loading lets you call library functions directly [OK]
Common Mistakes:
  • Assuming add() is undefined without explicit library() call
  • Confusing string concatenation with addition
  • Thinking pipeline fails due to missing library
  • Ignoring the underscore after @Library
4. You have this Jenkins pipeline snippet:
pipeline {
  agent any
  stages {
    stage('Load Lib') {
      steps {
        script {
          @Library('toolsLib') _
          def result = toolFunc()
          echo "Result: ${result}"
        }
      }
    }
  }
}

What is the problem with this code?
medium
A. The @Library annotation cannot be used inside the script block.
B. The library name 'toolsLib' is invalid syntax.
C. The function toolFunc() must be called with library() step.
D. The echo statement is missing parentheses.

Solution

  1. Step 1: Check usage of @Library annotation

    The @Library annotation must be placed at the top of the Jenkinsfile, not inside script blocks or stages.
  2. Step 2: Identify error cause

    Using @Library inside the script block causes a syntax error; explicit loading with library() should be used inside scripts.
  3. Final Answer:

    The @Library annotation cannot be used inside the script block. -> Option A
  4. Quick Check:

    @Library only at top, not inside script [OK]
Hint: Put @Library only at the top of Jenkinsfile [OK]
Common Mistakes:
  • Placing @Library inside pipeline steps
  • Confusing explicit and implicit loading syntax
  • Assuming library() is optional inside script
  • Ignoring syntax error from misplaced annotation
5. You want to load two shared libraries in a Jenkins pipeline: 'libA' implicitly and 'libB' explicitly. Which Jenkinsfile snippet correctly achieves this?
hard
A. @Library('libB') _ pipeline { agent any stages { stage('Use LibA') { steps { script { library('libA') libAFunc() libBFunc() } } } } }
B. pipeline { agent any stages { stage('Use LibA and LibB') { steps { script { library('libA') library('libB') libAFunc() libBFunc() } } } } }
C. @Library('libA') _ pipeline { agent any stages { stage('Use LibB') { steps { script { library('libB') libBFunc() } } } } }
D. @Library('libA') _ @Library('libB') _ pipeline { agent any stages { stage('Use Both') { steps { script { libAFunc() libBFunc() } } } } }

Solution

  1. Step 1: Understand implicit and explicit loading together

    Implicit loading uses @Library('libA') _ at the top. Explicit loading uses library('libB') inside the script block.
  2. Step 2: Check each option for correct usage

    @Library('libA') _ pipeline { agent any stages { stage('Use LibB') { steps { script { library('libB') libBFunc() } } } } } correctly uses implicit loading for 'libA' and explicit loading for 'libB' inside the script block. Others misuse annotations or load both explicitly or implicitly incorrectly.
  3. Final Answer:

    @Library('libA') _ at top (implicit for libA), library('libB') inside script (explicit for libB) -> Option C
  4. Quick Check:

    Implicit @Library top, explicit library() inside script [OK]
Hint: Implicit @Library top, explicit library() inside script block [OK]
Common Mistakes:
  • Using multiple @Library annotations for explicit loading
  • Calling library() outside script block
  • Loading both libraries only explicitly or only implicitly
  • Misplacing annotations inside pipeline stages
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