2016-04-01 3 views

Antwort

6

Hier ist die Art, wie ich das auf diese Weise implementieren konnte, aber wenn Sie einen besseren Weg kennen, bin ich mehr als bereit, es zu hören.

#!groovy 

stage 'build' 
node { 

    repositoryCommiterEmail = '[email protected]' 
    repositoryCommiterUsername = 'examle.com' 

    checkout scm 

    sh "echo done" 

    if (env.BRANCH_NAME == 'master') { 
     stage 'tagging' 

     sh("git config user.email ${repositoryCommiterEmail}") 
     sh("git config user.name '${repositoryCommiterUsername}'") 

     sh "git remote set-url origin [email protected]:..." 

     // deletes current snapshot tag 
     sh "git tag -d snapshot || true" 
     // tags current changeset 
     sh "git tag -a snapshot -m \"passed CI\"" 
     // deletes tag on remote in order not to fail pushing the new one 
     sh "git push origin :refs/tags/snapshot" 
     // pushes the tags 
     sh "git push --tags" 
    } 
} 
+2

Das ist interessant. Wie machst du Authentifizierung an der Fernbedienung (wie sendest du das Passwort)? – octavian

1

Ich möchte my Jenkins Pipeline Setup und meine Lösung teilen Änderungen/Tags zu veröffentlichen Repo über SSH git (Während Git Publish Support in der Entwicklung). Bitte überprüfen Sie es für weitere Informationen, Verbesserungsideen sind willkommen.

Kurz Sie nur Datei git_push_ssh.groovy zu Ihrem Projekt und Call-Methode pushSSH() von Jenkinsfile wie folgt hinzu:

env.BRANCH_NAME = "mycoolbranch"// BRANCH_NAME is predefined in multibranch pipeline job 
env.J_GIT_CONFIG = "true" 
env.J_USERNAME = "Jenkins CI" 
env.J_EMAIL = "[email protected]" 
env.J_CREDS_IDS = '02aa92ec-593e-4a90-ac85-3f43a06cfae3' // Use credentials id from Jenkins 
def gitLib = load "git_push_ssh.groovy" 
... 
gitLib.pushSSH(commitMsg: "Jenkins build #${env.BUILD_NUMBER}", tagName: "build-${env.BUILD_NUMBER}", files: "changelog.txt someotherfile.txt"); 
1

Für Menschen, die nicht die obigen Arbeits ich die sshagent direkt Plugin verwendet bekommen konnte, die das tat Trick:

stage('tag build'){ 
checkout([ 
    $class: 'GitSCM', branches: [[name: '*/master']], 
    userRemoteConfigs: [[credentialsId: 'git', 
    url: 'ssh://<ssh URL>']], 
    extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'targeted-dir']] 
]) 

sshagent(credentials: ['<credentials ID.']){ 
    dir('targeted-dir'){ 
    sh("git config user.email '<email>") 
    sh("git config user.name '<user>.com'") 

    // deletes current snapshot tag 
    sh ("git tag -d ${PARAM_VERSION_NUMBER} || true") 
    // tags current changeset 
    sh ("git tag -a ${PARAM_VERSION_NUMBER} -m \"versioning ${PARAM_VERSION_NUMBER}\"") 
    // deletes tag on remote in order not to fail pushing the new one 
    sh ("git push origin :refs/tags/snapshot") 
    // pushes the tags 
    sh ("git push --tags") 
    } 
} 

}

Verwandte Themen