programing

마스터 푸시에서 Git 트리거를 사용하여 젠킨스 CI를 만들려면 어떻게 해야 합니까?

itmemos 2023. 7. 11. 21:35
반응형

마스터 푸시에서 Git 트리거를 사용하여 젠킨스 CI를 만들려면 어떻게 해야 합니까?

GitHub을 사용하는 프로젝트에 Jenkins-ci를 설정하려고 합니다.젠킨스에게 이미 적절한 플러그인을 설치했습니다.젠킨스가 프로젝트의 누군가가 마스터를 요청할 때만 빌드 스크립트를 실행하기를 원합니다.지금까지 저는 누군가가 어디든 밀고 나갈 때마다 빌드가 트리거되도록 설정할 수 있었지만, 그건 너무 광범위합니다.Git에 대한 사후 서비스 후크로 이 작업을 수행했습니다.

젠킨스 위키도 읽고 튜토리얼도 몇 개 읽었지만, 이 세부사항은...혹시 여론조사와 관련이 있나요?아니면 Git 쪽에서 작업을 해야 합니다. Git이 Jenkins를 트리거할 때만.master변경되었습니까?

이미 gezze의 논평에서 언급했듯이, 좋은 해결책이 있습니다(Polling must die: Git hook에서 젠킨스 빌드 트리거링).

  • Jenkins 작업의 빌드 트리거를 Poll SCM으로 설정하지만 예약은 지정하지 않습니다.

  • GitHub 사후 수신 트리거를 만들어 URL에 알립니다.

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
    
  • 지정한 Git 리포지토리를 폴링하는 모든 빌드가 트리거됩니다.

  • 그러나 폴링은 실제로 사용된 분기로 푸시된 항목이 있는지 확인합니다.

완벽하게 작동합니다.

0.5 버전부터 Jenkins용 GitHub 플러그인은 변경 사항이 GitHub에 푸시될 빌드를 트리거할있습니다.

원격으로 빌드를 트리거하는 대신 Jenkins 프로젝트 구성을 폴링으로 빌드를 트리거하도록 변경합니다.

Jenkins는 고정된 내부 또는 URL을 기준으로 폴링할 수 있습니다.후자는 해당 분기에 대한 변경사항이 없는 경우 빌드를 건너뛸 항목입니다.자세한 내용은 설명서에 나와 있습니다.기본적으로 "Poll SCM" 옵션을 선택하고 예약 섹션을 공백으로 둔 후 JENKS_URL/job/name/polling을 누르도록 원격 URL을 설정하기만 하면 됩니다.

한 젠킨스 환경이 는 다안젠킨환있다하다것나입니른는면전경스이한와는 다릅니다./build,/pollingURL에는 인증이 필요합니다.여기에 있는 지침에는 세부 사항이 나와 있습니다.예를 들어 GitHub Post-Receive 후크가 다음으로 이동합니다.username:apiToken@JENKIS_URL/job/name/polling.

GitLab의 경우 다음 단계를 수행합니다.

  1. 프로젝트 설정으로 이동 → 웹 훅
  2. Jenkins 프로젝트의 "Build Now" URL을 Push Event URL로 입력합니다.

    http://server.com/jenkins/job/project_name/build?delay=0sec를 들어 .

  3. Add Web Hook그리고 나서.test hook

그런 다음 저장소에 커밋할 때마다 웹 후크가 트리거되고 빌드가 생성됩니다.을 Jenkins로 설정해야 합니다.delete workspace before each build그래서 새로운 코드의 복사본을 얻을 수 있습니다.

Git와 관련이 없지만, 아래에서는 Jenkins 작업 구성을 Mercurial과 함께 자세히 도와드리겠습니다.그것은 비슷한 문제를 가진 다른 사람들을 도울 수도 있습니다.

  1. URL 트리거 플러그인 설치
  2. 하여 "작업 구성"을 선택합니다.Poll SCM선택.값을 다음으로 설정합니다.* * * * *
  3. 다음 옵션을 선택합니다.[URLTrigger] - Poll with a URL이제 수정 날짜 변경, URL 내용 등 몇 가지 옵션을 선택할 수 있습니다.
  4. 변경을 하고 첫 옵션 – " " " " URL " 을 합니다." 를 선택합니다.Monitor change of content
  5. 변경 내용을 저장합니다.

이제 테스트 체크인을 통해 Mercurial 저장소를 변경합니다.

이제 Jenkins 작업이 SCM 변경 사항을 탐지하여 실행되는지 확인합니다.Mercurial 변경으로 인해 빌드가 실행되면 텍스트가 표시됩니다.Started by an SCM change또는 수동으로 시작한 사용자입니다.

이것이 도움이 되기를 바랍니다.Git 커밋에서 Jenkins 빌드를 트리거하는 방법

Git가 제공하는 Git 후크를 사용하여 Jenkins 작업을 트리거하기 위해 컬을 사용하는 문제일 뿐입니다.

