programing

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

muds 2023. 9. 8. 21:48
반응형

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

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

"Branchs to Build" 매개 변수를 사용하여 이 작업을 수행할 수 있었습니다.

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

[tag-name]을(를) 태그 이름으로 바꿉니다.

Jenkins CI v.1.555, Git Client plugin v.1.6.4, Git plugin 2.0.4를 사용하는 저에게는 이러한 답변이 충분하지 않았습니다.

저는 하나의 특정 고정된(즉, 매개 변수가 없는) 태그에 대해 하나의 Git 저장소에 대해 구축할 작업을 원했습니다.Thilo가 인용 "Git tag 구축" 블로그 게시물과 다양한 답변을 통해 해결책을 짜내야 했습니다.

  1. 로 를 으로 태그를 원격 저장소로 푸시해야 합니다.git push --tags
  2. 작업의 "Git Repository" 섹션의 "Source Code Management" 제목 아래에서 "Advanced"를 클릭합니다.
  3. Refspec 필드에 다음 텍스트를 추가합니다.+refs/tags/*:refs/remotes/origin/tags/*
  4. " build"에서 는 " to build "Branch specifier"는 "Branch specifier"를 입력합니다.*/tags/<TAG_TO_BUILD>(파일))<TAG_TO_BUILD>실제 태그 이름을 입력합니다.

저를 위해 Refspec을 추가하는 것이 중요한 것으로 드러났습니다.기본적으로 git 저장소가 모든 원격 정보를 가져오는 것처럼 보였으나, 그럼에도 불구하고 git 플러그인은 완전히 내 태그를 찾지 못합니다.Refspec 필드에 명시적으로 "원격 태그 가져오기"를 지정했을 때에만 Git 플러그인이 내 태그에서 식별 및 빌드가 가능했습니다.

업데이트 2014-5-7: 불행하게도 이 솔루션은 Jenkins CI(v.1.555)와 Jenkins에 대한 Git 저장소 푸시 알림 메커니즘 àla Stash Webhook과 함께 제공됩니다. 저장소의 분기가 푸시에서 업데이트될 마다 태그 빌드 작업이 다시 실행됩니다.이로 인해 동일한 태그 작업을 반복적으로 불필요하게 재구축하는 일이 많이 발생합니다.작업 공간을 사용하여 폴링 적용 옵션을 사용하거나 사용하지 않고 작업을 구성해 보았지만 효과가 없는 것 같습니다.Jenkins가 태그 작업을 위해 불필요한 빌드를 수행하는 것을 방지할 수 있는 유일한 방법은 Refspec 필드를 지우는 것입니다(즉, 삭제).+refs/tags/*:refs/remotes/origin/tags/*).

더 우아한 해결책을 찾으신 분은 업데이트와 함께 이 답변을 편집해 주시기 바랍니다.를 들어,으로 ① ③ ④ Refspec ⑤ ⑤ ⑥ ⑦를로면다런지고을은과어이e다i고nfs',tert,et를cf,+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>별 따기보다는 말입니다.그러나 현재로서는 이 솔루션이 우리에게 효과가 있으며, 작업이 성공한 후에 추가 Refspec을 제거할 뿐입니다.

젠킨스에게 추천인 이름으로 짓으라고 할 수는 없나요?그렇다면.

refs/tags/tag-name

젠킨스와 허드슨에 대한 질문 중에서 팀 시티로 전환하는 것을 제안합니다.TeamCity를 작동시키기 위해 구성 파일을 편집할 필요가 없었습니다.

: Jenkins 을 하려면 (를 : a) TAG of build), 할 수 입니다: parameter of your build), 그리고과은을할수다할다수을r은e

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
  }
}

저는 이런 일을 했고 효과가 있었습니다.

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

enter image description here

Jenkins log 확인해보니 태그에서 소스를 가져온 것으로 확인되었습니다

0b4d6e810546663e931cccb45640583b596c24b9(v0.9.5.2)

를 Advanced->Refspec 를 했습니다 로 했습니다.refs/tags/[your tag name] 제안들에 에게는 잘 했습니다. Refspec에 대한 다른 여러 제안들에 비해 간단해 보이지만, 저에게는 잘 작동했습니다.

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

APR-2018 업데이트 - 댓글에서 이것은 한 사람에게 효과가 있으며 Jenkins 문서에 동의함을 유의합니다.

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

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

저는 이 블로그 포스트에 자세히 나와 있는 Refspec과 Branch Specifier를 설정하여 Jenkins에게 태그를 구축하도록 할 수 있었습니다.

Refspec에서 참조할 수 있도록 Repository Name(내 경우 "origin"으로 설정)도 설정해야 했습니다(그렇지 않으면 무작위로 생성된 이름을 사용할 것임이 분명합니다).

What I did in the end was:

  • 새 지점을 만들었습니다.jenkins-target, 젠킨스가 그걸 추적하도록 했어요
  • 원하는 지점이나 태그에서 병합합니다.jenkins-target
  • 일단 빌드가 작동하고 테스트 통과 등이 진행되면, 그냥 태그를 생성합니다.jenkins-target분점

I'm not sure if this will work for everyone, my project was quite small, not too many tags and stuff, but it's dead easy to do, dont have to mess around with refspecs and parameters and stuff :-)

예를 들어 태그 유형도 만들 수 있습니다.1.2.3-alpha43, 와일드카드 사용:

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

Branch specifier: origin/tags/1.2.3-alpha*

You can also tick "Build when a change is pushed to GitHub" to trigger the push, but you have to add "create" action to the webhook

Adding my two cents here since I have not seen an answer that uses the option "Build with parameters" in Jenkins.

Here I am using Jenkins CI browser console for project starwars_api and I was able to build directly with "Build with parameters" with value refs/tags/tag-name

  1. choose the "build with parameters" option.
  2. add value in the box as "refs/tags/tag_142" (tag_name = tag_142 for my example)

build with ref tag name

I found the best solution for this issue, You should use the GitSCM class instead of git class:

stages {
        stage('SCM') {
            steps {
                script {
                    wrap([$class: 'BuildUser']) {
                        currentBuild.displayName = "#${BUILD_NUMBER} - ${env.BUILD_USER} --> Build from branch ${BRANCH}"
                        slackSend channel: "#jenkins-build", color: "#02fe21", message: "${JOB_NAME} started by ${env.BUILD_USER} : #${BUILD_NUMBER} --> Build from ${BRANCH} branch with ${TAG} TAG"
                    }
                }
                checkout(
                        changelog: false, poll: false, scm: [
                        $class           : 'GitSCM',
                        branches         : [
                                [name: "$BRANCH"],
                        ],
                        userRemoteConfigs: [
                                [
                                        url: "<YOUR-GIT-URL>/${REPOSITORY}.git", credentialsId: '<YOUR-CREDENTIAL>'
                                ],
                        ],
                ])
            }
        }

For git-tag "v1.5.4" I used the follow regex

:(.v[\d.]{1,15}.)

Jenkis config

ReferenceURL : https://stackoverflow.com/questions/10195900/jenkins-git-plugin-how-to-build-specific-tag

반응형