7
votes

Comment gérer la construction nocturne dans le pipeline déclarative de Jenkins

J'ai un pipeline multibranchher avec un Jenkinsfile dans mon repo et je suis capable de disposer de mon flux de travail CI (Build & Unit Tests -> Déployer-dev -> Approbation -> Déployer-QA -> Approbation -> Déployer-prod) sur chaque commit. Ce que j'aimerais faire, c'est ajouter une analyse de sonarqube sur des constructions nocturnes dans les premiers tests de construction et d'unité. Étant donné que ma construction est triggerie par gitlab, j'ai défini mes déclencheurs de pipeline comme suit: xxx pré>

pour configurer ma construction nocturne, j'ai ajouté p> xxx pré>

Mais maintenant, comment exécuter l'étape d'analyse si nous ne construisons que le travail déclenché par l'expression cron la nuit? P>

My Scène de construction simplifiée a l'air suivant: P>

stage('Build & Tests & Analysis') {
    // HERE THE BEGIN SONAR ANALYSIS  (to be executed on nightly builds)
    bat 'msbuild.exe ...'
    bat 'mstest.exe ...'
    // HERE THE END SONAR ANALYSIS (to be executed on nightly builds)
}


0 commentaires

6 Réponses :


7
votes

Il y a la façon de créer des informations de déclenchement. Il est décrit ici: https://jenkins.io/doc/pipeline/examples/#get-build -Cause

Il est bon pour vous de vérifier cela aussi: Comment obtenir la cause du flux de travail

Très bien La référence pour votre cas est https: //hopstorawpoints.blogspot. COM / 2016/10 / EFFORTURE-NUIT-Build-Build-étapes-with.html . Voici la fonction de cette source qui correspond exactement à votre besoin: xxx


1 commentaires

Comment utiliser cette méthode / étape d'un pipeline déclaratif ?



2
votes

Vous pouvez vérifier la cause de la construction comme: xxx pré>

Toutefois, cela nécessite les entrées suivantes dans script-approbation.xml code>: p>

when { expression { return Calendar.instance.get(Calendar.HOUR_OF_DAY) in 0..3 } }


0 commentaires

3
votes

Pour moi, le moyen le plus simple consiste à définir un cron dans la construction de la construction et à vérifier l'heure sur l'étape nocturne à l'aide d'un lorsque l'expression : xxx


2 commentaires

Malheureusement, cette solution a un inconvénient majeur. Si vous n'avez qu'un seul processeur de construction qui exécute actuellement un travail de construction sur une autre succursale et que vous commettez un changement dans votre succursale, cela créera un nouvel emploi dans la file d'attente toutes les minutes. Je soupçonne que cela remplira la file d'attente sans s'arrêter.


Vous pouvez résoudre ce problème en arrêtant des constructions de fonctionnement du même travail, voir un exemple ici: github.com/cloudbees/jenkins-scripts/blob/master/... Nous utilisons un script groovy comme une bibliothèque partagée et l'appelez au début du pipeline.



0
votes

J'ai trouvé un moyen, ce qui n'utilise pas "CurrentBuild.rawbuild" qui est restreint. Commencez votre pipeline avec:

stage('Clean') {
   when {
      anyOf {
         environment name: 'clean_build', value: 'Yes'
         expression { (startedByTimer == true) }
     }
  }
  steps {
      echo "Cleaning..."
      ...


0 commentaires

5
votes

Ceci fonctionne dans Pipeline déclarative

when {
    triggeredBy 'TimerTrigger'
}


0 commentaires

0
votes

Merci à Ce Vous pouvez maintenant le faire sans avoir besoin de la Utilisez le non-whitelisted courantebuild.getrawbuild (). getCauses () fonction qui peut vous donner des scripts non autorisés à utiliser la méthode org.jenkinsci.plugins.workflow.support.steps.build.runwrapper getrawbuild en fonction de votre configuration: xxx


0 commentaires