curl http://localhost:8080/job/someJob/build?delay=0sec할 수 . 서 젠스작실수있다습니행할킨업을,.someJob젠킨스의 직업 이름입니다.

숨겨진 .git 폴더에서 "hooks" 폴더를 검색합니다."post-commit.sample" 파일 이름을 "post-commit"로 변경합니다.메모장에서 파일을 열고 ": 없음" 줄을 제거한 후 위의 명령을 붙여넣습니다.

바로 그겁니다.커밋을 수행할 때마다 Git는 파일에 정의된 사후 커밋 명령을 트리거합니다.

Git 명령/GUI에서 저장소로 코드를 푸시한 후 Jenkins와의 지속적인 통합:

  1. Jenkins에서 작업 이름만 사용하여 작업을 생성하고 프로젝트 유형을 선택합니다.클릭합니다.다음 페이지에는 추가할 내용이 없습니다. 클릭하십시오.
  2. 하여 "Git"로 이동합니다..git/hooks폴더를 누릅니다.
  3. hooks폴더에는 몇 개의 파일이 들어 있습니다.사후 커밋을 확인합니다.파일 확장명이 없는 "post-commit" 파일을 만듭니다.

    C:\work\test\\.git\hooks\post-commit
    
  4. 아래 명령을 사용하여 "post-commit" 파일을 편집합니다.로컬 소스 코드 후크 폴더에 있는지 확인합니다.

    curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
    

    예:

    curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
    

    5.

    userName 사용자 이름 젠킨스

    jobName입니다.

    apiTokenAPI 토큰을 가져오려면 Jenkins 사용자 페이지(인터페이스 오른쪽 상단)로 이동합니다.할 수 있습니다 "Show token" "Configure" " API token"

  5. 소스 코드를 변경하고 저장소에 코드를 커밋합니다.

  6. 당신의 직업,http://localhost:8080/jenkins/job/Gitcommittest/건물을 짓고 있어야 합니다.

분기를 지정해야 합니다.기본적으로 모든 것을 수신합니다.Hudson: Git and Maven 플러그인 블로그 게시물을 참조하십시오.

이를 위해 일반 Webhook 트리거 플러그인을 필터로 구성할 수 있습니다.

으로 구성된 경우

  • 는 이름의 .ref 표현식 리고표현그$.ref.
  • 가 텍트가인 $ref 필터 은 예를 들어 표 같 터 필 은^refs/heads/master$.

그러면 그 작업은 모든 푸시에서 트리거됩니다.master투표 없음.

실제로 빌드를 수행하기 위해 웹 훅의 더 많은 값을 원할 수 있습니다.JSONPath를 사용하여 변수를 추가하면 필요한 항목을 선택할 수 있습니다.

여기에는 몇 가지 사용 사례가 있습니다. https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd

현재 조직에서는 스냅샷 빌드를 생성하기 위해 마스터에서 이 작업을 수행하지 않고 개발 및 릴리스/브랜치에서 모두 수행합니다(Git Flow 사용).

다중 분기 파이프라인을 사용할 때 Jenkins 파일에서 when{} 구문을 사용하여 이 작업을 수행합니다.

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

자세한 내용은 다음 블로그 게시물에 나와 있습니다. https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/ #http-http://-

위의 답변은 맞지만, 저는 단순함 때문에 여기에 새로 온 그들에게 말하고 있습니다.

특히 파이프라인에 대한 빌드 트리거를 설정하는 경우:

두 개의 Github 분기, 즉 1.master, 2.dev 및 Jenkins 파일(파이프라인 스크립트가 작성되는 곳)이 있고 각 분기에서 다른 파일을 사용할 수 있다고 가정합니다.

새 파이프라인 프로젝트 구성(dev 분기용)

##1. git-plugin cron 기반 접근법과의 코드 통합 필수 git 플러그인을 설치하고 사용자 이름과 이메일로 구성해야 합니다.

  1. 일반 섹션.확인란 - '이 프로젝트는 매개 변수화되었습니다'를 선택하고 Name-SBLANCH 기본값 - 'refs/remotes/origin/dev'를 추가합니다.
  2. 빌드 트리거 섹션" - 'Poll SCM' 확인란을 선택하고 커밋을 확인하는 데 필요한 대로 예약합니다(예: '*/1 * * **'). 매 분마다 확인합니다.
  3. 파이프라인 정의 섹션입니다.- SCM에서 파이프라인 스크립트 선택 - > git 선택 -> addRepository URL -> git 자격 증명 추가 -> 고급 선택 -> 이름 - 오리진 추가, RefSpec - '+refs/heads/dev:refs/remotes/origin'(devithub 브랜치) - > 빌드할 분기 - ${SBRANCH}(1 지점의 매개 변수 이름)를 선택합니다--> 스크립트 경로—> Jenkins 파일—> Lightweight 체크아웃 선택 취소
  4. 적용—> 저장

