8.7.2. Webhook 트리거
Webhook 트리거를 사용하면 OpenShift Container Platform API 끝점에 요청을 전송하여 새 빌드를 트리거할 수 있습니다. GitHub,GitLab,Bitbucket 또는 Generic Webhook를 사용하여 이러한 트리거를 정의할 수 있습니다.
OpenShift Container Platform Webhook는 현재 각 Git 기반 소스 코드 관리 시스템(SCM)에 대해 유사한 버전의 푸시 이벤트만 지원합니다. 기타 모든 이벤트 유형은 무시됩니다.
내보내기 이벤트가 처리되면 이벤트 내부의 분기 참조가 해당 BuildConfig
의 분기 참조와 일치하는지 여부에 대한 확인이 수행됩니다. 일치하는 경우 웹 후크 이벤트에 명시된 정확한 커밋 참조가 OpenShift Container Platform 빌드에 대해 검사됩니다. 일치하지 않는 경우에는 빌드가 트리거되지 않습니다.
oc new-app
및 oc new-build
는 GitHub 및 Generic Webhook 트리거를 자동으로 생성하지만 필요한 다른 Webhook 트리거를 수동으로 추가해야 합니다( Trigger 설정참조).
모든 Webhook에 대해 WebHook
라는 키와 Webhook를 호출할 때 제공할 값이 되는 값으로 보안을 정의해야 합니다. 그런 다음 Webhook 정의에서 보안을 참조해야 합니다. 보안을 사용하면 URL의 고유성이 보장되어 다른 사용자가 빌드를 트리거할 수 없습니다. 키 값은 Webhook 호출 중에 제공된 보안과 비교됩니다.
Secret
Key
예를 들면 아래 예제에는 mysecret
이라는 보안에 대한 참조가 포함된 GitHub Webhook가 있습니다.
type: "GitHub" github: secretReference: name: "mysecret"
그런 다음 보안이 다음과 같이 정의됩니다. 보안 값은 Secret
오브젝트의 data
필드에 필요하므로 base64로 인코딩됩니다.
- kind: Secret apiVersion: v1 metadata: name: mysecret creationTimestamp: data: WebHookSecretKey: c2VjcmV0dmFsdWUx
8.7.2.1. GitHub Webhooks
GitHub Webhook 는 리포지토리가 업데이트될 때 GitHub에서 생성하는 호출을 처리합니다. 트리거를 정의할 때 보안을 지정해야 합니다. 이 시크릿
은 Webhook를 구성할 때 GitHub에 제공하는 URL의 일부입니다.
GitHub Webhook 정의의 예:
type: "GitHub" github: secretReference: name: "mysecret"
Webhook 트리거 구성에 사용되는 보안은 GitHub UI에서 Webhook를 구성할 때 표시되는 secret
필드와 동일하지 않습니다. 전자는 웹 후크 URL을 고유하고 예측하기 어렵게 만드는 것입니다. 후자는 X-octets-Signature
헤더 로 전송되는 본문의 vGPU hex 다이제스트를 만드는 데 사용되는 선택적 문자열 필드입니다.
페이로드 URL은 oc describe
명령에 의해 GitHub Webhook URL로 반환되고( Webhook URL 표시참조) 다음과 같이 구성됩니다.
https://<openshift_api_host:port>/oapi/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
GitHub Webhook를 구성하려면 다음을 수행합니다.
GitHub 리포지토리에서
BuildConfig
를 생성한 후 다음을 실행합니다.$ oc describe bc/<name-of-your-BuildConfig>
그러면 다음과 같은 Webhook GitHub URL이 생성됩니다.
<https://api.starter-us-east-1.openshift.com:443/oapi/v1/namespaces/nsname/buildconfigs/bcname/webhooks/<secret>/github>.
- GitHub 웹 콘솔에서 이 URL을 잘라내어 GitHub에 붙여넣습니다.
-
GitHub 리포지토리의 설정
Webhook에서 Webhook 추가 를 선택합니다. - URL 출력(위와 동일)을 Payload URL 필드에 붙여넣습니다.
-
GitHub의 기본
application/x-www-form-urlencoded
에서 콘텐츠 유형을application/json
으로 변경합니다. - Webhook 추가를 클릭합니다.
GitHub에서 Webhook가 성공적으로 구성되었음을 알리는 메시지가 표시됩니다.
이제 GitHub 리포지토리에 변경 사항을 내보낼 때마다 새 빌드가 자동으로 시작되고 빌드가 성공하면 새 배포가 시작됩니다.
Gogs는 GitHub와 동일한 Webhook 페이로드 형식을 지원합니다. 따라서 Gogs 서버를 사용하는 경우 BuildConfig
에 GitHub Webhook 트리거를 정의하고 Gogs 서버도 통해 트리거할 수 있습니다.
payload.json
과 같은 유효한 JSON 페이로드가 포함된 파일이 있으면 curl
을 통해 Webhook를 수동으로 트리거할 수 있습니다.
$ curl -H "X-GitHub-Event: push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/oapi/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
-k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.