Size: a a a

2021 March 19

S

Slava in jenkins_ru
Т.е. сейчас еще раз посмотрел.
Создал 2 новых джоб.
Во 2 пробовал
Trigger only if build is stable
Trigger even if the build is unstable
Trigger even if the build fails

В не зависимости от того проходит первая джоб успешно или нет, вторая запускается, в независимости от параметров. Что я упускаю?) Или может есть плагины, которые помогают запускать только в случае провала 1 джобы.
Благодарю
источник

✏d

✏️ Oleksandr dntPani... in jenkins_ru
Такой вопрос: в Дженкинс создано около 10 тыс. джобов. Они сложены по папкам и подпапкам. Я написал на питоне скриптик, он по АПИ читает информацию про билды. Но сбор иформации забирает около часа. Это нормально или я что-то не так делаю?
источник

DB

Dmitry Burmistrov in jenkins_ru
✏️ Oleksandr dntPanix |Worm|
Такой вопрос: в Дженкинс создано около 10 тыс. джобов. Они сложены по папкам и подпапкам. Я написал на питоне скриптик, он по АПИ читает информацию про билды. Но сбор иформации забирает около часа. Это нормально или я что-то не так делаю?
https://www.jenkins.io/doc/book/scaling/architecting-for-scale/
The equation for estimating the number of controllers and executors needed when the number of configured jobs is known is as follows:

controllers = number of jobs/500
рекомендация - 500 джоб на мастер.
источник

✏d

✏️ Oleksandr dntPani... in jenkins_ru
Dmitry Burmistrov
https://www.jenkins.io/doc/book/scaling/architecting-for-scale/
The equation for estimating the number of controllers and executors needed when the number of configured jobs is known is as follows:

controllers = number of jobs/500
рекомендация - 500 джоб на мастер.
та там 23 воркера
источник

DB

Dmitry Burmistrov in jenkins_ru
а это не важно
источник

DB

Dmitry Burmistrov in jenkins_ru
так, что час на 10к джоб - мне кажется нормальным. копать надо в сторону разделения мастеров
источник

✏d

✏️ Oleksandr dntPani... in jenkins_ru
ок, будем просвещаться
источник

АЗ

Алексей Зорин... in jenkins_ru
Добрый вечер.
Не знал к кому обратиться более.
Помогите решить одну задачку.
Есть pipеline он работает. Нужно чтобы в зависимости от ветки подставлялась нужная версия приложения в maven ну и в job деплоя. Мне тут подсказали как можно сделать. Но у меня так до конца и не работает. Что я делаю не так? И может кто то подскажет другое решение.
источник

АЗ

Алексей Зорин... in jenkins_ru
appVer = '1.1'
if ( env.BRANCH_NAME == 'master') {
   appRevision = "${appVer}-RELEASE"
   environment = "PROD"
} else {
   appRevision = "${appVer}-SNAPSHOT"
   environment = "DEV"
}
pipeline {
   agent {
       node {
           label 'Linux_Default' //Сборка должна происходить на централизованных агентах из пула Linux_Default
       }
   }
   stages {
       stage('Build') {
           steps {
               withMaven(maven: 'Maven 3.5.2') {
                   sh """mvn -DappRevision=$appRevision clean install""" //Выполняется сборка проекта
               }
           }
       }
       stage('SQ') {
           steps {
               withSonarQubeEnv('sonarq.kode.ru') {
                   withMaven(maven: 'Maven 3.5.2') {
                       sh "mvn -DappRevision=$appRevision sonar:sonar -Dsonar.links.scm=${env.GIT_URL}"
                   }
               }
           }
       }
       stage('QG SQ') {
           steps {
               timeout(time: 1, unit: 'HOURS') {
                   waitForQualityGate abortPipeline: true
               }
           }
       }
       stage("Nexus upload") {
           when {
               not {
                   branch 'master'
               }
           }
           steps {
               withCredentials([usernamePassword(credentialsId: "CRED", usernameVariable: "nexUser", passwordVariable: "nexPwd")]) {
                   withMaven(maven: 'Maven 3.5.2') {
                       sh "mvn -DappRevision=${appRevision} -s ./settings.xml clean deploy -Dmaven.test.skip=true -Drepo.password=\"${nexPwd}\" -Drepo.username=\"${nexUser}\""
                   }
               }
           }
       }
       stage("Deploy") {
           steps {
               build job: 'camp/deploy_market', parameters: [[$class: 'StringParameterValue', name: 'comp_env', value: "${environment}"],
                                                                        [$class: 'StringParameterValue', name: 'app_version', value: "${appRevision}"],
                                                                        [$class: 'StringParameterValue', name: 'login', value: "Vasya"],
                                                                        [$class: 'StringParameterValue', name: 'email_list', value: "aaa@kode.ru"]]
           }
       }
   }
}
источник
2021 March 20

MY

