получить подробную информацию об исходном хранилище из Jenkinsfile - PullRequest
0 голосов
/ 01 мая 2018

Jenkinsfile использует команду checkout scm для получения самого последнего коммита из связанного репозитория Bitbucket.

Какой конкретный синтаксис необходимо добавить в Jenkinsfile, чтобы Jenkinsfile мог извлекать repositorySlug и projectKey из исходного репозитория в качестве переменных, а затем распечатывать эти переменные в виде вывода на консоль? * *


Образец Jenkinsfile:

Я попытался включить идеи из документации по этапу Jenkins Pipeline SCM в следующем примере Jenkinsfile, полученные журналы которого будут показаны ниже:

node {
    // Clean workspace before doing anything
    deleteDir()

    try {
        stage ('Clone') {
            def commitHash = checkout(scm).GIT_COMMIT
            sh "echo 'Commit hash is: ${commitHash}'"
            println commitHash

            def repName = checkout(scm).repoName
            sh "echo 'Repository Name is: ${repName}'"
            println repName

            def rep = checkout(scm).repo
            sh "echo 'Repository is: ${rep}'"
            println rep

            def nm = checkout(scm).name
            sh "echo 'Name is: ${nm}'"
            println nm
        }
    } catch (err) {
        currentBuild.result = 'FAILED'
        throw err
    }
}  


Токовый выход:

Вот вывод консоли, который генерирует Jenkins при запуске предыдущего Jenkinsfile:

General SCM<1s
echo 'Commit hash is: bd279b90ad9f78ee8abb4d4fbf2a621d42150dd3'— Shell Script<1s
bd279b90ad9f78ee8abb4d4fbf2a621d42150dd3— Print Message<1s
General SCM<1s
    > git rev-parse --is-inside-work-tree # timeout=10
    Fetching changes from the remote Git repository
     > git config remote.origin.url http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git # timeout=10
    Fetching without tags
    Fetching upstream changes from http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
     > git --version # timeout=10
    using GIT_ASKPASS to set credentials 
     > git fetch --no-tags --progress http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git +refs/heads/sample-issue-branch:refs/remotes/origin/sample-issue-branch
    Checking out Revision bd279b90ad9f78ee8abb4d4fbf2a621d42150dd3 (sample-issue-branch)
     > git config core.sparsecheckout # timeout=10
     > git checkout -f bd279b90ad9f78ee8abb4d4fbf2a621d42150dd3
    Commit message: "name"
    [Bitbucket] Notifying commit build result
echo 'Repository Name is: null'— Shell Script<1s
null— Print Message<1s
General SCM<1s
echo 'Repository is: null'— Shell Script<1s
null— Print Message<1s
General SCM<1s
echo 'Name is: null'— Shell Script<1s
null— Print Message<1s

Обратите внимание, что projectKey и repositorySlug доступны в журналах выше в виде:

http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git


Пересмотренный вопрос:

Для приведенных выше данных какой конкретный синтаксис необходимо добавить в файл Jenkinsfile, чтобы в полученных журналах Jenkins распечатывалось следующее:

The projectKey is: JSP
The repositorySlug is: jenkinsfile-simple-repo

1 Ответ

0 голосов
/ 01 мая 2018

Это должно сработать, но может быть более простой способ, о котором я сейчас не знаю.

По сути, он получает полный URL-адрес, возвращаемый плагином SCM, разделяет его на / и извлекает нужные вам части.

def repoUrl = checkout(scm).GIT_URL
def key = repoUrl.tokenize('/')[3]
def slug = repoUrl.tokenize('/')[4]
slug = slug.substring(0, slug.lastIndexOf('.')) //Remove .git
echo "The projectKey is: ${key}"
echo "The repositorySlug is: ${slug}" 
...