2
votes

Comment désactiver l'option "construire maintenant"?

Pour un pipeline scripté donné (jenkins), le pipeline ne doit être déclenché que via le webhook de GitLab

L'option Build Now doit être désactivée pour ce pipeline.


Pouvons-nous configurer Jenkins, pour désactiver l'option Build Now pour une tâche de script de pipeline spécifique dans jenkins?


1 commentaires

4 Réponses :


1
votes

Avez-vous jeté un œil à ce plug-in fourni sur le site de Jenkin? Plugin de stratégie d'autorisation Matrix:

Stratégie matricielle

Plus précisément cette sectionL Autorise la configuration des autorisations par agent. Cela permet par exemple restriction des autorisations de construction par agent lors de l'utilisation du plugin Authorize Project (JENKINS-46654)


0 commentaires

2
votes

EDIT: Voici la solution avec un Pipeline scripté :

pipeline {
...
stages {

  stage ("Authorize Usage") {
      when { expression { getCause() == "USER" } }
      steps {
            currentBuild.description = 'Aborting Build due to manual start - thats not permitted!'
            error('Aborting Build due to manual start - thats not permitted!')
      }
  }
...
}

Que diriez-vous de la solution suivante sans plugin supplémentaire sur un pipeline déclaratif strong >:

node {
   def userIdCause = currentBuild.getBuildCauses('hudson.model.Cause$UserIdCause')
   stage("Authorize Usage") {
      if (userIdCause.size()) {
          error('Aborting Build due to manual start - thats not permitted!')
     }
    }
}


2 commentaires

Pouvez-vous m'en dire plus sur currentBuild et hudson.model.Cause $ UserIdCause ? currentBuild est-il membre de la classe Script ? Que signifie hudson.model ?


Voir mon autre réponse



-1
votes

EDIT: C'est la réponse à la question de l'utilisateur @mohet dans les commentaires de mon autre réponse car il était trop long pour la section commentaire ( https://stackoverflow.com/a/55058788/7746963 ).

La variable currentBuild, qui est de type RunWrapper, peut être utilisée pour faire référence à la construction en cours d'exécution ...

Source: https://opensource.triology.de/jenkins/pipeline-syntax / globals .

hudson.model est le nom de package de la plupart des classes jenkins principales correspondantes. 'Hudson' parce que jenkins était autrefois cloné à partir de la base de code de son ancêtre nommé 'hudson'.

Vous pouvez les rechercher ici: https: //javadoc.jenkins. io / hudson / model / package-summary.html .

Vous y trouverez également https://javadoc.jenkins.io/ hudson / model / Cause.UserIdCause.html . Spécifier directement le package $ classname dans certaines méthodes comme getbuildcauses est l'idée simple de jenkins dev Team. Cela réduit le potentiel de défaillance et rend le code plus lisible et compréhensible.


1 commentaires

La classe UserIdCause est-elle la classe interne de la classe Cause ? Je ne comprends pas cette syntaxe: classe statique publique Cause.UserIdCause étend la cause



0
votes

Pas idéal, mais s'il s'agit d'un 'travail de pipeline freestyle' une solution rapide consiste à ajouter une étape de construction "Exécuter le shell" comme première étape. Vous pouvez l'utiliser pour empêcher une compilation, lorsque la note a changé.

Chaque fois que vos sources changent et que vous poussez vers votre dépôt, une compilation aura été déclenchée et comme il y a des changements, ce script ne se fermera pas.

Lorsque vous cliquez sur "Construire maintenant", rien ne devrait avoir changé dans votre dépôt (car le seul moyen pour cela est de le faire par un push qui déclencherait ensuite une construction), cela provoquera une sortie et échouera la construction. p>

if [[ $GIT_COMMIT -eq $GIT_PREVIOUS_COMMIT ]]
then
  echo "Exiting build - Nothing has changed"
  echo "This is to prevent the usage of Jenkins 'build now'"
  exit 1
fi


0 commentaires