Mihail Yakubiv in jenkins_ru
Алексей Зорин
appVer = '1.1'
if ( env.BRANCH_NAME == 'master') {
   appRevision = "${appVer}-RELEASE"
   environment = "PROD"
} else {
   appRevision = "${appVer}-SNAPSHOT"
   environment = "DEV"
}
pipeline {
   agent {
       node {
           label 'Linux_Default' //Сборка должна происходить на централизованных агентах из пула Linux_Default
       }
   }
   stages {
       stage('Build') {
           steps {
               withMaven(maven: 'Maven 3.5.2') {
                   sh """mvn -DappRevision=$appRevision clean install""" //Выполняется сборка проекта
               }
           }
       }
       stage('SQ') {
           steps {
               withSonarQubeEnv('sonarq.kode.ru') {
                   withMaven(maven: 'Maven 3.5.2') {
                       sh "mvn -DappRevision=$appRevision sonar:sonar -Dsonar.links.scm=${env.GIT_URL}"
                   }
               }
           }
       }
       stage('QG SQ') {
           steps {
               timeout(time: 1, unit: 'HOURS') {
                   waitForQualityGate abortPipeline: true
               }
           }
       }
       stage("Nexus upload") {
           when {
               not {
                   branch 'master'
               }
           }
           steps {
               withCredentials([usernamePassword(credentialsId: "CRED", usernameVariable: "nexUser", passwordVariable: "nexPwd")]) {
                   withMaven(maven: 'Maven 3.5.2') {
                       sh "mvn -DappRevision=${appRevision} -s ./settings.xml clean deploy -Dmaven.test.skip=true -Drepo.password=\"${nexPwd}\" -Drepo.username=\"${nexUser}\""
                   }
               }
           }
       }
       stage("Deploy") {
           steps {
               build job: 'camp/deploy_market', parameters: [[$class: 'StringParameterValue', name: 'comp_env', value: "${environment}"],
                                                                        [$class: 'StringParameterValue', name: 'app_version', value: "${appRevision}"],
                                                                        [$class: 'StringParameterValue', name: 'login', value: "Vasya"],
                                                                        [$class: 'StringParameterValue', name: 'email_list', value: "aaa@kode.ru"]]
           }
       }
   }
}
а ошибка то какая?
источник

АЗ

Алексей Зорин... in jenkins_ru
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: java.lang.String.getProperty() is applicable for argument types: (java.lang.String) values: [BRANCH_NAME]
Possible solutions: hasProperty(java.lang.String), getProperties()
 at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
 at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49)
 at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
 at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
 at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
 at org.jenkinsci.plugins.pipeline.modeldefinition.when.impl.BranchConditionalScript.evaluate(BranchConditionalScript.groovy:39)
 at org.jenkinsci.plugins.pipeline.modeldefinition.when.impl.AnyOfConditionalScript.evaluate(AnyOfConditionalScript.groovy:40)
 at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.any(CpsDefaultGroovyMethods:2343)
 at org.jenkinsci.plugins.pipeline.modeldefinition.when.impl.AnyOfConditionalScript.evaluate(AnyOfConditionalScript.groovy:39)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter$WhenEvaluator.evaluateWhen(ModelInterpreter.groovy:851)
 at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.every(CpsDefaultGroovyMethods:2228)
 at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.every(CpsDefaultGroovyMethods:2249)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter$WhenEvaluator.evaluateWhen(ModelInterpreter.groovy:850)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter$WhenEvaluator.evaluateWhen(ModelInterpreter.groovy)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter$WhenEvaluator.passedOrNotEvaluated(ModelInterpreter.groovy:841)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.evaluateStage(ModelInterpreter.groovy:273)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.inDeclarativeAgent(ModelInterpreter.groovy:586)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.inDeclarativeAgent(ModelInterpreter.groovy:585)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.evaluateStage(ModelInterpreter.groovy:272)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.stageInput(ModelInterpreter.groovy:356)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.stageInput(ModelInterpreter.groovy:355)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.evaluateStage(ModelInterpreter.groovy:261)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.inWrappers(ModelInterpreter.groovy:613)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.inWrappers(ModelInterpreter.groovy:612)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.evaluateStage(ModelInterpreter.groovy:259)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.withEnvBlock(ModelInterpreter.groovy:443)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.withEnvBlock(ModelInterpreter.groovy:442)
 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.evaluateStage(ModelInterpreter.groovy:254)
 at ___cps.transform___(Native Method)
 at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:86)
 at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
 at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
 at sun.reflect.GeneratedMethodAccessor218.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
 at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
источник

АЗ

Алексей Зорин... in jenkins_ru

 at com.cloudbees.groovy.cps.Next.step(Next.java:83)
 at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
 at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
 at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
 at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
 at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
 at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
 at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
 at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:185)
 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:400)
 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:96)
 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:312)
 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:276)
 at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
 at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
 at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE
источник

MY

Mihail Yakubiv in jenkins_ru
мб начальный блок вот так

node(label: "Linux_Default"){
appVer = '1.1'
if ( env.BRANCH_NAME == 'master') {
   appRevision = "${appVer}-RELEASE"
   environment = "PROD"
} else {
   appRevision = "${appVer}-SNAPSHOT"
   environment = "DEV"
}
}

pipeline {
....
источник

MY

Mihail Yakubiv in jenkins_ru
кажется начальный блок дженкинс не понял
источник

АЗ

Алексей Зорин... in jenkins_ru
и еще при такой конструкции он не понимает дефолтные переменные типа env.BRANCH_NAME
источник

АЗ

Алексей Зорин... in jenkins_ru
как я понял
источник

АЗ

Алексей Зорин... in jenkins_ru
Алексей Зорин
Добрый вечер.
Не знал к кому обратиться более.
Помогите решить одну задачку.
Есть pipеline он работает. Нужно чтобы в зависимости от ветки подставлялась нужная версия приложения в maven ну и в job деплоя. Мне тут подсказали как можно сделать. Но у меня так до конца и не работает. Что я делаю не так? И может кто то подскажет другое решение.
может быть вообще есть другой вариант как сделать задачу?
источник

MY

Mihail Yakubiv in jenkins_ru
не сработало указание ноды? это вставка scripted пайпа
источник

АЗ

Алексей Зорин... in jenkins_ru
пробую)
источник

АЗ

Алексей Зорин... in jenkins_ru
нет та же ошибка(
источник