Jenkins Git 플러그인 : 특정 태그를 빌드하는 방법?


120

Jenkins가 지정된 태그를 작성하는 데 문제가 있습니다. 태그는 매개 변수화 된 빌드의 일부이지만 해당 태그를 빌드하기 위해 이것을 git 플러그인에 전달하는 방법을 모릅니다. 이것은 내 하루 중 3 시간이 걸렸고 스택 오버플로에서 마스터에게 패배를 인정했습니다.


이것이 stackoverflow.com/questions/7157170/… 과 다르다는 의미 입니까? ( google.com/…의 세 번째 결과 ... )
VonC

1
"이것은 내 일 3 시간을 복용하고있다"- 나는 내 하루 3 시간마다 내가 :) 구글에서 찾을 수있는 링크를 포함하지 않았다 너무 게으른 아니에요
sksamuel

1
이 방법을 사용 하시겠습니까? git의 태그 지정이 확장되지 않는다는 것을 알고 있습니까? "쉘 실행"작업을 사용하여 실제로 원하는 태그 / 개정판을 확인하는 스크립트를 작성할 수 있습니까?
mpontillo

답변:


222

"빌드 할 분기"매개 변수를 사용하여이를 수행 할 수있었습니다.

Branch Specifier (blank for default): tags/[tag-name]

[태그 이름]을 태그 이름으로 바꿉니다.


5
더 이상 +1이없는 이유를 모르겠습니다. 그 erics-notes 블로그 항목은 지옥처럼 혼란 스럽습니다. 이것은 간단하고 훌륭하게 작동합니다. 감사!
Cody S

3
나를 위해 훌륭하게 일했습니다. 감사. 내 매개 변수 이름은 RELEASE_TAG이므로 분기 지정자 값으로 tags / $ {RELEASE_TAG}를 사용했습니다.
Wesley Womack

3
이 작업을 수행 할 수 없습니다. 어떤 이유로 태그를 확인할 수 없습니다. '오류 : 빌드 할 개정판을 찾을 수 없습니다. 이 작업에 대한 저장소 및 분기 구성을 확인하십시오. ' 태그 /3.0.1을 지정하고 * / tags / 3.0.1도 시도했습니다. 태그가 있는지 확인했습니다.
lostintranslation 2014

1
이 답변에서 제안한 것을 시도하면 저장소의 모든 폴링이 빌드를 트리거합니다. git 폴링 로그에는 "Last Built Revision"이 태그의 개정판이지만 "Latest remote head revision is"가 최신 HEAD. git 플러그인의 논리는 내 저장소에서 항상 동일하지 않으므로 새 빌드가 항상 트리거 되는이 두 개정판을 비교하는 것 같습니다 .
Louis

이것은 확실히 정답 일 것입니다. 그것은 저에게 효과적이며 매우 간단합니다. 나는 repo를 폴링하지 않기 때문에 여전히 그 문제가 있다고 생각합니다.
제레미

76

Jenkins CI v.1.555, Git Client 플러그인 v.1.6.4 및 Git 플러그인 2.0.4를 사용하여 이러한 답변 중 어느 것도 나에게 충분하지 않았습니다.

특정 고정 (즉, 매개 변수화되지 않은) 태그 하나에 대해 하나의 Git 저장소를 구축하는 작업을 원했습니다. 나는 Thilo가 인용 한 "build a Git tag"블로그 게시물 과 함께 다양한 답변의 솔루션을 조합해야 했습니다 .

  1. 다음을 사용하여 태그를 원격 저장소로 푸시하십시오. git push --tags
  2. 작업의 "Git 저장소"섹션에있는 "소스 코드 관리"제목 아래에서 "고급"을 클릭하십시오.
  3. Refspec 필드에 다음 텍스트를 추가합니다. +refs/tags/*:refs/remotes/origin/tags/*
  4. "Branches to build", "Branch specifier"아래에 */tags/<TAG_TO_BUILD>( <TAG_TO_BUILD>실제 태그 이름으로 대체 )를 입력합니다.

나를 위해 Refspec을 추가하는 것이 중요하다는 것이 밝혀졌습니다. 비워두면 git 저장소가 기본적으로 모든 원격 정보를 가져 오는 것처럼 보였지만 그럼에도 불구하고 Git 플러그인은 내 태그를 완전히 찾지 못했습니다. Refspec 필드에서 "get the remote tags"를 명시 적으로 지정한 경우에만 Git 플러그인이 내 태그를 식별하고 빌드 할 수있었습니다.