##2. 코드 통합: github-pluginwebhook 접근법 필수 구성 요소 Github 플러그인을 설치하고 Github 서버를 구성해야 하며, 다음 구성을 고려하지 않을 경우 연결을 테스트해야 합니다.

Jenkins에 대한 계정으로 Github 플러그인 구성

GitHub 섹션 API URL이 없는 경우 GitHub 서버 추가: https://api.github.com 자격 증명:개인 액세스 토큰 값이 있는 비밀 텍스트 추가(추가 버튼: 유형 선택 비밀 텍스트)(Github 계정에서 생성 -> 설정 -> 개발자 설정 -> 개인 액세스 토큰 -> 토큰 추가 -> 검사 범위 -> 토큰 복사)연결 테스트—> Github 계정에 연결되어 있는지 확인 후크 관리를 사용하여 확인란을 선택합니다. 미리 '공유 비밀'에 대한 이전 자격 증명을 선택하십시오.

저장소에 웹 후크를 추가하지 않은 경우 다음에 의해 웹 훅을 추가합니다.

  1. Github Repository 설정으로 이동 --> webhook 추가 --> URL 추가
    http://Public_IP:Jenkins_PORT/github-webhook/
  2. 또는 Public_IP usingngrok가 없는 경우../ngrok http 80(jenkins_port 사용) 명령에서 공용 IP를 설치, 인증한 후 webhook 추가 -> URL http://Ngrok_IP/github-webhook/
  3. webhook 페이지에서 payload를 전달하여 테스트하고 200 상태를 확인합니다.

Github Pull 요청 플러그인이 있는 경우 게시된 Jenkins URL로도 구성합니다.

  1. 일반 섹션.확인란 - 'Github project' 프로젝트 URL 추가 - ('.git/'로 끝나는 github link)
  2. 일반 섹션.확인란 - '이 프로젝트는 매개 변수화되었습니다'를 선택하고 Name-SBLANCH 기본값 - 'refs/remotes/origin/dev'를 추가합니다.
  3. 트리거.섹션을 빌드합니다.확인란 - 'GitHubhook for GITSCM 폴링 트리거'를 선택합니다.
  4. 파이프라인 정의 섹션:- SCM에서 파이프라인 스크립트 선택 - > git 선택 - > addRepository URL - > git 자격 증명 추가 -> 고급 선택 - > 이름 - 오리진 추가, RefSpec - '+refs/heads/dev:refs/remotes/dev'(devisgub 브랜치) - > 빌드할 분기 - ${SBRANCH}(1.st 지점의 매개 변수 이름)를 선택합니다--> 스크립트 경로—> Jenkins 파일—> Lightweight 체크아웃 선택 취소
  5. 적용—> 저장

pull 요청 작성기 플러그인 사용: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

정말 간단합니다.그런 다음 GitHub 웹 훅을 설정하여 빌드를 트리거할 수 있습니다.

로컬 Git 서버를 위한 나의 솔루션: 로컬 Git 서버 후크 디렉토리로 이동하여 기존 update.sample을 무시하고 다음과 같은 문자 그대로 "update"라는 이름의 새 파일을 만듭니다.

gituser@me:~/project.git/hooks$ pwd
/home/gituser/project.git/hooks
gituser@me:~/project.git/hooks$ cat update
#!/bin/sh
echo "XXX from  update file"
curl -u admin:11f778f9f2c4d1e237d60f479974e3dae9 -X POST http://localhost:8080/job/job4_pullsrc_buildcontainer/build?token=11f778f9f2c4d1e237d60f479974e3dae9

exit 0
gituser@me:~/project.git/hooks$ 

echo 문이 git push 결과 아래에 표시됩니다. 토큰은 Jenkins 작업 구성에서 가져올 수 있습니다. 찾아보십시오.파일 "update"가 호출되지 않으면 "sample" 확장명이 없는 동일한 이름의 다른 파일을 시도합니다.

그것만 있으면 됩니다.

  1. Jenkins 관리 / 시스템 / GitHub 서버 구성

  2. Jenkins 작업/git 인증 정보 및 분기 지정자(누름을 검색할 분기 지정)

enter image description here

  1. 깃허브의 웹 훅

저도 같은 문제가 있었습니다.그리고 이것이 나를 구했습니다.

페이로드 'ref' 태그에 따라 필터링하기 위해 젠킨스 파이프라인 작업에 선택적 필터가 설정됩니다.

enter image description here

그런 다음 'ref' 변수에 선택적 필터를 적용하여 마스터 분기만 허용

enter image description here

아니면 표현이 단순할 수도 있습니다.

심판/감독/감독/감독

이제 제 젠킨스 작업은 마스터하기로 한 약속이 있을 때만 트리거됩니다.

언급URL : https://stackoverflow.com/questions/5784329/how-can-i-make-jenkins-ci-with-git-trigger-on-pushes-to-master

반응형