Chcę zaktualizować submodule na Clone Git.

Czy istnieje sposób, aby zrobić to dzięki poleceniu Git Rurociągu Jenkinsa?

Obecnie robię to ...

git branch: 'master',
    credentialsId: 'bitbucket',
    url: 'ssh://bitbucket.org/hello.git'

Nie jest jednak zaktualizowany pod hasło raz

33
Passionate Engineer 17 luty 2017, 08:32

3 odpowiedzi

Najlepsza odpowiedź

Dzięki bieżącym Git Plugin, nawet tego nie potrzebujesz.

Wtyczka Git obsługuje repozytoria z podmodułami, które z kolei mają same submodules.
Należy jednak włączyć:

W konfiguracji pracy -> Sekcja Zarządzanie kodem źródłowym, GIT -> Zaawansowany przycisk (w obszarze Gałęzie do budowy) -> Rekurencyjnie aktualizuj podgłosy

Ale OP stosuje rurociąg.

Wystarczy prosty krok pierwszy krok:

git submodule update --init --recursive

Jednak OP dodaje:

Tak, ale jeśli używam sh 'git submodule update --init --recursive', użyje $HOME/id_rsa w prawo? Chcę przejść w moim prywatnym kluczu dla tego polecenia, jeśli to możliwe.

Jest to możliwe: w Składnia rurociągów, możesz Zdefiniuj zmienne środowiskowe.
Co oznacza, że możesz ustawić GIT_SSH_COMMAND (z GIT 2.10+).
To pozwala Ci Odniesienie własnego klucza prywatnego.

pipeline {
    agent any

    environment {
        GIT_SSH_COMMAND = 'ssh -i /path/to/my/private/key'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
                sh 'git submodule update --init --recursive'
            }
        }
    }
} 

Jeśli jakikolwiek klon obejmuje adres URL SSH, że klon SSH będzie używać właściwego klucza prywatnego.

28
Community 23 maj 2017, 11:46

Polecenie Git jako etap rurociągu jest raczej ograniczony, ponieważ zapewnia Domyślna implementacja bardziej złożonego Polecenie kasy. Aby uzyskać bardziej zaawansowaną konfigurację, powinieneś używać polecenie kasowania , dla którego można przekazać wiele parametrów, w tym żądane konfiguracji podmodules.

Co chcesz użyć, jest prawdopodobnie czymś takim:

checkout([$class: 'GitSCM',
          branches: [[name: '*/master']],
          doGenerateSubmoduleConfigurations: false,
          extensions: [[$class: 'SubmoduleOption',
                        disableSubmodules: false,
                        parentCredentials: false,
                        recursiveSubmodules: true,
                        reference: '',
                        trackingSubmodules: false]], 
          submoduleCfg: [], 
          userRemoteConfigs: [[url: 'your-git-server/your-git-repository']]])

Z dokumentacji jest często kłopotliwe do napisania tego rodzaju linii, zalecam, że używasz, zamiast tego Jenkins bardzo dobry {X0}} (YourJenkins & GT; YourProject & GT; PipeNinkintax), aby automatycznie generować linię kasy!

50
Pom12 17 luty 2017, 09:03
checkout([
    $class: 'GitSCM', 
    branches: scm.branches, 
    doGenerateSubmoduleConfigurations: false, 
    extensions: [[
      $class: 'SubmoduleOption', 
      disableSubmodules: false, 
      parentCredentials: true, 
      recursiveSubmodules: true, 
      reference: '', 
      trackingSubmodules: false
    ]], 
    submoduleCfg: [], 
    userRemoteConfigs: scm.userRemoteConfigs
  ])
19
deepelement 21 lipiec 2017, 18:08