검색

3장. Git 리포지토리 호스팅 서비스 공급자와 함께 Pipeline을 코드로 사용

download PDF

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 명령줄 유틸리티를 설치했습니다.

프로세스

  • 다음 명령을 실행합니다.

    $ 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를 설치했습니다.

프로세스

  1. 관리자 화면에서 탐색 창을 사용하여 파이프라인 으로 이동합니다.
  2. 파이프라인 페이지에서 GitHub 앱 설정을 클릭합니다.
  3. GitHub 앱 이름을 입력합니다. 예를 들면 pipelines-ci-clustername-testui 입니다.
  4. 설정을 클릭합니다.
  5. 브라우저에 메시지가 표시되면 Git 암호를 입력합니다.
  6. Create GitHub App for <username >을 클릭합니다. 여기서 < username >은 GitHub 사용자 이름입니다.

검증

GitHub 앱을 성공적으로 생성하면 OpenShift Container Platform 웹 콘솔이 열리고 애플리케이션에 대한 세부 정보가 표시됩니다.

GitHub 앱 세부 정보

GitHub 앱의 세부 정보는 openShift-pipelines 네임스페이스에 시크릿으로 저장됩니다.

GitHub 애플리케이션과 연결된 이름, 링크 및 시크릿과 같은 세부 정보를 보려면 파이프라인으로 이동하여 GitHub 앱 보기를 클릭합니다.

3.1.3. 수동으로 GitHub 앱 구성 및 Pipeline의 시크릿 생성

GitHub 사용자 인터페이스를 사용하여 GitHub 앱을 만들 수 있습니다. 그러면 GitHub 앱에 연결하기 위해 Pipeline을 코드로 구성하는 시크릿을 생성해야 합니다.

추가 GitHub 앱을 지원하기 위해 추가 Pipeline을 코드 컨트롤러로 생성한 경우 추가 컨트롤러에 이 절차를 사용해야 합니다.

프로세스

  1. GitHub 계정에 로그인합니다.
  2. GitHub 메뉴에서 설정 개발자 설정 GitHub 앱을 선택한 다음 새 GitHub 앱 을 클릭합니다.
  3. 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
  4. 리포지토리 권한 섹션에서 다음 항목을 선택합니다.

    • 검사:읽기 및 쓰기
    • 내용:읽기 & 쓰기
    • 문제:읽기 & 쓰기
    • metadata:읽기 전용
    • pull request:Read & Write
  5. 조직 권한 섹션에서 다음 항목을 선택합니다.

    • 멤버:읽기 전용
    • 계획:읽기 전용
  6. 다음 이벤트를 구독합니다.

    • 실행 확인
    • 도구 모음 확인
    • 커밋 주석
    • 문제 주석
    • 가져오기 요청
    • push
  7. GitHub 앱 생성을 클릭합니다.
  8. 새로 생성된 GitHub 앱의 세부 정보 페이지에서 맨 위에 표시된 앱 ID 를 확인합니다.
  9. 개인 키 섹션에서 개인 키 생성 을 클릭하여 GitHub 앱의 개인 키를 자동으로 생성하고 다운로드합니다. 나중에 참조 및 사용을 위해 개인 키를 안전하게 저장합니다.
  10. Pipeline과 함께 사용할 리포지토리에 생성된 앱을 코드로 설치합니다.
  11. 다음 명령을 입력하여 새로 생성된 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
    1
    추가 GitHub 앱을 지원하기 위해 코드 컨트롤러로 추가 Pipeline을 생성하고 추가 컨트롤러의 앱을 구성하는 경우 pipelines-as-code-secret 을 컨트롤러의 secretName 매개변수에 구성한 이름으로 교체합니다.
    2
    GitHub 앱을 구성하는 동안 다운로드한 개인 키의 경로입니다.
    3
    GitHub 앱의 앱 ID 입니다.
    4
    GitHub 앱을 생성할 때 제공되는 Webhook 시크릿입니다.
참고

코드로서의 파이프라인은 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 토큰을 원래 리포지토리와 동일한 네임스페이스에 있는 리포지토리 목록으로 확장할 수 있습니다. 이 구성을 설정하는 데 관리자 권한이 필요하지 않습니다.

프로세스

  1. TektonConfig CR(사용자 정의 리소스)에서 pipelinesAsCode.settings 사양의 secret-github-app-token-scoped 매개변수를 false 로 설정합니다. 이 설정을 사용하면 GitHub 토큰의 범위를 글로벌 및 리포지토리 수준 구성에 나열된 프라이빗 및 공용 리포지토리로 지정할 수 있습니다.
  2. 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"
  3. 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/projectowner1/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/project3linda/project respositories로 지정됩니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.