Configuration¶
In order to use the LF RelEng Pipelines Library, it simply needs to be imported by adding to the Pipeline Libraries in Jenkins. This can be done in the global Jenkins settings under Global Pipeline Libraries, in individual job settings, or in the GitHub Organization config, if using the GitHub plugin for an entire org.
Warning
Global Pipeline Libraries imported in the global Settings do not run inside of Jenkins’ groovy sandbox. This can lead to security risks, and it is recommended that the library be imported at a more specific level.
With the library imported, all functions in the vars
directory can be called
directly in Jenkinsfile, without the need for further imports. For a more
detailed explanation of pipeline libraries, please see the
Jenkins Shared Library docs.
Example Jenkinsfile¶
Below is a simple Jenkinsfile that shows a basic implementation of the functions supported by this library.
// SPDX-License-Identifier: Apache-2.0
//
// Copyright (c) 2021 The Linux Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
loadGlobalLibrary()
pipeline {
agent {
node {
// This label should match an agent available on the target system
label "centos7-docker-4c-2g"
}
}
options {
timestamps()
timeout(360)
}
environment {
// The settings file needs to exist on the target Jenkins system
mvnSettings = "sandbox-settings"
}
stages {
stage("Java Build") {
steps {
lfJava(mvnSettings=env.mvnSettings)
}
}
stage("Node Verify") {
steps {
lfNode()
}
}
stage("Parallel Testing") {
parallel {
stage("amd") {
// This label should match an agent available on the target system
node {"amdNode"}
steps {
sh "echo AMD tests"
}
post {
always {
lfParallelCostCapture()
}
}
}
stage("arm") {
// This label should match an agent available on the target system
node {"armNode"}
steps {
sh "echo ARM tests"
}
post {
always {
lfParallelCostCapture()
}
}
}
}
}
}
post {
always {
// The default logSettingsFile is "jenkins-log-archives-settings".
// If this file isn't present, a different value for logSettingsFile
// will need to be passed to lfInfraShipLogs.
lfInfraShipLogs()
}
}
}
// This loadGlobalLibrary call is only required if the library is not defined
// in the Jenkins global or job settings. Otherwise, a simple "@Library" call
// will suffice.
def loadGlobalLibrary(branch = "*/master") {
library(identifier: "pipelines@master",
retriever: legacySCM([
$class: "GitSCM",
userRemoteConfigs: [[url: "https://github.com/lfit/releng-pipelines"]],
branches: [[name: branch]],
doGenerateSubmoduleConfigurations: false,
extensions: [[
$class: "SubmoduleOption",
recursiveSubmodules: true,
]]]
)
) _
}