3장. Git 리포지토리 호스팅 서비스 공급자와 함께 Pipeline을 코드로 사용
Pipeline을 코드로 설치한 후 클러스터 관리자는 Git 리포지토리 호스팅 서비스 공급자를 구성할 수 있습니다. 현재 다음 서비스가 지원됩니다.
- GitHub 앱
- GitHub Webhook
- GitLab
- Bitbucket 서버
- Bitbucket 클라우드
GitHub App은 Pipeline과 함께 Code를 사용하는 데 권장되는 서비스입니다.
3.1. GitHub 앱에서 Pipeline을 코드로 사용 링크 복사링크가 클립보드에 복사되었습니다!
GitHub 앱은 Red Hat OpenShift Pipelines와의 통합 지점 역할을 하며 OpenShift Pipelines에 Git 기반 워크플로를 활용할 수 있습니다. 클러스터 관리자는 모든 클러스터 사용자에 대해 단일 GitHub 앱을 구성할 수 있습니다. GitHub Apps가 코드로 Pipeline에서 작동하도록 하려면 GitHub 앱의 Webhook가 GitHub 이벤트를 수신하는 코드 이벤트 리스너 경로(또는 수신 끝점)로 Pipeline을 가리키는지 확인합니다.
Git에서 가져오기를 사용하여 애플리케이션을 가져올 때 Git 리포지토리에 .tekton
디렉터리가 있는 경우 애플리케이션에 대한 pipelines-as-code
를 구성할 수 있습니다.
3.1.1. GitHub 앱 구성 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 다음 명령을 실행하여 GitHub 앱을 만들 수 있습니다.
tkn pac bootstrap github-app
$ tkn pac bootstrap github-app
tkn pac
CLI 플러그인이 설치되지 않은 경우 GitHub 앱을 수동으로 생성할 수 있습니다.
프로세스
Pipeline에 대해 수동으로 GitHub 앱을 생성하고 구성하려면 다음 단계를 수행합니다.
- GitHub 계정에 로그인합니다.
-
설정
개발자 설정 GitHub 앱으로 이동하여 새 GitHub 앱을 클릭합니다. GitHub 앱 양식에 다음 정보를 제공합니다.
-
GitHub 애플리케이션 이름:
OpenShift Pipelines
- 홈페이지 URL: OpenShift 콘솔 URL
Webhook URL: 코드 경로 또는 인그레스 URL로 파이프라인입니다. 다음 명령을 실행하여 찾을 수 있습니다.
echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')
$ echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Webhook 보안: 임의의 시크릿입니다. 다음 명령을 실행하여 보안을 생성할 수 있습니다.
openssl rand -hex 20
$ openssl rand -hex 20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
GitHub 애플리케이션 이름:
다음 리포지토리 권한을 선택합니다.
-
검사:
읽기 및 쓰기
-
내용:
읽기 & 쓰기
-
문제:
읽기 & 쓰기
-
metadata:
읽기 전용
-
pull request:
Read & Write
-
검사:
다음 조직 권한을 선택합니다.
-
멤버
: ReadOnly
-
계획:
읽기 전용
-
멤버
다음 사용자 권한을 선택합니다.
- 실행 확인
- 문제 주석
- 가져오기 요청
- push
- GitHub 앱 생성을 클릭합니다.
- 새로 생성된 GitHub 앱의 세부 정보 페이지에서 맨 위에 표시된 앱 ID 를 확인합니다.
- 개인 키 섹션에서 개인 키 생성 을 클릭하여 GitHub 앱의 개인 키를 자동으로 생성하고 다운로드합니다. 나중에 참조 및 사용을 위해 개인 키를 안전하게 저장합니다.
- Pipeline과 함께 사용할 리포지토리에 생성된 앱을 코드로 설치합니다.
3.1.2. GitHub 앱에 액세스하기 위해 Pipeline을 코드로 구성 링크 복사링크가 클립보드에 복사되었습니다!
새로 생성된 GitHub 앱에 액세스하도록 Pipeline을 코드로 구성하려면 다음 명령을 실행합니다.
oc -n openshift-pipelines create secret generic pipelines-as-code-secret \ --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ --from-literal github-application-id="<APP_ID>" \ --from-literal webhook.secret="<WEBHOOK_SECRET>"
$ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \
--from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \
--from-literal github-application-id="<APP_ID>" \
--from-literal webhook.secret="<WEBHOOK_SECRET>"
코드로서의 파이프라인은 GitHub Enterprise에서 설정된 헤더를 감지하고 GitHub Enterprise API 권한 부여 URL에 사용하여 GitHub Enterprise에서 자동으로 작동합니다.
3.1.3. 관리자 화면에서 GitHub 앱 생성 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 OpenShift Container Platform 클러스터로 GitHub 앱을 구성하여 Pipeline을 코드로 사용할 수 있습니다. 이 구성을 사용하면 빌드 배포에 필요한 작업 세트를 실행할 수 있습니다.
사전 요구 사항
Operator Hub에서 Red Hat OpenShift Pipelines pipelines-1.11
Operator를 설치했습니다.
프로세스
- 관리자 화면에서 탐색 창을 사용하여 파이프라인 으로 이동합니다.
- 파이프라인 페이지에서 GitHub 앱 설정을 클릭합니다.
-
GitHub 앱 이름을 입력합니다. 예를 들면
pipelines-ci-clustername-testui
입니다. - 설정을 클릭합니다.
- 브라우저에 메시지가 표시되면 Git 암호를 입력합니다.
-
Create GitHub App for <username >을 클릭합니다. 여기서 <
username
>은 GitHub 사용자 이름입니다.
검증
GitHub 앱을 성공적으로 생성하면 OpenShift Container Platform 웹 콘솔이 열리고 애플리케이션에 대한 세부 정보가 표시됩니다.
GitHub 앱의 세부 정보는 openShift-pipelines
네임스페이스에 시크릿으로 저장됩니다.
GitHub 애플리케이션과 연결된 이름, 링크 및 시크릿과 같은 세부 정보를 보려면 파이프라인으로 이동하여 GitHub 앱 보기를 클릭합니다.
3.1.4. GitHub 토큰을 추가 리포지토리로 범위 지정 링크 복사링크가 클립보드에 복사되었습니다!
코드로서의 파이프라인은 GitHub 앱을 사용하여 GitHub 액세스 토큰을 생성합니다. 코드로서의 파이프라인은 이 토큰을 사용하여 리포지토리에서 파이프라인 페이로드를 검색하고 CI/CD 프로세스가 GitHub 리포지토리와 상호 작용할 수 있도록 합니다.
기본적으로 액세스 토큰은 Pipeline이 파이프라인 정의를 검색하는 리포지토리에만 범위가 지정됩니다. 경우에 따라 토큰이 추가 리포지토리에 액세스할 수 있도록 할 수 있습니다. 예를 들어 .tekton/pr.yaml
파일 및 소스 페이로드가 있는 CI 리포지토리가 있을 수 있지만 pr.yaml
에 정의된 빌드 프로세스는 별도의 개인 CD 리포지토리에서 작업을 가져옵니다.
다음 두 가지 방법으로 GitHub 토큰의 범위를 확장할 수 있습니다.
- 글로벌 구성: GitHub 토큰을 다른 네임스페이스의 리포지토리 목록으로 확장할 수 있습니다. 이 구성을 설정하려면 관리 권한이 있어야 합니다.
- 리포지토리 수준 구성: GitHub 토큰을 원래 리포지토리와 동일한 네임스페이스에 있는 리포지토리 목록으로 확장할 수 있습니다. 이 구성을 설정하는 데 관리자 권한이 필요하지 않습니다.
프로세스
-
TektonConfig
CR(사용자 정의 리소스)에서pipelinesAsCode.settings
사양의secret-github-app-token-scoped
매개변수를false
로 설정합니다. 이 설정을 사용하면 GitHub 토큰의 범위를 글로벌 및 리포지토리 수준 구성에 나열된 프라이빗 및 공용 리포지토리로 지정할 수 있습니다. GitHub 토큰 범위를 지정하는 글로벌 구성을 설정하려면
pipelinesAsCode.settings
사양의TektonConfig
CR에서 다음 예와 같이secret-github-app-scope-extra-repos
매개변수에 추가 리포지토리를 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow GitHub 토큰 범위를 지정하는 리포지토리 수준 구성을 설정하려면 다음 예와 같이
Repository
CR의github_app_token_scope_repos
매개변수에 추가 리포지토리를 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제에서
Repository
사용자 지정 리소스는test-repo
네임스페이스의linda/project
리포지토리와 연결됩니다. 생성된 GitHub 토큰의 범위는owner/project
및owner1/project1
리포지토리와linda/project
리포지토리로 확장됩니다. 이러한 리포지토리는test-repo
네임스페이스에 있어야 합니다.참고추가 리포지토리는 공용 또는 개인 리포지토리일 수 있지만 리포지토리 리소스가 연결된 리포지토리와 동일한 네임스페이스에 있어야 합니다.
네임스페이스에 리포지토리가 없는 경우 GitHub 토큰의 범위가 오류 메시지와 함께 실패합니다.
failed to scope GitHub token as repo owner1/project1 does not exist in namespace test-repo
failed to scope GitHub token as repo owner1/project1 does not exist in namespace test-repo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
결과
생성된 GitHub 토큰을 사용하면 글로벌 및 리포지토리 수준 구성에 구성한 추가 리포지토리와 Pipeline as Code 페이로드 파일이 있는 원본 리포지토리에 액세스할 수 있습니다.
글로벌 구성 및 리포지토리 수준 구성을 모두 제공하는 경우 다음 예와 같이 두 구성의 모든 리포지토리에 범위가 지정됩니다.
TektonConfig
사용자 정의 리소스
리포지토리
사용자 정의 리소스
GitHub 토큰의 범위는 owner/project
,owner1/project1
,owner2/project2
,owner3/project3
및 linda/project
respositories로 지정됩니다.