Mam ogólny projekt Multilibranch, którego używam na około 100 różnych reposach Git. Jenkins Praca są generowane automatycznie, a jedyną różnicą jest Repo Git.

Ponieważ wszyscy budują w ten sam sposób i nie chcę skopiować tego samego pliku Jenkin Groovy we wszystkich reposach, używam "Konfiguracja Budowania -> Tryb -> Domyślnie Jenkinsfile".

Łamie regułę, aby umieścić Jenkinsfile w SCM, jak wolałbym zrobić. Aby zminimalizować wpływ, chciałbym, że plik Groovy, aby sprawdzić tylko "prawdziwy" JenkinsFile i wykonaj go.

Używam tego skryptu:

pipeline {
    agent {label 'docker'}
    stages {
        stage('jenkinsfile checkout') {
            steps {
               checkout([$class: 'GitSCM', 
                  branches: [[name: 'master']], 
                  doGenerateSubmoduleConfigurations: false, 
                  extensions: [[$class: 'RelativeTargetDirectory', 
                  relativeTargetDir: 'gipc_synthesis']], 
                  submoduleCfg: [], 
                  userRemoteConfigs: [[url: 'ssh://git@camtl1bitmirror.gad.local:7999/mtlstash/mvt/gipc_synthesis.git']]]
               ) 
            }
        } 

        stage('Load user Jenkinsfile') {
           //agent any
           steps {
             load 'gipc_synthesis/jenkins/synthesis_job.groovy'
           }
        }
    }    
}

Problem, który mam z tym, że nie mogę mieć innego rurociągu w pliku Groovy, który załaduję. Nie chcę definiować tylko funkcji, ale naprawdę cały rurociąg w tym pliku. Jakieś rozwiązanie tego problemu? Interesuje mnie również rozwiązanie, które całkowicie uniknęłoby całego problemu.

Dziękuję Ci.

0
Simon Martineau 14 styczeń 2020, 17:12

1 odpowiedź

Najlepsza odpowiedź

Możesz mieć wspólną bibliotekę z rurociągiem w środku:

// my-shared.git: vars/build.groovy
def call(String pathToGit) // and maybe additional params 
{
    pipeline {
        agent { ... }
        stages {
          stage('jenkinsfile checkout') {
            steps {
               checkout([$class: 'GitSCM', 
                  branches: [[name: 'master']], 
                  doGenerateSubmoduleConfigurations: false, 
                  extensions: [[$class: 'RelativeTargetDirectory', 
                  relativeTargetDir: 'gipc_synthesis']], 
                  submoduleCfg: [], 
                  userRemoteConfigs: [[url: pathToGit]]]
               ) 
            }
          } 
        }
    }
}

I użyj go w swoim Jenkinsfile np. lubię to:

#!groovy
@Library('my-shared') _

def pathToGit = 'ssh://git@camtl1bitmirror.gad.local:7999/mtlstash/mvt/gipc_synthesis.git'

build(pathToGit)
1
MaratC 14 styczeń 2020, 15:34