업데이트 2014년 5월 7일는 : 불행하게도,이 솔루션은 젠킨스 CI (v.1.555)와 라 à 힘내 저장소 푸시 알림 메커니즘에 대한 바람직하지 않은 부작용으로 오는가 젠킨스에 은닉은 webhook 언제 : 어떤 저장소에 지점이 업데이트됩니다 푸시에서 태그 빌드 작업도 다시 실행됩니다. 이로 인해 동일한 태그 작업을 반복해서 불필요한 재 구축이 많이 발생합니다. "작업 영역을 사용하여 강제 폴링"옵션을 사용하거나 사용하지 않고 작업을 구성하려고 시도했지만 아무 효과가없는 것 같습니다. Jenkins가 태그 작업에 불필요한 빌드를 만드는 것을 방지 할 수있는 유일한 방법은 Refspec 필드를 지우는 것입니다 (즉, +refs/tags/*:refs/remotes/origin/tags/*).

누구든지 더 우아한 해결책을 찾으면 업데이트 로이 답변을 편집하십시오. 예를 들어, refspec +refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>이 별표 가 아닌 특수한 경우라면 이런 일이 발생하지 않을 것이라고 생각 합니다. 그러나 지금은이 솔루션이 효과가 있으며 작업이 성공한 후 추가 Refspec을 제거하기 만하면됩니다.


4
refspec에 "다음 텍스트를 추가"하려면 ... refspec이 이전에 있었다면 +refs/heads/*:refs/remotes/origin/*이제 +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*. (저는 refspecs로 많이 작업하지 않았기 때문에이 필드가 공백으로 구분된다는 것을 배우기 위해 약간의 실험이 필요했습니다.)
driftcatcher

1
이 솔루션에 대한 추가 +1. 이전 솔루션은 나에게도 효과가 없었습니다.
whitespy9

16

Jenkins에게 Ref 이름으로 빌드하라고 말할 수 없습니까? 그렇다면 그것은

refs/tags/tag-name

Jenkins와 Hudson에 대해 내가 보는 모든 질문에서 TeamCity로 전환하는 것이 좋습니다. TeamCity가 작동하도록 구성 파일을 편집 할 필요가 없습니다.


실제로 팀 시티를 제안한 사람은 당신이 처음이 아닙니다. 정말 그렇게 낫습니까? 나는 그것을 확인할 수 있습니다.
sksamuel apr

1
@monkjack 내 저장소 중 하나에서 동일한 구문을 시도했지만 작동했습니다. 현재 태그를 나열 할 수 있습니까? 이 태그를 원격 저장소에 구체적으로 푸시 git push --tags
하셨나요?

4
가까워지고 있습니다. 나는 태그를 원격으로 밀어 붙이지 않았지만 지금은 그렇습니다. 이제 refs / tags / harpercollins-1.0.16을 사용하여 젠킨스를 빌드 할 수 있지만 거기에 무엇을 넣었는지에 관계없이 항상 헤드를 구축해야한다고 주장합니다. 리모컨에 태그가 있음을 확인했으며 (gitweb에서 볼 수 있음) 해당 태그의 스냅 샷을 수행하면 모든 것이 제대로 있는지 확인합니다.
sksamuel

6
TeamCity는 독점적이므로 거의 쓸모가 없습니다.
속어

2
예, 무료 도구에서 상업용으로 전환하는 것이 올바른 선택입니다! jetbrains가 바퀴를 재발 명하고 새로운 버그 추적기를 만들 때 bugzilla에서 저것으로 전환하는 다른 사람들에게 제안 하시겠습니까?
m1ld

11

Jenkins 파이프 라인을 사용 중이고 특정 태그 (예 : TAG빌드 의 매개 변수) 를 체크 아웃하려는 경우 수행 할 수있는 작업은 다음과 같습니다.

stage('Checkout') {
  steps {
    checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: 'YOUR_GIT_REPO_URL.git', credentialsId: 'YOUR_GIT_CREDENTIALS_ID' ]], branches: [[name: 'refs/tags/${TAG}']]], poll: false
  }
}

9

최신 Jenkins (1.639 이상)에서는 다음을 수행 할 수 있습니다.

  1. 'Branches to build'필드에 태그 이름을 지정하기 만하면됩니다.
  2. 매개 변수화 된 빌드에서 매개 변수를 동일한 필드 '빌드 할 분기'즉 $ {Branch_to_build}에서 변수로 사용할 수 있습니다.
  3. 사용 가능한 모든 브랜치 및 태그를 나열하여 기능을 제공하는 Git 매개 변수 플러그인 을 설치할 수 있습니다 .

1
실제로 태그 이름을 입력하는 것만으로도 효과가있었습니다. git 플러그인의 문서에는 여전히 작동하지 않아야한다고 명시되어 있지만 : "<tagName> : 태그가 태그로 인식되지 않으므로 작동하지 않습니다. 대신 refs / tags / <tagName>을 사용하십시오."
Zitrax

이것은 Jenkins 1.532.3에서 나를 위해 일했으며, 1.0.1필드를 빌드 할 분기에 태그 버전 (예 :)을 지정했습니다 .
andre

9

나는 이와 같은 일을했고 그것은 작동했습니다.

Source Code Management

 Git    
    Repositories    


 Advance

Name: ref
Refspec : +refs/tags/*:refs/remotes/origin/tags/* 

 Branches to build  
 Branch Specifier (blank for 'any') : v0.9.5.2

여기에 이미지 설명 입력

Jenkins 로그는 태그에서 소스를 가져오고 있음을 확인했습니다.

버전 확인 0b4d6e810546663e931cccb45640583b596c24b9(v0.9.5.2)


이것은 모든 태그를 구축하는 데 좋습니다. 감사합니다! refspec고급 버튼을 클릭하여 추가하는 것이 트릭이었습니다.
styfle

9

Advanced-> Refspec 필드를 refs/tags/[your tag name]. 이것은 Refspec에 대한 다양한 다른 제안보다 간단 해 보이지만 저에게는 잘 작동했습니다.

업데이트 23 / 7 / 2014- 실제로 추가 테스트 후 예상대로 작동하지 않는 것으로 나타났습니다. HEAD 버전이 아직 체크 아웃중인 것 같습니다. 수락 된 답변으로이 작업을 취소하십시오. 이 스레드 (3 월 30 일) 에서 gotgenes 의 게시물을 따라 작업 솔루션을 얻었 습니다 . 내 작업이 SCM 폴링이 아닌 업스트림 작업에서 트리거되기 때문에 빌드의 불필요한 트리거링 게시물에서 언급 된 문제는 저에게 문제가되지 않았습니다.

업데이트 APR-2018- 이것은 한 사람에게 작동하며 Jenkins 문서에 동의한다는 의견에 유의하십시오.


이 답변이 게시 된 후 4 년이 지난 후 refs/tags/<tagname>Jenkins 문서에서 사용하는 것이 사용되어야 한다고 말하고 있으며 저에게 잘 작동 한다는 점에 주목하고 싶었 습니다. 아마도 플러그인 4 월 2018대로,이 ... 원래 게시물의 시점에서 버그가 있었지만 이다 정답.
evadeflow apr

내 이전 댓글 업데이트 : 실제로 refs/tags접두사를 생략하고 <tagname>. YMMV,하지만 ... 내 목적에 맞게 잘 작동합니다.
evadeflow apr

3

이 블로그 게시물에 자세히 설명 된 대로 Refspec 및 분기 지정자를 설정하여 Jenkins가 태그를 작성하도록 할 수있었습니다. .

또한 Refspec에서 참조 할 수 있도록 리포지토리 이름 (제 경우에는 "원본"으로)을 설정해야했습니다 (그렇지 않으면 임의로 생성 된 이름을 사용하게됩니다).


2

결국 내가 한 일은 :

  • 새 지점을 만들었습니다. jenkins-target 를 만들었고 젠킨스가
  • 내가 구축하려는 브랜치 또는 태그에서 병합 jenkins-target
  • 빌드가 작동하고 테스트가 통과되면 jenkins-target브랜치 에서 태그를 생성하기 만하면됩니다.

이것이 모든 사람에게 효과가 있을지 확신 할 수 없습니다. 제 프로젝트는 아주 작았고 태그와 물건이 너무 많지는 않았지만 쉽게 할 수 있습니다. refspecs와 매개 변수 및 물건을 엉망으로 만들 필요가 없습니다 :-)


저는이 매우 간단한 접근 방식을 좋아합니다.
zochhuana

2

예를 들어 1.2.3-alpha43와일드 카드를 사용하여 태그 유형도 빌드 할 수 있습니다 .

Refspec : +refs/tags/*:refs/remotes/origin/tags/*

분기 지정자 : origin/tags/1.2.3-alpha*

" 변경 사항이 GitHub에 푸시 될 때 빌드 "를 선택하여 푸시를 트리거 할 수도 있지만 "생성" 작업을 웹훅 에 추가 해야합니다.


1

Jenkins에서 "Build with parameters"옵션을 사용하는 답변을 보지 못했기 때문에 여기에 2 센트를 추가합니다.

여기에서는 starwars_api 프로젝트에 Jenkins CI 브라우저 콘솔을 사용하고 있으며 refs / tags / tag-name 값으로 "Build with parameters"를 사용하여 직접 빌드 할 수있었습니다.

  1. "매개 변수로 작성"옵션을 선택합니다.
  2. 상자에 "refs / tags / tag_142"로 값을 추가합니다 (예 : tag_name = tag_142).

참조 태그 이름으로 빌드

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.