Как проверить репозиторий git с определенной версией в Jenkins

Я запускаю Jenkins с git, s3 и aws-codedeploy. для развертывания приложения сборки через s3 и запускает aws codedeploy для процесса пост-развертывания. Вышеупомянутая установка работает отлично.

У меня возникают проблемы всякий раз, когда я запускаю задание jenkins, моя работа все время клонирует репозиторий git, затем загружает zip-архив сборки / содержимого в s3, а затем aws-codedeploy развертывает полный zip-архив на моих серверах.

Но я хочу, чтобы при запуске jenkin job нужно было использовать конкретный клон git revision только не для полного содержимого, а для развертывания сборки только с этим.

Пожалуйста, помогите мне в решении вышеуказанной проблемы. заранее спасибо...


person Mitesh Jaiswal    schedule 22.04.2016    source источник


Ответы (4)


Поскольку git рассматривает любую ветвь как указатель на фиксацию, вы можете указать фиксацию в спецификаторе ветки.

РЕДАКТИРОВАТЬ (ответ на комментарий): То, что вы называете ветвью, на самом деле является просто указателем на конкретную фиксацию. В Git нет таких веток, как svn; таким образом, если вы хотите развернуть конкретную фиксацию, вы просто предоставляете ее.

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

person trainmaster    schedule 22.04.2016
comment
спасибо за ваш ответ, но я хочу создать конкретную фиксацию из ветки, как в спецификаторе ветки, который я дал * / master, но я хочу развернуть с конкретным идентификатором фиксации / ревизии. - person Mitesh Jaiswal; 25.04.2016
comment
Можете ли вы сделать это в конвейере? Я попытался предоставить полную версию sha и продолжаю получать никаких исправлений. Я думаю, что плагин GitScm просто извлекает ссылки для тегов / веток и не поддерживает все идентификаторы фиксации, хотя его javadoc говорит, что он может это сделать. - person Peter Kahn; 07.07.2017
comment
На самом деле я не пробовал, но это должно быть возможно. У вас есть какой-нибудь фрагмент кода, который вы пробовали? - person trainmaster; 24.08.2017
comment
@PeterKahn Вам необходимо указать действительный refspec, иначе Jenkins попытается использовать строку параметра, не расширяя ее, и это не удастся. Укажите что-нибудь допустимое, например `+ refs / Heads / master: refs / remotes / origin / master` для refspec (в разделе Advanced), а затем добавьте расширенное поведение клонирования в разделе Additional Behaviors и проверьте параметр Honor refspec при первоначальном клонировании. Затем Дженкинс выполнит git fetch с действительным refspec, а затем выполнит проверку с расширенным значением параметра. - person Ronald Holshausen; 05.10.2018

В Pre Steps добавьте этот сценарий под Execute shell:

# update the local git repository
git fetch 

# pull the desired branch
git pull origin <branch>

# checkout the specific commit you want.
git checkout <commit version>
person CodeWizard    schedule 22.04.2016

Я использую Jenkins Pipeline.

Я могу развернуть старую фиксацию (любую старую фиксацию), просто запустите проверку в образе докера gitlab перед развертыванием:

node {
stage('checkout') {
    checkout scm
}

docker.image('docker.io/gitlab/gitlab-ce').inside('-u root -e MAVEN_OPTS="-Duser.home=./"') {
    stage('git checkout') {
        sh 'git checkout ${REV_VER}'
        }
}

После этого я использую любой другой образ докера для сборки и развертывания.

Пример:

docker.image('openjdk:8').inside('-u root -e MAVEN_OPTS="-Duser.home=./"') {
        stage('build') {
            build process*
        }
        stage('deploy') {
            deploy process*
        }
}

REV_VER, это строковый параметр в конфигурации Jenkins.

Переменная по умолчанию - REV_VER (в конфигурации Jenkins) - Develop (моя рабочая ветка).

Но если вам нужно развернуть старую фиксацию, просто измените переменную в фиксации короткого идентификатора (например, «5221e28») в строке REV_VER, когда вы запустите «Сборка с параметрами»

p.s. OMG, надеюсь, вы понимаете, что я написал, потому что у меня очень плохой английский =)

Удачи

person Noah Nour    schedule 29.09.2017

Согласно документации плагина git:

ПРИМЕЧАНИЕ. Этап оформления заказа является предпочтительным методом оформления заказа SCM. Он обеспечивает значительно большую функциональность, чем шаг git.

Следуя вышеизложенному, я сделал версию, используя оформить заказ с учетными данными:

def branchDeployName = 'd5e043c80b51067c397ae12567005efde5b2517f' //commit ID
/*or simply*/
//def branchDeployName = '*/master' //branch name
checkout([
  $class: 'GitSCM', 
  branches: [[name: branchDeployName]], 
  doGenerateSubmoduleConfigurations: false, 
  extensions: [], 
  submoduleCfg: [], 
  userRemoteConfigs: [
    [credentialsId: 'ac3a0ae1-d3aa-1111-ac70-cba42f82e760', 
     url: 'https://bitbucket.org/user/repo.git']
  ]
])
person stawiu    schedule 30.04.2021