Подтвердить что ты не робот

Git Переменные в плагине рабочего процесса Jenkins

Мне бы хотелось получить доступ к переменным git, таким как GIT_COMMIT и GIT_BRANCH, когда я проверил репозиторий из git дальше в потоке сборки. В настоящее время я не вижу доступной переменной для доступа к этим двум параметрам.

node {
    git git+ssh://git.com/myproject.git
    echo "$GIT_COMMIT - $BRANCH_NAME"
}

Доступны ли такие переменные, и в случае, где я их найду. Я не возражаю, если они доступны через некоторые переменные groovy или где угодно, просто чтобы я мог получить к ним доступ.

Возможно, мне не хватает навыков отладки в groovy, и это легко найти, но я просто не могу найти его с моими ограниченными навыками.

4b9b3361

Ответ 1

Хорошим способом исправить это пока является использование многоотводного конвейера, и было бы хорошо знать, что у Bitbucket и Github есть плагины в Jenkins, которые настраивают организацию и автоматически обнаруживают новые проекты. Это работает изначально с помощью env.GIT_BRANCH

Для идентификатора commit я бы предложил, что написал @mkobit выше.

Ответ 2

В зависимости от используемого плагина SCM, шаг checkout может возвращать дополнительную информацию о ревизии. Это было разрешено в JENKINS-26100. Он был выпущен в версии 2.6 плагина workflow-scm-step.

Например, используя плагин Git, вы можете сделать что-то вроде:

final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}

Это зависит от используемого вами плагина, поэтому исходный ответ может работать лучше для вас.


Оригинальный ответ

С выпуском версии "Плагины конвейеров и процессов" вы можете просто:

def gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()

Ответ 5

Вы можете определить свои задания (извлечение git info from last commit) внутри node для выполнения в очереди.

node {

  //Code checkout from SCM (here - `git`)
  checkout scm

  stage("GIT INFO"){
    echo ":::::::::::GIT_SHORT_COMMIT::::::::::::::::::::::::"

    GIT_SHORT_COMMIT = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
    //echo in jenkins console
    echo GIT_SHORT_COMMIT
    //wanted to send these info to build artifacts, append to any file
    sh("echo ${GIT_SHORT_COMMIT} > GIT_SHORT_COMMIT")

    //Similar proceed for other git info 
    echo ":::::::::::GIT_COMMITTER_EMAIL::::::::::::::::::::::::"

    GIT_COMMITTER_EMAIL = sh(returnStdout: true, script: "git show -s --pretty=%ae").trim()
    sh("echo ${GIT_COMMITTER_EMAIL} > GIT_COMMITTER_EMAIL-${GIT_COMMITTER_EMAIL}")



    echo ":::::::::::GIT_COMMITTER_NAME::::::::::::::::::::::::"

    GIT_COMMITTER_NAME = sh(returnStdout: true, script: "git show -s --pretty=%an").trim()
    sh("echo ${GIT_COMMITTER_NAME} > GIT_COMMITTER_NAME-${GIT_COMMITTER_NAME}")
  }

После завершения вашей работы в рабочей области вы увидите три дополнительных файла из вышеприведенной задачи:

. |-- [email protected] |-- GIT_COMMITTER_NAME-username |-- GIT_SHORT_COMMIT_<commit-short-ID-ef9e91c>

Ответ 6

В зависимости от требуемой информации существует очень простое решение: вернуть операцию "checkout scm": она предоставляет GIT_BRANCH, GIT_COMMIT, GIT_PREVIOUS_COMMIT, GIT_PREVIOUS_SUCCESSFUL_COMMIT и GIT_URL.

node { 
    stage ("Checkout") {

        scmInfo = checkout scm

        /*...*/
        echo "scm : ${scmInfo}"
        echo "${scmInfo.GIT_COMMIT}"


    }
}

Это выведет:

...
[Pipeline] echo
    scm : [GIT_BRANCH:my-branch, GIT_COMMIT:0123456789abcdefabcdef0123456789abcdef01, GIT_PREVIOUS_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_PREVIOUS_SUCCESSFUL_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_URL:http://my.si.te/my-repository.git]
[Pipeline] echo
    0123456789abcdefabcdef0123456789abcdef01
...

Подробнее здесь Шаги SCM Jenkins Pipeline