힘내 & 젠킨스 : 지점에서 최신 녹색 커밋 받기


10

우리는 방금 CI-CD를 추진하기 시작했으며 아기 발자국으로 두 시간마다 한 번씩 최신 녹색 개발로 스택을 업데이트하려고 시도합니다. 저는 Git / Bitbucket을 처음 접했고, Jenkins가 마지막 커밋을 담요 선언으로 사용하는 것이 아니라 Jenkins가 마지막 커밋을 녹색으로 표시하도록하는 방법을 알아낼 수 없습니다.

우리는이 알리미의 Bitbucket 빌드 상태 의 Bitbucket은 커밋 우리의 단위 테스트를 실행 한 후 녹색 추적 않도록, 플러그인을 설치합니다. 올바른 커밋이 선택되도록이 정보를 활용할 수있는 방법이 있습니까?

답변:


6

사용하려는 스크립팅 언어에 대해서는 언급하지 않았으므로 BitBucket API에 대한 HTTP 요청에 대해 구체적으로 이야기하겠습니다.

가정

첫 번째와 마지막 커밋이 빌드에 실패한 BitBucket Repository 가있는 경우 중간이 통과합니다.

  • 4768815 ❌
  • 49d7110 ✅
  • ❌ 토끼

커밋 목록 가져 오기

다음 API 메소드를 호출하여 커밋 목록을 얻을 수 있습니다.

https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits

  • owner: RichardSlater
  • repo_slug: 녹색 커밋 방지 개념

응답은 다음과 같습니다.

{
  "pagelen": 30,
  "values": [
    {
      "hash": "4768815fdc27abf4be17096e7c460f7f68f5d39b",
      "repository": { ... },
      "links": {
        ...
        "statuses": {
          "href": "https://api.bitbucket.org/2.0/repositories/RichardSlater/greencommitproofofconcept/commit/4768815fdc27abf4be17096e7c460f7f68f5d39b/statuses"
        }
      },
      "author": { ... },
      "parents": [ ... ],
      "date": "2017-04-10T11:38:18+00:00",
      "message": "README.md edited online with Bitbucket",
      "type": "commit"
    },
    {
      "hash": "49d7110b98616358d16055960a4abdf2926b890d",
      ...
    },
    {
      "hash": "42d357f1df7a7d7bcf1f10a9f3a5a40d85d5b11c",
      ...
    }
  ]
}

JSON을 구문 분석하고 응답을 반복하면 다음에서 상태를 추출 할 수 있습니다.

values[n].links.statuses.href

어디 n인덱스, 즉이다 0, 1또는 2위의 예에서이. 처음부터 이것을 구성하면 다음 형식이됩니다.

커밋에서 상태 목록 가져 오기

https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses"

  • owner: RichardSlater
  • repo_slug: 녹색 커밋 방지 개념
  • sha: 4768815fdc27abf4be17096e7c460f7f68f5d39b

참고 : 이것은 하이퍼 미디어 API 이므로 URL 변경 수 있으므로 처음부터 생성하지 않고 이전 응답의 링크를 사용하는 것이 좋습니다.

위 HTTP 요청의 응답은 다음과 같습니다.

{
  "pagelen": 10,
  "values": [
    {
      "key": "POC-01",
      "name": "Build #1",
      "repository": { ... },
      "url": "http://devops.stackexchange.com/q/809/397",
      "links": { ... },
      "refname": null,
      "state": "FAILED",
      "created_on": "2017-04-10T13:04:28.261734+00:00",
      "updated_on": "2017-04-10T13:04:28.261759+00:00",
      "type": "build",
      "description": "Changes by Richard Slater"
    }
  ],
  "page": 1,
  "size": 1
}

이 응답에서 다음을 state사용하여 추출 할 수 있습니다 .

values[n].state

또 어디는 n는 IS status- 많은 빌드에서 하나의 결과를 확약하는 경우 그들 중 많은 사람들이있을 수 있습니다.

관심있는 빌드의 상태 SUCCESSFUL가 답이면 즉시 sha커밋에 대한를 반환 할 수 있습니다 .

첫 번째 단계에서 모든 커밋을 반복합니다. 커밋이 부족하면 에 대한 호출에 포함 된 next페이지 link를 따르십시오 /commits.

완전한 흐름도

높은 수준에서 흐름은 다음과 같습니다.

흐름도

이것이 Hypermedia API 임을 잊지 마십시오. 가능하면 코드가 "추측"하려고하지 않고 API의 링크를 따라 가십시오.


1
그렇습니다 .SE에 대한 가장 긴 대답 일 것입니다.
Richard Slater

내가 그것을 원한다고 완전히 미쳤다고 생각하더라도 당신이 이것을 설명하는 데 걸린 시간에 감사드립니다. 허용
Alex

CI / CD 아키텍처에 대해 생각할 때는 완전히 제정신이 아니라 처음 몇 단계 만 수행하면됩니다.
Richard Slater

3

일반적인 Continuous Delivery / Deployment 파이프 라인에서는 다음이 발생합니다.

  1. 개발자가 하나 이상의 커밋을 푸시하거나 풀 요청이 병합됩니다.
  2. Jenkins는 자동으로 테스트를 빌드하고 실행합니다.
  3. 성공적인 Jenkins는 배포 패키지를 아티팩트 리포지토리에 게시합니다. 실패하면 아무것도 게시하지 않고 개발자에게 알립니다.
  4. 배포 자동화는 아티팩트 리포지토리의 패키지를 사용하여 배포합니다.

간단한 CI / CD 파이프 라인

목표는 방지하는 것입니다 구축 여러 번, 당신은 한 번 구축 번 소스의 솔루션을하고 배포 할 수 있습니다. Sonartype Nexus 에서 승인을 구현 하여 Dev → Test → UAT → Stage → Production과 같은 환경 승인 프로세스를 정의 할 수 있습니다 .

, 이전의 모든 내용을 읽은 후에도 소스 제어에서 최신 녹색 빌드를 얻으려면 다음 두 가지 기술 중 하나를 사용할 수 있습니다.

  1. Jenkins에 적절한 이름의 태그로 분기에 태그를 지정하십시오. 즉 , 최신 녹색 빌드를 원할 때 master-green대신 해당 태그 를 사용 master하십시오.
  2. BitBucket 커밋 을 사용하여 각 커밋 및 commit / {sha} / statuses 목록을 가져와 녹색 상태의 커밋을 찾습니다. 다른 솔루션으로이 솔루션을 확장했습니다 .

위의 방법을 사용하는 방법에 대한 자세한 내용을 원하면 후속 질문을 게시하십시오.

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