В Гудзоне, как мне получить git commit ша текущей сборки? - PullRequest
33 голосов
/ 01 апреля 2011

Мы используем Hudson с git. У нас есть сервер сборки / тестирования, который компилирует наш проект, а затем сервер QA, на котором нам нужно развернуться.

Мы хотим получить текущий встроенный git commit sha и использовать его для получения соответствующего коммита для развертывания на нашем сервере QA.

К сожалению, похоже, что плагин hudon git не устанавливает git commit sha в переменных окружения (как, например, плагин svn в SVN_REVISION). Как мы можем обойти это?

Указатель / примеры будут полезны, поскольку я - нуд Хадсон.

Спасибо

Ответы [ 8 ]

52 голосов
/ 22 июня 2011

Я добавил в команду Пост сборки:

env

В журнале я нашел все переменные окружения.Вот некоторые из них:

BUILD_TAG=jenkins-Datagen-17
JOB_URL=http://jenkins:18080/job/Datagen/
USER=jenkins
GIT_COMMIT=ce9a3c1404e8c91be604088670e93434c4253f03
JENKINS_HOME=/var/lib/jenkins
JOB_NAME=Datagen
BUILD_ID=2011-06-22_15-26-06
GIT_BRANCH=master
EXECUTOR_NUMBER=0
NODE_LABELS=master
LOGNAME=jenkins
NODE_NAME=master
BUILD_NUMBER=17
4 голосов
/ 21 апреля 2015

Возможно, довольно поздно, но вы можете сделать это на Дженкинсе с помощью API:

https://jenkins-server/job/job-name/lastStableBuild/api/json

Это дает объект JSON, который вы можете анализировать. Вы также можете использовать опцию дерева, чтобы получить более точную строку JSON. Примерно так:

https://jenkins-server/job/job-name/lastStableBuild/api/json?tree=actions[lastBuiltRevision[branch[*]]]

Теперь вы можете использовать awk для анализа веток SHA1 и git.

3 голосов
/ 13 июня 2017

В задании Jenkin вы можете использовать команду

git describe --always

Это вернет первые 7 символов SHA

Привет

3 голосов
/ 01 апреля 2011

Вы можете добавить дополнительный шаг к своей работе в Hudson, опубликовав недавно созданный git commit во втором репо на сервере сборки / тестирования.
У этого второго репо может быть хук после получения, который автоматически передает коммит на сервер QA.

Если вам не нужен этот дополнительный уровень косвенности, тогда вам нужно иметь в своем дополнительном шаге команды git для запроса SHA1 HEAD: git describe или git rev-parse.
У вас есть другие варианты git в вопросе " Сохранение Git SHA1 при сборке с Hudson, аналогично тегу CVS_BRANCH для CVS. "

2 голосов
/ 08 июня 2017

Jenkins Версия: 2.46.2

Git Клиент: 2.4.5

Следующие GIT переменные доступны при запуске команды env из shell.

  • GIT_BRANCH
  • GIT_COMMIT
  • GIT_PREVIOUS_COMMIT
  • GIT_PREVIOUS_SUCCESSFUL_COMMIT
  • GIT_URL

Итак, чтобы вставить их обратно в переменные среды задания, добавьте слово env в раздел Script Content.

тл; др

Job > Configure > Build Environment > Inject environment variables to the build process > Script Content

Example

2 голосов
/ 12 апреля 2011

Это, по-видимому, невозможно в текущей версии плагина git.Вместо этого мы записываем текущий заголовок в файл и сохраняем его как артефакт.Позже мы можем свернуть его и получить идентификатор фиксации, соответствующий данной сборке.

1 голос
/ 28 января 2016

В исполняемой оболочке уже есть хорошее решение. Преимущество этого решения заключается в том, что вы можете сделать это на этапе сборки, используя сценарии, а не на этапе после сборки. Это объясняется ниже. Смотри https://stackoverflow.com/a/11837662/5842403

Фактически, вы можете получить доступ к информации до завершения фазы сборки, прочитав / проанализировав файл ../builds/$BUILD_NUMBER/changelog.xml внутри папки сборки. Этот файл создается при запуске фиксации SVN / GIT, а не в конце фазы сборки или фазы post_build. Это означает, что вы можете проанализировать его в начале фазы сборки того же задания с помощью скрипта и вставить данные в переменные env.

0 голосов
/ 09 января 2018

Вместо использования SVN_REVISION вы можете использовать $ GIT_COMMIT.поэтому env $ GIT_COMMIT будет принимать последний хеш коммита из Git с помощью Jenkins.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...