Это старая версия документа!
if (params.getOrDefault('BOOLEAN_PARAM_NAME', true)) if (params.CREDENTIAL_ID.toString().isEmpty()) { currentBuild.result = 'ABORTED' error("CREDENTIAL_ID is empty") }
Дока
Глобальная переменная, доступная через env. Объявляется в любом месте, либо в блоке environment либо в script
Хранится только в формате строки, в т.ч. и булевы значения
Обратится можно и без «env» но если нет обычной переменной с таким же именем иначе будет путаница
pipeline { agent any stages { stage("Env Variables") { steps { sh "printenv" // можно sh "printenv | sort" } } } }
Переменные среды могут быть установлены декларативно с помощью environment { }блока, императивно с помощью env.VARIABLE_NAMEили с помощью withEnv([«VARIABLE_NAME=value»]) {}блока.
pipeline { agent any environment { FOO = "bar" } stages { stage("Env Variables") { environment { NAME = "Alan" } steps { echo "FOO = ${env.FOO}" echo "NAME = ${env.NAME}" script { env.TEST_VARIABLE = "some test value" } echo "TEST_VARIABLE = ${env.TEST_VARIABLE}" withEnv(["ANOTHER_ENV_VAR=here is some value"]) { echo "ANOTHER_ENV_VAR = ${env.ANOTHER_ENV_VAR}" } } } } }
pipeline { agent any environment { FOO = "bar" NAME = "Joe" } stages { stage("Env Variables") { environment { NAME = "Alan" // overrides pipeline level NAME env variable BUILD_NUMBER = "2" // overrides the default BUILD_NUMBER } steps { echo "FOO = ${env.FOO}" // prints "FOO = bar" echo "NAME = ${env.NAME}" // prints "NAME = Alan" echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 2" script { env.SOMETHING = "1" // creates env.SOMETHING variable } } } stage("Override Variables") { steps { script { env.FOO = "IT DOES NOT WORK!" // it can't override env.FOO declared at the pipeline (or stage) level env.SOMETHING = "2" // it can override env variable created imperatively } echo "FOO = ${env.FOO}" // prints "FOO = bar" echo "SOMETHING = ${env.SOMETHING}" // prints "SOMETHING = 2" withEnv(["FOO=foobar"]) { // it can override any env variable echo "FOO = ${env.FOO}" // prints "FOO = foobar" } withEnv(["BUILD_NUMBER=1"]) { echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 1" } } } } }
Обращаться к переменным следует всегда с префиксами если они есть, например для переменных окружения это «env», для входных параметров это «params». т.к. переменная легко может подменится локальной с таким же именем, не имеющей отношения к переменной окружения или параметру
// Входящий параметр stage('Clone source') { steps { echo params.MY_BRANCH sh label: 'repo sync', script: ''' repo init -u ssh://myrepository.ru repo sync if [ $MY_BRANCH != "master" ] ; then repo forall -c git checkout $MY_BRANCH fi ''' } } // Объявление переменной stage('Increment & push MGA_TAG') { environment{ myLocalVar = getValueFromFunction() } steps { script{ if (env.myLocalVar == null || env.myLocalVar.equals("")) { currentBuild.result = 'ABORTED' } } sh label: 'Push tag if it is set', script: ''' cd $WORKSPACE/igas repo forall -c git tag -a $myLocalVar -m $myLocalVar repo forall -c git push origin "$myLocalVar" ''' } } // Объявление входных параметров def setParameters() { properties([ parameters([ gitParameter( name: 'MY_BRANCH', description: 'Тег или ветка, откуда делать сборку', branch: '', branchFilter: '.*', defaultValue: 'origin/master', listSize: '10', quickFilterEnabled: false, requiredParameter: true, selectedValue: 'DEFAULT', sortMode: 'ASCENDING_SMART', tagFilter: '[0-9]*', type: 'PT_BRANCH_TAG' ), string( name: 'APP_VERSION', description: '', defaultValue: '', trim: true ), booleanParam( name: 'RUNACTION', description: '', defaultValue: false ) ]) ]) }
// Так не работает, переменные не раскрываются script{ echo ''' second $MY_PARAM ''' echo ''' three ${MY_PARAM} ''' echo ''' four ${params.MY_PARAM} ''' } // Работает в тройных двойных кавычках, раскрылись все переменные script{ echo """ second $MY_PARAM """ echo """ three ${MY_PARAM} """ echo """ four ${params.MY_PARAM} """ }
import java.time.LocalDateTime // Локальная ДТ, в формате "2024-02-01T19:34:11.905900287" def start = LocalDateTime.now() // Прибавить минуты def start = LocalDateTime.now().plusMinutes(360)
Скрипты справа все таки совпадают с тасками что есть в файле «build.gradle.kts» внутри проекта
вот только как он обновляется ? таску вроде прописал, а справа не появляется этого
// Проверка переданной переменной, через аргументы вызова, "-Pversion" if(!project.hasProperty("version")) throw Exception("no value stop it") // Обращаться к свойству project.properties["buildVersion"] // Вообще таска для ShadowJar tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { mergeServiceFiles() isZip64 = true val serverAppName = "server_app-$serverAppVersion.jar" archiveFileName.set(serverAppName) doFirst { //assert(buildVersion != "non-value") { "Can not get version by git." } if(!project.hasProperty("version")) throw Exception("no value stop it") } } }
# Если скритп "gradlew" в папке с проектом stage('Build jar') { steps { sh "bash ./gradlew shadowJar" } } # Если нет, тогда stage('Build jar') { steps { sh "bash ./gradlew myProject:modules:shadowJar" (хотя не точно уже) } }
Тут модификация shadowJar для того чтобы в имя файла не добавлялся постфикс »-all«
Так же можно явно задавать имя артефакту
Так же таска для публикации в nexus
plugins { application java id("com.github.johnrengelman.shadow") id("com.coditory.manifest") id("maven-publish") } dependencies { (зависимости могут варьироваться) implementation(Deps.toml) implementation(Deps.opencsv) } application { mainClass.set("com.gmware.applications.(тут какой то класс)") } group = "com.gmware.applications" version = "0.0.0.1-SNAPSHOT" // При желании, так можно получить хэш последнего коммита, для записи в манифест fun getGitCommit(): String { val result = StringBuilder() val process = ProcessBuilder("git", "rev-parse", "HEAD").start() process.inputStream.reader(Charsets.UTF_8).use { result.append(it.readText()) } process.waitFor() return result.toString().trim() } tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { archiveClassifier.set("") manifest { attributes(mapOf( "Main-Class" to application.mainClass, "Version" to version, "Module-version" to getGitCommit() )) } } } publishing { repositories { maven { url = uri("${properties["nexusUrl"]}/myApp-snapshot") credentials { username = "${properties["nexusUser"]}" password = "${properties["nexusPassword"]}" } } } publications { register("mavenJava", MavenPublication::class) { artifact(tasks["shadowJar"]) } } }
Избавится от постфикса »-all« в имени джарки
параметр «jar.archiveClassifier.set(»»)«
# Вариант с таской shadowJar tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { archiveClassifier.set("") manifest { attributes(mapOf( "Main-Class" to application.mainClass, "Version" to version, "Module-version" to getGitCommit() )) } } } # Таска с Jar fun configureJar(jar: Jar) { jar.setManifestClassPathToRuntimeDependencies() jar.doFirst { jar.manifest { attributes["Main-Class"] = application.mainClass attributes["Module-Name"] = jar.archiveBaseName.get() attributes["Module-Commit-Date"] = getCommitDate() attributes["Created-By"] = System.getProperty("java.version") } } jar.archiveFileName.set("my-name.jar") jar.archiveClassifier.set("") }
Сборка и загрузка в репозиторий
./gradlew -PnexusUrl=https://url/repository -PnexusUser=<user> -PnexusPassword=<passwd> :module-name:publish
Есть несколько вариантов, один из это подключить плагин, в файле «build.gradle.kts» добавляем
plugins { id(«com.github.johnrengelman.shadow») }