2017-10-23 1 views
2

Ich habe eine Jenkins Multi-Zweig Pipeline Artefakte für den Aufbau und es gibt Niederlassungen für master, *-dev usw.Job basierte Sicherheit pro Zweig - Jenkins mehrfach verzweigten Pipeline

I Projekt basierte Sicherheit auf einer pro Zweig Basis aktivieren möchten, dh erlauben Sie nur Devs, die *-dev Zweigjobs des Aufbaus nicht irgendwelche anderen zu laufen, weil das tun würde unerwünschte Effekte haben würde.

Ich weiß, es Projekt basierte Sicherheit ist, aber ich habe nicht pro Zweig. Gibt es das? Wir sind bei der Aktualisierung von Jenkins zurück und führen derzeit Jenkins 2.46.1.

Sonst denke ich, dass ich einen separaten Upstream-Job haben muss, um den richtigen Zweig des Downstream-Jobs aufzurufen und den Downstream-Artefakt-Job nicht von Devs mit der Berechtigung ausführen zu lassen. (Das klingt nach Overkill).

Oder gibt es eine Möglichkeit, dies Jenkinsfile der in der Branche zu erreichen?

Antwort

2

Hier einige Jenkinsfile groovy, die Sie in der Nähe bekommen, was Sie wollen:

// return the user id that caused this build; else empty string 
@NonCPS 
def user_id_cause() { 
    def CAUSE = currentBuild.rawBuild.getCause(
     hudson.model.Cause.UserIdCause.class 
    ); 
    return CAUSE ? CAUSE.getUserId() : ""; 
} 

// return all groups to which the given user id belongs 
@NonCPS 
def groups(USER_ID) { 
    return Jenkins.instance.securityRealm.loadUserByUsername(USER_ID).authorities.collect{ it.toString() }; 
} 

... 

env.USER_ID_CAUSE = user_id_cause(); 
if (!env.BRANCH_NAME.endsWith('-dev')) { 
    if (env.USER_ID_CAUSE) { 
     if ('jenkins_admins' in groups(env.USER_ID_CAUSE)) { 
      echo("INFO: user id `${env.USER_ID_CAUSE}` is in the group `jenkins_admins`."); 
     } else { 
      currentBuild.result = 'ABORTED'; 
      error("user id `${env.USER_ID_CAUSE}` is not in the group `jenkins_admins`."); 
     } 
    } 
} 

Caveats:

  • Diese Tricks stark auf API-Funktionen verlassen, die "In-Prozess-Script Genehmigung" erfordern von ein Jenkins-Administrator.
  • Das obige Beispiel die Existenz der jenkins_admins Gruppe geht davon aus, zu dem privilegierten Benutzer gehören --- Ihre Benutzer/Gruppen Situation kann sehr unterschiedlich sein.
  • Im Allgemeinen mit Objekten spielen von Jenkins-API-Funktionen zurück sollte innerhalb @NonCPS -annotated Funktionen erfolgen --- riskieren Sie java.io.NotSerializableException anders.

Referenzen:

Verwandte Themen