3장. Git 리포지토리 호스팅 서비스 공급자와 함께 Pipeline을 코드로 사용
Pipeline을 코드로 설치한 후 클러스터 관리자는 Git 리포지토리 호스팅 서비스 공급자를 구성할 수 있습니다. 현재 다음 서비스가 지원됩니다.
- GitHub App
- 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을 가리키는지 확인합니다.
Pipeline용 GitHub 앱을 코드로 설정하는 방법은 다음 세 가지가 있습니다.
-
tkn
명령줄 유틸리티를 사용합니다. - 웹 콘솔의 관리자 화면을 사용합니다.
- GitHub에서 수동으로 앱을 설정한 다음 코드로 Pipeline의 시크릿을 생성합니다.
기본적으로 Pipeline as Code는 하나의 GitHub 애플리케이션과 통신할 수 있습니다. 추가 Pipeline을 추가 GitHub 앱과 통신하도록 코드 컨트롤러로 구성한 경우 각 GitHub 앱을 별도로 구성합니다. 추가 컨트롤러의 GitHub 앱을 수동으로 설정해야 합니다.
3.1.1. 명령줄 인터페이스를 사용하여 GitHub 앱 구성
tkn
명령줄 유틸리티를 사용하여 GitHub 앱을 생성하고 Pipeline을 GitHub 앱의 코드 컨트롤러로 구성할 수 있습니다.
추가 GitHub 앱을 지원하기 위해 추가 Pipeline을 코드 컨트롤러로 생성한 경우 기본 컨트롤러에만 이 절차를 사용할 수 있습니다. 추가 컨트롤러의 GitHub 앱을 생성하려면 수동 절차를 사용합니다.
사전 요구 사항
- 클러스터 관리자로 OpenShift Container Platform 클러스터에 로그인되어 있습니다.
-
tkn
pac
프로세스
다음 명령을 실행합니다.
$ tkn pac bootstrap github-app
이 명령은 계정에서 표준 github.com API 끝점을 사용한다고 가정합니다. 예를 들어 GitHub Enterprise를 사용하는 경우 다른 GitHub API 끝점을 사용하는 경우 다음 예와 같이
--github-api-url
옵션을 사용하여 엔드포인트를 지정합니다.명령 예
$ tkn pac bootstrap github-app --github-api-url https://github.com/enterprises/example-enterprise
3.1.2. 관리자 화면에서 GitHub 앱 생성
클러스터 관리자는 OpenShift Container Platform 클러스터로 GitHub 앱을 구성하여 Pipeline을 코드로 사용할 수 있습니다. 이 구성을 사용하면 빌드 배포에 필요한 작업 세트를 실행할 수 있습니다.
추가 GitHub 앱을 지원하기 위해 추가 Pipeline을 코드 컨트롤러로 생성한 경우 기본 컨트롤러에만 이 절차를 사용할 수 있습니다. 추가 컨트롤러의 GitHub 앱을 생성하려면 수동 절차를 사용합니다.
사전 요구 사항
Operator Hub에서 Red Hat OpenShift Pipelines pipelines-1.15
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.3. 수동으로 GitHub 앱 구성 및 Pipeline의 시크릿 생성
GitHub 사용자 인터페이스를 사용하여 GitHub 앱을 만들 수 있습니다. 그러면 GitHub 앱에 연결하기 위해 Pipeline을 코드로 구성하는 시크릿을 생성해야 합니다.
추가 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}')
또는 추가 Pipeline에 대한 GitHub 앱을 코드 컨트롤러로 구성하려면 다음 예와 같이
pipelines-as-code-controller
를 구성한 컨트롤러 이름으로 교체합니다.명령 예
$ echo https://$(oc get route -n openshift-pipelines pac_controller_2 -o jsonpath='{.spec.host}')
Webhook 보안: 임의의 시크릿입니다. 다음 명령을 실행하여 보안을 생성할 수 있습니다.
$ openssl rand -hex 20
-
GitHub 애플리케이션 이름:
리포지토리 권한 섹션에서 다음 항목을 선택합니다.
-
검사:
읽기 및 쓰기
-
내용:
읽기 & 쓰기
-
문제:
읽기 & 쓰기
-
metadata:
읽기 전용
-
pull request:
Read & Write
-
검사:
조직 권한 섹션에서 다음 항목을 선택합니다.
-
멤버:
읽기 전용
-
계획:
읽기 전용
-
멤버:
다음 이벤트를 구독합니다.
- 실행 확인
- 도구 모음 확인
- 커밋 주석
- 문제 주석
- 가져오기 요청
- push
- GitHub 앱 생성을 클릭합니다.
- 새로 생성된 GitHub 앱의 세부 정보 페이지에서 맨 위에 표시된 앱 ID 를 확인합니다.
- 개인 키 섹션에서 개인 키 생성 을 클릭하여 GitHub 앱의 개인 키를 자동으로 생성하고 다운로드합니다. 나중에 참조 및 사용을 위해 개인 키를 안전하게 저장합니다.
- Pipeline과 함께 사용할 리포지토리에 생성된 앱을 코드로 설치합니다.
다음 명령을 입력하여 새로 생성된 GitHub 앱에 액세스하도록 Pipeline을 코드로 구성합니다.
$ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \ 1 --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 2 --from-literal github-application-id="<APP_ID>" \ 3 --from-literal webhook.secret="<WEBHOOK_SECRET>" 4
코드로서의 파이프라인은 GitHub Enterprise에서 설정된 헤더를 감지하고 GitHub Enterprise API 권한 부여 URL에 사용하여 GitHub Enterprise에서 자동으로 작동합니다.
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
매개변수에 추가 리포지토리를 지정합니다.apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: platforms: openshift: pipelinesAsCode: enable: true settings: secret-github-app-token-scoped: false secret-github-app-scope-extra-repos: "owner2/project2, owner3/project3"
GitHub 토큰 범위를 지정하는 리포지토리 수준 구성을 설정하려면 다음 예와 같이
Repository
CR의github_app_token_scope_repos
매개변수에 추가 리포지토리를 지정합니다.apiVersion: "pipelinesascode.tekton.dev/v1alpha1" kind: Repository metadata: name: test namespace: test-repo spec: url: "https://github.com/linda/project" settings: github_app_token_scope_repos: - "owner/project" - "owner1/project1"
이 예제에서
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
결과
생성된 GitHub 토큰을 사용하면 글로벌 및 리포지토리 수준 구성에 구성한 추가 리포지토리와 Pipeline as Code 페이로드 파일이 있는 원본 리포지토리에 액세스할 수 있습니다.
글로벌 구성 및 리포지토리 수준 구성을 모두 제공하는 경우 다음 예와 같이 두 구성의 모든 리포지토리에 범위가 지정됩니다.
TektonConfig
사용자 정의 리소스
apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: platforms: openshift: pipelinesAsCode: enable: true settings: secret-github-app-token-scoped: false secret-github-app-scope-extra-repos: "owner2/project2, owner3/project3"
리포지토리
사용자 정의 리소스
apiVersion: "pipelinesascode.tekton.dev/v1alpha1" kind: Repository metadata: name: test namespace: test-repo spec: url: "https://github.com/linda/project" settings: github_app_token_scope_repos: - "owner/project" - "owner1/project1"
GitHub 토큰의 범위는 owner/project
,owner1/project1
,owner2/project2
,owner3/project3
및 linda/project
respositories로 지정됩니다.