구성


builds for Red Hat OpenShift 1.2

빌드 구성

Red Hat OpenShift Documentation Team

초록

이 문서에서는 빌드 구성에 대한 정보를 제공합니다.

1장. 빌드 구성

Build CR(사용자 정의 리소스)에서는 소스, 빌드 전략, 매개변수 값, 출력, 보존 매개변수 및 볼륨을 정의하여 빌드를 구성할 수 있습니다. 빌드 리소스는 네임스페이스 내에서 사용할 수 있습니다.

빌드를 구성하려면 Build 리소스 YAML 파일을 생성하여 OpenShift Container Platform 클러스터에 적용합니다.

1.1. 빌드의 구성 가능한 필드

Build 사용자 정의 리소스(CR)에서 다음 필드를 사용할 수 있습니다.

표 1.1. Build CR의 필드
필드presence설명

apiVersion

필수 항목

리소스의 API 버전을 지정합니다(예: shipwright.io/v1beta1 ).

kind

필수 항목

리소스 유형을 지정합니다(예: Build ).

메타데이터

필수 항목

Build 리소스의 이름과 같이 사용자 정의 리소스 정의 인스턴스를 식별하는 메타데이터를 나타냅니다.

spec.source

필수 항목

소스 코드의 위치(예: Git 리포지토리 또는 소스 번들 이미지)를 나타냅니다.

spec.strategy

필수 항목

Build 리소스에 사용되는 전략의 이름과 유형을 나타냅니다.

spec.output

필수 항목

생성된 이미지를 내보낼 위치를 나타냅니다.

spec.output.pushSecret

필수 항목

컨테이너 레지스트리에 액세스하기 위한 기존 시크릿을 나타냅니다.

spec.paramValues

선택 사항

빌드 전략에 정의된 매개변수 값을 지정하는 name-value 목록을 나타냅니다.

spec.timeout

선택 사항

사용자 정의 시간 초과를 정의합니다. 기본값은 10분입니다. BuildRun 리소스에서 이 필드 값을 덮어쓸 수 있습니다.

spec.output.annotations

선택 사항

출력 이미지에 주석을 달 때 사용할 수 있는 키-값 쌍 목록을 나타냅니다.

spec.output.labels

선택 사항

출력 이미지에 레이블을 지정하는 데 사용할 수 있는 키-값 쌍 목록을 나타냅니다.

spec.env

선택 사항

빌드 컨테이너에 전달할 수 있는 추가 환경 변수를 정의합니다. 사용 가능한 변수는 빌드 전략에서 사용하는 도구에 따라 달라집니다.

spec.retention.ttlAfterFailed

선택 사항

실패한 빌드 실행이 존재할 수 있는 기간을 지정합니다.

spec.retention.ttlAfterSucceeded

선택 사항

성공적인 빌드 실행이 존재할 수 있는 기간을 지정합니다.

spec.retention.failedLimit

선택 사항

존재할 수 있는 실패한 빌드 실행 수를 지정합니다.

spec.retention.succeededLimit

선택 사항

존재할 수 있는 성공적인 빌드 실행 수를 지정합니다.

1.2. 소스 정의

다음 필드의 값을 설정하여 빌드의 소스 세부 정보를 Build CR(사용자 정의 리소스)에서 구성할 수 있습니다.

  • source.git.url: Git 리포지토리에서 사용할 수 있는 이미지의 소스 위치를 정의합니다.
  • source.git.cloneSecret: 개인 Git 리포지토리의 SSH 개인 키가 포함된 네임스페이스의 시크릿을 참조합니다.
  • source.git.revision: 소스 Git 리포지토리에서 선택할 특정 버전을 정의합니다. 예를 들어 커밋, 태그 또는 분기 이름입니다. 이 필드는 기본적으로 Git 리포지토리 기본 분기입니다.
  • source.contextDir: 소스 코드가 루트 폴더에 없는 리포지토리의 컨텍스트 경로를 지정합니다.

빌드 컨트롤러에서 이미지를 가져오기 위해 지정한 Git 리포지토리가 있는지 자동으로 확인하지 않습니다. 검증해야 하는 경우 다음 예와 같이 build.shipwright.io/verify.repository 주석의 값을 true 로 설정합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
  annotations:
    build.shipwright.io/verify.repository: "true"
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-go
    contextDir: docker-build

빌드 컨트롤러는 다음 시나리오에서 Git 리포지토리가 있는지 확인합니다.

  • HTTP 또는 HTTPS 프로토콜과 함께 끝점 URL을 사용하는 경우
  • git@ 과 같은 SSH 프로토콜을 정의했지만 참조된 보안(예: source.git.cloneSecret )이 정의되어 있지 않은 경우입니다.

다음 예제에서는 다양한 소스 입력 세트를 사용하여 빌드를 구성하는 방법을 보여줍니다.

예: 인증 정보를 사용하여 빌드 구성

다음 예와 같이 인증 정보를 지정하여 소스로 빌드를 구성할 수 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-build
spec:
  source:
    git:
      url: https://github.com/sclorg/nodejs-ex
      cloneSecret: source-repository-credentials

예: 컨텍스트 경로를 사용하여 빌드 구성

다음 예와 같이 Git 리포지토리에서 컨텍스트 경로를 지정하는 소스로 빌드를 구성할 수 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-custom-context-dockerfile
spec:
  source:
    git:
      url: https://github.com/userjohn/npm-simple
    contextDir: docker-build

예: 태그를 사용하여 빌드 구성

다음 예와 같이 Git 리포지토리의 v.0.1.0 태그를 지정하는 소스로 빌드를 구성할 수 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-go
      revision: v0.1.0

예: 환경 변수를 사용하여 빌드 구성

다음 예와 같이 환경 변수를 지정하는 빌드를 구성할 수도 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-go
    contextDir: docker-build
  env:
    - name: <example_var_1>
      value: "<example_value_1>"
    - name: <example_var_2>
      value: "<example_value_2>"

1.3. 전략 정의

Build CR에서 빌드에 대한 전략을 구성할 수 있습니다. 다음 빌드 전략을 사용할 수 있습니다.

  • buildah
  • source-to-image

빌드 전략을 구성하려면 다음 예와 같이 Build CR에서 spec.strategy.namespec.strategy.kind 필드를 정의합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-build
spec:
  strategy:
    name: buildah
    kind: ClusterBuildStrategy

1.4. 빌드의 매개변수 값 정의

Build CR에서 빌드 전략 매개변수의 값을 지정할 수 있습니다. 매개변수 값을 지정하면 빌드 전략의 단계가 작동하는 방법을 제어할 수 있습니다. BuildRun 리소스의 값을 덮어쓸 수도 있습니다.

모든 매개변수의 경우 직접 또는 구성 맵 또는 시크릿의 참조 키를 사용하여 값을 지정해야 합니다.

참고

빌드 전략 단계에서 매개변수를 사용하면 구성 맵 및 시크릿 사용이 제한됩니다. 매개변수가 명령, 인수 또는 환경 변수에 사용되는 경우에만 구성 맵과 시크릿을 사용할 수 있습니다.

Build CR에서 paramValues 필드를 사용하는 경우 다음 시나리오를 사용하지 마십시오.

  • BuildStrategy CR에 정의된 spec.parameters 중 하나와 일치하지 않는 spec.paramValues 이름을 지정합니다.
  • shipwright 예약된 매개변수와 충돌하는 spec.paramValues 이름을 지정합니다. 이러한 매개변수에는 BUILDER_IMAGE,CONTEXT_DIRshp- 로 시작하는 모든 이름이 포함됩니다.

또한 Build CR에서 paramValues 필드를 정의하기 전에 전략의 내용을 이해해야 합니다.

1.4.1. 매개변수 값을 정의하는 구성 예

다음 예제에서는 빌드 전략에서 매개변수를 정의하고 Build CR을 사용하여 해당 매개변수에 값을 할당하는 방법을 보여줍니다. Build CR의 유형 배열 의 매개변수에 값을 할당할 수도 있습니다.

예: ClusterBuildStrategy CR의 매개변수 정의

다음 예제에서는 여러 매개변수를 정의하는 ClusterBuildStrategy CR을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: ClusterBuildStrategy
metadata:
  name: buildah
spec:
  parameters:
    - name: build-args
      description: "The values for the args in the Dockerfile. Values must be in the format KEY=VALUE."
      type: array
      defaults: []
    # ...
    - name: storage-driver
      description: "The storage driver to use, such as 'overlay' or 'vfs'."
      type: string
      default: "vfs"
# ...
steps:
# ...

예: Build CR에서 매개변수에 값 할당

위의 ClusterBuildStrategy CR은 storage-driver 매개변수를 정의하고 다음 예와 같이 Build CR에서 storage-driver 매개변수 값을 지정할 수 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: <your_build>
  namespace: <your_namespace>
spec:
  paramValues:
  - name: storage-driver
    value: "overlay"
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  output:
  # ...

예: 중앙에서 매개변수를 제어하기 위해 ConfigMap CR 생성

여러 빌드에 storage-driver 매개변수를 사용하고 중앙에서 사용을 제어하려면 다음 예와 같이 ConfigMap CR을 생성할 수 있습니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: buildah-configuration
  namespace: <your_namespace>
data:
  storage-driver: overlay

다음 예와 같이 생성된 ConfigMap CR을 Build CR에서 매개변수 값으로 사용할 수 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: <your_build>
  namespace: <your_namespace>
spec:
  paramValues:
  - name: storage-driver
    configMapValue:
      name: buildah-configuration
      key: storage-driver
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  output:
  # ...

예: Build CR에서 type 배열 의 매개변수에 값 할당

배열 형식의 매개 변수에 값을 할당할 수 있습니다. buildah 전략을 사용하는 경우 registries-search 매개변수를 정의하여 특정 레지스트리의 이미지를 검색할 수 있습니다. 다음 예제에서는 registries-search 배열 매개변수에 값을 할당하는 방법을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: <your_build>
  namespace: <your_namespace>
spec:
  paramValues:
  - name: storage-driver
    configMapValue:
      name: buildah-configuration
      key: storage-driver
  - name: registries-search
    values:
    - value: registry.redhat.io
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  output:
  # ...

예: Build CR에서 시크릿 참조

다음 예와 같이 registries-block 배열 매개변수의 시크릿을 참조할 수 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: <your_build>
  namespace: <your_namespace>
spec:
  paramValues:
  - name: storage-driver
    configMapValue:
      name: buildah-configuration
      key: storage-driver
  - name: registries-block
    values:
    - secretValue: 1
        name: registry-configuration
        key: reg-blocked
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  output:
  # ...
1
이 값은 보안을 참조합니다.

1.5. 빌더 또는 Docker 파일 정의

Build CR에서 spec.paramValues 필드를 사용하여 출력 이미지를 빌드하는 도구가 포함된 이미지를 지정할 수 있습니다. 다음 예제는 Build CR에서 Dockerfile 이미지를 지정합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-go
    contextDir: docker-build
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  paramValues:
  - name: dockerfile
    value: Dockerfile

다음 예와 같이 빌더 이미지를 Build CR의 source-to-image 빌드 전략의 일부로 사용할 수도 있습니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: s2i-nodejs-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-nodejs
    contextDir: source-build/
  strategy:
    name: source-to-image
    kind: ClusterBuildStrategy
  paramValues:
  - name: builder-image
    value: docker.io/centos/nodejs-10-centos7

1.6. 출력 정의

Build CR에서 이미지를 내보낼 출력 위치를 지정할 수 있습니다. 외부 프라이빗 레지스트리를 출력 위치로 사용하는 경우 이미지에 액세스할 시크릿을 지정해야 합니다. 출력 이미지에 대한 주석 및 레이블을 지정할 수도 있습니다.

참고

주석 또는 레이블을 지정하면 출력 이미지가 두 번 푸시됩니다. 첫 번째 푸시는 빌드 전략에서 가져오고 두 번째 푸시는 이미지 구성을 변경하여 주석과 레이블을 추가합니다.

다음 예제에서는 이미지가 푸시되는 퍼블릭 레지스트리를 정의합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: s2i-nodejs-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-nodejs
    contextDir: source-build/
  strategy:
    name: source-to-image
    kind: ClusterBuildStrategy
  paramValues:
  - name: builder-image
    value: docker.io/centos/nodejs-10-centos7
  output:
    image: image-registry.openshift-image-registry.svc:5000/build-examples/nodejs-ex

다음 예제에서는 이미지가 푸시되는 프라이빗 레지스트리를 정의합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: s2i-nodejs-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-nodejs
    contextDir: source-build/
  strategy:
    name: source-to-image
    kind: ClusterBuildStrategy
  paramValues:
  - name: builder-image
    value: docker.io/centos/nodejs-10-centos7
  output:
    image: us.icr.io/source-to-image-build/nodejs-ex
    pushSecret: icr-knbuild

다음 예제에서는 이미지에 대한 주석 및 레이블을 정의합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: s2i-nodejs-build
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-nodejs
    contextDir: source-build/
  strategy:
    name: source-to-image
    kind: ClusterBuildStrategy
  paramValues:
  - name: builder-image
    value: docker.io/centos/nodejs-10-centos7
  output:
    image: us.icr.io/source-to-image-build/nodejs-ex
    pushSecret: icr-knbuild
    annotations:
      "org.opencontainers.image.source": "https://github.com/org/repo"
      "org.opencontainers.image.url": "https://my-company.com/images"
    labels:
      "maintainer": "team@my-company.com"
      "description": "This is my cool image"

1.7. 빌드에 대한 보존 매개변수 정의

보존 매개변수는 다음과 같은 목적으로 정의할 수 있습니다.

  • 완료된 빌드 실행이 존재할 수 있는 기간을 지정하려면 다음을 수행합니다.
  • 빌드에 존재할 수 있는 성공 또는 실패한 빌드 실행 수를 지정하려면 다음을 수행합니다.

보존 매개 변수를 사용하면 BuildRun 인스턴스 또는 리소스를 자동으로 정리할 수 있습니다. Build CR에서 다음 보존 매개변수 값을 설정할 수 있습니다.

  • retention.succeededLimit: 빌드에 존재할 수 있는 성공한 빌드 실행 수를 정의합니다.
  • retention.failedLimit: 빌드에 존재할 수 있는 실패한 빌드 실행 수를 정의합니다.
  • retention.ttlAfterFailed: 실패한 빌드 실행이 존재할 수 있는 기간을 지정합니다.
  • retention.ttlAfterSucceeded: 성공적인 빌드 실행이 존재할 수 있는 기간을 지정합니다.

다음 예제에서는 Build CR에서 보존 매개변수를 사용하는 방법을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: build-retention-ttl
spec:
  source:
    git:
      url: "https://github.com/shipwright-io/sample-go"
    contextDir: docker-build
  strategy:
    kind: ClusterBuildStrategy
    name: buildah
  output:
  # ...
  retention:
    ttlAfterFailed: 30m
    ttlAfterSucceeded: 1h
    failedLimit: 10
    succeededLimit: 20
  # ...
참고

retention.failedLimitretention.succeededLimit 매개변수 값을 변경하면 빌드에 변경 사항이 적용되는 즉시 새 제한이 적용됩니다. 그러나 retention.ttlAfterFailedretention.ttlAfterSucceeded 매개변수 값을 변경하면 새 빌드 실행에서만 새 보존 기간이 적용됩니다. 이전 빌드는 이전 보존 기간을 따릅니다. BuildRun 및 Build CR 모두에 보존 기간이 정의된 경우 Build Run CR에 정의된 보존 기간이 우선 순위를 가져옵니다.

1.8. 빌드의 볼륨 정의

Build CR에서 볼륨을 정의할 수 있습니다. 정의된 볼륨은 BuildStrategy 리소스에 지정된 볼륨을 재정의합니다. 볼륨을 재정의하지 않으면 빌드 실행에 실패합니다.

다음 예제에서는 Build CR의 volumes 필드를 사용하는 방법을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: <build_name>
spec:
  source:
    git:
      url: https://github.com/example/url
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  paramValues:
  - name: dockerfile
    value: Dockerfile
  output:
    image: registry/namespace/image:latest
  volumes:
    - name: <your_volume_name>
      configMap:
        name: <your_configmap_name>

2장. 빌드 전략 구성

BuildStrategy 또는 ClusterBuildStrategy CR(사용자 정의 리소스)에서는 전략 매개변수, 시스템 매개변수, 단계 리소스 정의, 주석 및 볼륨을 정의하여 빌드 전략을 구성할 수 있습니다. BuildStrategy 리소스는 네임스페이스 내에서 사용할 수 있으며 ClusterBuildStrategy 리소스는 클러스터 전체에서 사용할 수 있습니다.

빌드 전략을 구성하려면 BuildStrategy 또는 ClusterBuildStrategy 리소스 YAML 파일을 생성하여 OpenShift Container Platform 클러스터에 적용합니다.

2.1. 전략 매개변수 정의

BuildStrategy 또는 ClusterBuildStrategy CR(사용자 정의 리소스)에서 전략 매개변수를 정의하고 Build 또는 Build Run CR에서 해당 매개변수 값을 설정하거나 수정할 수 있습니다. 빌드 전략을 생성할 때 빌드 시 전략 매개변수를 구성하거나 수정할 수도 있습니다.

전략에 대한 매개변수를 정의하기 전에 다음 사항을 고려하십시오.

  • 빌드 전략 CR의 spec.parameters 필드에 매개변수 목록을 정의합니다. 각 목록 항목에는 배열 유형에 대한 이름, 설명, 유형 및 선택적 기본값 또는 값이 포함되어 있습니다. 기본값이 설정되지 않은 경우 Build 또는 BuildRun CR에 값을 정의해야 합니다.
  • 빌드 전략의 spec.steps 필드에 문자열 또는 배열 유형의 매개변수를 정의합니다.
  • $(params.your-parameter-name) 구문을 사용하여 문자열 유형의 매개변수를 지정합니다. 전략을 참조하는 Build 또는 BuildRun CR에서 your-parameter-name 매개변수 값을 설정할 수 있습니다. 요구 사항에 따라 다음 문자열 매개변수를 정의할 수 있습니다.

    표 2.1. 문자열 매개변수
    매개변수설명

    image

    이 매개변수를 사용하여 golang:$(params.go-version)과 같은 사용자 정의 태그를 정의합니다.

    args

    이 매개변수를 사용하여 빌더 명령에 데이터 전달

    env

    이 매개변수를 사용하여 환경 변수의 값을 제공

  • $(params.your-array-parameter-name[*]) 구문을 사용하여 배열 유형의 매개변수를 지정합니다. 배열을 지정한 후 인수 또는 명령에서 사용할 수 있습니다. 배열의 각 항목에 대해 인수가 설정됩니다. 다음 예제에서는 빌드 전략의 spec.steps 필드에서 array 매개변수를 사용합니다.

    apiVersion: shipwright.io/v1beta1
    kind: ClusterBuildStrategy
    metadata:
      name: <cluster_build_strategy_name>
      # ...
    spec:
      parameters:
        - name: tool-args
          description: Parameters for the tool
          type: array
      steps:
        - name: a-step
          command:
            - some-tool
          args:
            - --tool-args
            - $(params.tool-args[*])
  • 매개변수 값을 단순한 문자열로 제공하거나 구성 맵 또는 시크릿의 키에 대한 참조로 제공합니다. 매개변수의 경우 명령에 정의된 경우에만 구성 맵 또는 시크릿 값을 사용할 수 있습니다. spec.steps 필드의args 또는 env 섹션.

2.2. 시스템 매개변수 정의

빌드 전략의 단계를 정의하여 시스템 정보에 액세스하거나 Build 또는 BuildRun CR(사용자 정의 리소스)에서 사용자 정의 정보를 정의할 때 시스템 매개변수를 사용할 수 있습니다. 빌드 실행 컨트롤러에서 런타임에 정의하므로 시스템 매개변수를 구성하거나 수정할 수 없습니다.

빌드 전략 정의에서 다음 시스템 매개변수를 정의할 수 있습니다.

표 2.2. 시스템 매개변수
매개변수설명

$(params.shp-source-root)

소스 코드가 포함된 디렉터리의 절대 경로를 나타냅니다.

$(params.shp-source-context)

소스 코드의 컨텍스트 디렉터리에 대한 절대 경로를 나타냅니다. Build CR에서 spec.source.contextDir 에 값을 지정하지 않으면 이 매개변수는 $(params.shp-source-root) 시스템 매개변수의 값을 사용합니다.

$(params.shp-output-image)

Build 또는 BuildRun CR의 spec.output.image 필드에 정의된 대로 내보낼 이미지의 URL을 나타냅니다.

2.3. 단계 리소스 정의

빌드 전략의 모든 단계에 대한 CPU, 메모리, 디스크 사용량과 같은 리소스 정의를 포함할 수 있습니다. 여러 단계가 있는 전략의 경우 다른 단계보다 많은 리소스가 필요할 수 있습니다. 전략 관리자는 각 단계에 적합한 리소스 값을 정의할 수 있습니다.

예를 들어 동일한 단계를 사용하여 전략을 설치할 수 있지만 클러스터에 다른 이름과 단계 리소스를 설치하여 사용자가 더 작거나 큰 리소스 요구 사항을 사용하여 빌드를 생성할 수 있습니다.

2.3.1. 다양한 리소스가 있는 전략

리소스에 대한 다양한 제한으로 동일한 전략의 여러 유형을 정의합니다. 다음 예제에서는 리소스에 정의된 소규모 및 중간 제한과 동일한 buildah 전략을 사용합니다. 이 예제에서는 전략 관리자가 단계 리소스 정의를 보다 효과적으로 제어할 수 있도록 제공합니다.

2.3.1.1. 작은 제한이 있는 Buildah 전략

다음 예와 같이 buildah 전략에 대한 작은 리소스 제한을 사용하여 spec.steps[].resources 필드를 정의합니다.

예: 작은 제한이 있는 buildah 전략

apiVersion: shipwright.io/v1beta1
kind: ClusterBuildStrategy
metadata:
  name: buildah-small
spec:
  steps:
    - name: build-and-push
      image: quay.io/containers/buildah:v1.31.0
      workingDir: $(params.shp-source-root)
      securityContext:
        capabilities:
          add:
          - "SETFCAP"
      command:
        - /bin/bash
      args:
        - -c
        - |
          set -euo pipefail
          # Parse parameters
        # ...
        # That's the separator between the shell script and its args
        - --
        - --context
        - $(params.shp-source-context)
        - --dockerfile
        - $(build.dockerfile)
        - --image
        - $(params.shp-output-image)
        - --build-args
        - $(params.build-args[*])
        - --registries-block
        - $(params.registries-block[*])
        - --registries-insecure
        - $(params.registries-insecure[*])
        - --registries-search
        - $(params.registries-search[*])
      resources:
        limits:
          cpu: 250m
          memory: 65Mi
        requests:
          cpu: 250m
          memory: 65Mi
  parameters:
    - name: build-args
      description: "The values for the args in the Dockerfile. Values must be in the format KEY=VALUE."
      type: array
      defaults: []
    # ...

2.3.1.2. 중간 제한이 있는 Buildah 전략

다음 예와 같이 buildah 전략에 대한 중간 리소스 제한을 사용하여 spec.steps[].resources 필드를 정의합니다.

예: 중간 제한이 있는 buildah 전략

apiVersion: shipwright.io/v1beta1
kind: ClusterBuildStrategy
metadata:
  name: buildah-medium
spec:
  steps:
    - name: build-and-push
      image: quay.io/containers/buildah:v1.31.0
      workingDir: $(params.shp-source-root)
      securityContext:
        capabilities:
          add:
          - "SETFCAP"
      command:
        - /bin/bash
      args:
        - -c
        - |
          set -euo pipefail
          # Parse parameters
        # ...
        # That's the separator between the shell script and its args
        - --
        - --context
        - $(params.shp-source-context)
        - --dockerfile
        - $(build.dockerfile)
        - --image
        - $(params.shp-output-image)
        - --build-args
        - $(params.build-args[*])
        - --registries-block
        - $(params.registries-block[*])
        - --registries-insecure
        - $(params.registries-insecure[*])
        - --registries-search
        - $(params.registries-search[*])
      resources:
        limits:
          cpu: 500m
          memory: 1Gi
        requests:
          cpu: 500m
          memory: 1Gi
  parameters:
    - name: build-args
      description: "The values for the args in the Dockerfile. Values must be in the format KEY=VALUE."
      type: array
      defaults: []
    # ...

전략에 대한 리소스 정의를 구성한 후 다음 예와 같이 Build CR의 전략을 참조해야 합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-medium
spec:
  source:
    git:
      url: https://github.com/shipwright-io/sample-go
    contextDir: docker-build
  strategy:
    name: buildah-medium
    kind: ClusterBuildStrategy
  # ...

2.3.2. Tekton 파이프라인의 리소스 관리

빌드 컨트롤러는 전략 단계를 실행하기 위해 Pod를 예약할 수 있도록 Tekton 파이프라인 컨트롤러에서 작동합니다. 런타임 시 빌드 컨트롤러에서 Tekton TaskRun 리소스를 생성하고 TaskRun 리소스는 특정 네임스페이스에 새 Pod를 생성합니다. 그런 다음 이 Pod는 모든 전략 단계를 순차적으로 실행하여 이미지를 빌드합니다.

2.4. 주석 정의

빌드 전략 또는 다른 Kubernetes 오브젝트에 대한 클러스터 빌드 전략에 대한 주석을 정의할 수 있습니다. 빌드 전략에서는 먼저 주석을 TaskRun 리소스에 전파합니다. 그런 다음 Tekton은 해당 항목을 Pod에 전파합니다.

다음과 같은 목적으로 주석을 사용할 수 있습니다.

  • Pod가 사용할 수 있는 네트워크 대역폭을 제한하기 위해 kubernetes.io/ingress-bandwidthkubernetes.io/egress-bandwidth 주석은 Kubernetes 네트워크 트래픽 셰이핑 기능에 정의됩니다.
  • 컨테이너의 AppArmor 프로필을 정의하려면 container.apparmor.security.beta.kubernetes.io/<container_name > 주석이 사용됩니다.

다음 예제에서는 빌드 전략에서 주석 사용을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: ClusterBuildStrategy
metadata:
  name: <cluster_build_strategy_name>
  annotations:
    container.apparmor.security.beta.kubernetes.io/step-build-and-push: unconfined
    container.seccomp.security.alpha.kubernetes.io/step-build-and-push: unconfined
spec:
  # ...

다음 주석은 전파되지 않습니다.

  • kubectl.kubernetes.io/last-applied-configuration
  • clusterbuildstrategy.shipwright.io/*
  • buildstrategy.shipwright.io/*
  • build.shipwright.io/*
  • buildrun.shipwright.io/*

전략 관리자는 정책 엔진을 사용하여 주석 사용을 추가로 제한할 수 있습니다.

2.5. 문자열 매개변수 보안 참조

문자열 매개변수는 BuildStrategy 또는 Cluster BuildStrategy CR(사용자 정의 리소스)에서 환경 변수, 인수 또는 이미지를 정의할 때 사용됩니다. 빌드 전략 단계에서는 $(params.your-parameter-name) 구문을 사용하여 문자열 매개변수를 참조할 수 있습니다.

참고

빌드 전략 단계에서 $(params.your-parameter-name) 구문을 사용하여 시스템 매개변수 및 전략 매개변수를 참조할 수도 있습니다.

Pod에서 모든 $(params.your-parameter-name) 변수가 실제 문자열로 교체됩니다. 그러나 인라인 스크립트를 사용하여 인수에서 string 매개변수를 참조할 때 주의해야 합니다. 예를 들어 스크립트로 정의된 인수로 매개변수 값을 안전하게 전달하려면 다음 접근 방법 중 하나를 선택할 수 있습니다.

  • 환경 변수 사용
  • 인수 사용

예: 문자열 매개변수를 환경 변수에 참조

문자열 매개 변수를 스크립트 내에서 직접 사용하는 대신 환경 변수에 전달할 수 있습니다. 환경 변수 인용을 사용하면 명령 삽입 취약점을 방지할 수 있습니다. buildah 와 같은 전략에 이 접근 방식을 사용할 수 있습니다. 다음 예제에서는 스크립트 내의 환경 변수를 사용하여 문자열 매개변수를 참조합니다.

apiVersion: shipwright.io/v1beta1
kind: BuildStrategy
metadata:
  name: sample-strategy
spec:
  parameters:
    - name: sample-parameter
      description: A sample parameter
      type: string
  steps:
    - name: sample-step
      env:
        - name: PARAM_SAMPLE_PARAMETER
          value: $(params.sample-parameter)
      command:
        - /bin/bash
      args:
        - -c
        - |
          set -euo pipefail

          some-tool --sample-argument "${PARAM_SAMPLE_PARAMETER}"

예: 문자열 매개변수를 인수로 참조

string 매개변수를 스크립트 내에 정의된 인수로 전달할 수 있습니다. 명령 주입에 대한 감시를 인용하는 적절한 쉘입니다. buildah 와 같은 전략에 이 접근 방식을 사용할 수 있습니다. 다음 예제에서는 스크립트 내에 정의된 인수를 사용하여 문자열 매개변수를 참조합니다.

apiVersion: shipwright.io/v1beta1
kind: BuildStrategy
metadata:
  name: sample-strategy
spec:
  parameters:
    - name: sample-parameter
      description: A sample parameter
      type: string
  steps:
    - name: sample-step
      command:
        - /bin/bash
      args:
        - -c
        - |
          set -euo pipefail

          SAMPLE_PARAMETER="$1"

          some-tool --sample-argument "${SAMPLE_PARAMETER}"
        - --
        - $(params.sample-parameter)

2.6. 시스템 결과 정의

빌드 전략에서 생성한 이미지의 크기와 다이제스트를 결과 파일 집합에 저장할 수 있습니다. BuildRun 리소스가 실패하는 경우 디버깅을 위해 오류 세부 정보를 저장할 수도 있습니다. BuildStrategy 또는 ClusterBuildStrategy CR에서 다음 결과 매개변수를 정의할 수 있습니다.

표 2.3. 결과 매개변수
매개변수설명

$(results.shp-image-digest.path)

이미지의 다이제스트를 저장하는 파일의 경로를 나타냅니다.

$(results.shp-image-size.path)

이미지의 압축 크기를 저장하는 파일의 경로를 나타냅니다.

$(results.shp-error-reason.path)

오류 이유를 저장하는 파일의 경로를 나타냅니다.

$(results.shp-error-message.path)

오류 메시지를 저장하는 파일의 경로를 나타냅니다.

다음 예제는 BuildRun CR의 .status.output 필드에 있는 이미지의 크기와 다이제스트를 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
# ...
status:
 # ...
  output:
    digest: sha256:07626e3c7fdd28d5328a8d6df8d29cd3da760c7f5e2070b534f9b880ed093a53
    size: 1989004
  # ...

다음 예제에서는 BuildRun CR의 .status.failure Details 필드에 있는 오류 이유 및 메시지를 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
# ...
status:
  # ...
  failureDetails:
    location:
      container: step-source-default
      pod: baran-build-buildrun-gzmv5-b7wbf-pod-bbpqr
    message: The source repository does not exist, or you have insufficient permission
      to access it.
    reason: GitRemotePrivate

2.7. 볼륨 및 볼륨 마운트 정의

빌드 전략에는 볼륨 및 볼륨 마운트 정의가 포함됩니다. 빌드 전략에 정의된 볼륨은 일반적인 volumeSource 유형을 모두 지원합니다. 빌드 단계는 볼륨 마운트를 생성하여 볼륨을 참조합니다.

참고

빌드 단계에 정의된 볼륨 마운트를 사용하면 BuildStrategy, Build 또는 Build Run 리소스에 정의된 볼륨에 액세스할 수 있습니다.

빌드 전략의 볼륨은 기본적으로 false 로 설정된 overridable 부울 플래그를 사용합니다. Build 또는 BuildRun 리소스가 BuildStrategy 리소스에 정의된 볼륨을 덮어쓰려고 하면 덮어쓸 수 있는 플래그의 기본값이 false 이므로 실패합니다.

다음 예제에서는 volumesvolumeMounts 필드를 정의하는 BuildStrategy 리소스를 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildStrategy
metadata:
  name: buildah
spec:
  steps:
    - name: build
      image: quay.io/containers/buildah:v1.23.3
      # ...
      volumeMounts:
        - name: varlibcontainers
          mountPath: /var/lib/containers
  volumes:
    - name: varlibcontainers
      overridable: true
      emptyDir: {}

3장. 빌드 실행 구성

BuildRun CR(사용자 정의 리소스)에서는 빌드 참조, 빌드 사양, 매개변수 값, 서비스 계정, 출력, 보존 매개변수 및 볼륨을 정의하여 빌드 실행을 구성할 수 있습니다. BuildRun 리소스는 네임스페이스 내에서 사용할 수 있습니다.

빌드 실행을 구성하려면 BuildRun 리소스 YAML 파일을 생성하여 OpenShift Container Platform 클러스터에 적용합니다.

3.1. 빌드 실행의 구성 가능한 필드

BuildRun CR(사용자 정의 리소스)에서 다음 필드를 사용할 수 있습니다.

표 3.1. BuildRun CR의 필드
필드presence설명

apiVersion

필수 항목

리소스의 API 버전을 지정합니다. 예를 들어 shipwright.io/v1beta1 입니다.

kind

필수 항목

리소스 유형을 지정합니다. 예를 들면 BuildRun 입니다.

메타데이터

필수 항목

사용자 지정 리소스 정의 인스턴스를 식별하는 메타데이터를 나타냅니다. 예를 들어 BuildRun 리소스의 이름입니다.

spec.build.name

선택 사항

사용할 기존 Build 리소스 인스턴스를 지정합니다. spec.build.spec 필드에 이 필드를 사용할 수 없습니다.

spec.build.spec

선택 사항

사용할 포함된 Build 리소스 인스턴스를 지정합니다. spec.build.name 필드에 이 필드를 사용할 수 없습니다.

spec.serviceAccount

선택 사항

이미지를 빌드할 때 사용할 서비스 계정을 나타냅니다.

spec.timeout

선택 사항

사용자 정의 시간 초과를 정의합니다. 이 필드 값은 Build 리소스에 정의된 spec.timeout 필드의 값을 덮어씁니다.

spec.paramValues

선택 사항

빌드 전략에 정의된 매개변수 값을 지정하는 name-value 목록을 나타냅니다. 매개변수 값은 Build 리소스에서 동일한 이름으로 정의된 매개변수 값을 덮어씁니다.

spec.output.image

선택 사항

생성된 이미지를 내보낼 사용자 지정 위치를 나타냅니다. 이 필드 값은 Build 리소스에 정의된 output.image 필드의 값을 덮어씁니다.

spec.output.pushSecret

선택 사항

컨테이너 레지스트리에 액세스할 수 있는 기존 시크릿을 나타냅니다. 이 시크릿은 Build 리소스에서 요청한 다른 시크릿과 함께 서비스 계정에 추가됩니다.

spec.env

선택 사항

빌드 컨테이너에 전달할 수 있는 추가 환경 변수를 정의합니다. 이 필드 값은 Build 리소스에 지정된 환경 변수를 재정의합니다. 사용 가능한 변수는 빌드 전략에서 사용하는 도구에 따라 달라집니다.

참고

spec.build.namespec.build.spec 필드는 함께 사용할 수 없으므로 동일한 CR에서 함께 사용할 수 없습니다.

3.2. 빌드 참조 정의

BuildRun 리소스에서 spec.build.name 필드를 구성하여 빌드할 이미지를 나타내는 Build 리소스를 참조할 수 있습니다. 다음 예제는 spec.build.name 필드를 구성하는 BuildRun CR을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  build:
    name: buildah-build

3.3. 빌드 사양 정의

spec.build.spec 필드를 사용하여 BuildRun 리소스에 전체 빌드 사양을 포함할 수 있습니다. 사양을 포함하면 전용 Build 사용자 정의 리소스를 생성하고 유지 관리하지 않고도 이미지를 빌드할 수 있습니다. 다음 예제는 spec.build.spec 필드를 구성하는 BuildRun CR을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: standalone-buildrun
spec:
   build:
    spec:
      source:
        git:
          url: https://github.com/shipwright-io/sample-go.git
        contextDir: source-build
      strategy:
        kind: ClusterBuildStrategy
        name: buildah
      output:
        image: <path_to_image>
참고

spec.build.namespec.build.spec 필드는 함께 사용할 수 없으므로 동일한 CR에서 함께 사용할 수 없습니다.

3.4. 빌드 실행에 대한 매개변수 값 정의

BuildRun CR에서 빌드 전략 매개변수의 값을 지정할 수 있습니다. 동일한 이름의 Build 리소스에도 정의된 매개변수 값을 제공한 경우 Build Run 리소스에 정의된 값이 우선합니다.

다음 예에서 BuildRun 리소스의 cache 매개변수 값은 Build 리소스에 정의된 cache 매개변수의 값을 재정의합니다.

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: <your_build>
  namespace: <your_namespace>
spec:
  paramValues:
  - name: cache
    value: disabled
  strategy:
    name: <your_strategy>
    kind: ClusterBuildStrategy
  source:
  # ...
  output:
  # ...
apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: <your_buildrun>
  namespace: <your_namespace>
spec:
  build:
    name: <your_build>
  paramValues:
  - name: cache
    value: registry

3.5. 서비스 계정 정의

BuildRun 리소스에서 서비스 계정을 정의할 수 있습니다. 서비스 계정은 다음 예와 같이 Build 리소스에서 참조하는 모든 보안을 호스팅합니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  build:
    name: buildah-build
  serviceAccount: pipeline 1
1
spec.serviceAccount 필드의 값을 ".generate" 로 설정하여 런타임 중에 서비스 계정을 생성할 수도 있습니다. 생성된 서비스 계정의 이름은 BuildRun 리소스의 이름과 일치합니다.
참고

서비스 계정을 정의하지 않으면 BuildRun 리소스는 네임스페이스에 있는 경우 파이프라인 서비스 계정을 사용합니다. 그렇지 않으면 BuildRun 리소스에서 기본 서비스 계정을 사용합니다.

3.6. 빌드 실행에 대한 보존 매개변수 정의

BuildRun 리소스에 완료된 빌드 실행이 존재할 수 있는 기간을 지정할 수 있습니다. 보존 매개 변수를 사용하면 BuildRun 인스턴스를 자동으로 정리할 수 있습니다. BuildRun CR에서 다음 보존 매개변수의 값을 설정할 수 있습니다.

  • retention.ttlAfterFailed: 실패한 빌드 실행이 존재할 수 있는 기간을 지정합니다.
  • retention.ttlAfterSucceeded: 성공적인 빌드 실행이 존재할 수 있는 기간을 지정합니다.

다음 예제에서는 BuildRun CR에서 보존 매개변수를 정의하는 방법을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buidrun-retention-ttl
spec:
  build:
    name: build-retention-ttl
  retention:
    ttlAfterFailed: 10m
    ttlAfterSucceeded: 10m
참고

BuildRunBuild CR 모두에 retention 매개변수를 정의한 경우 Build Run CR에 정의된 값이 Build CR에 정의된 보존 매개변수 값을 재정의합니다.

3.7. 빌드 실행에 대한 볼륨 정의

BuildRun CR에서 볼륨을 정의할 수 있습니다. 정의된 볼륨은 BuildStrategy 리소스에 지정된 볼륨을 재정의합니다. 볼륨을 재정의하지 않으면 빌드 실행에 실패합니다.

BuildBuildRun 리소스가 동일한 볼륨을 재정의하는 경우 BuildRun 리소스에 정의된 볼륨이 재정의에 사용됩니다.

다음 예제에서는 volumes 필드를 사용하는 BuildRun CR을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: <buildrun_name>
spec:
  build:
    name: <build_name>
  volumes:
    - name: <volume_name>
      configMap:
        name: <configmap_name>

3.8. 환경 변수 정의

필요에 따라 BuildRun CR에서 환경 변수를 사용할 수 있습니다. 다음 예제에서는 환경 변수를 정의하는 방법을 보여줍니다.

예: 환경 변수를 사용하여 BuildRun 리소스 정의

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  build:
    name: buildah-build
  env:
    - name: <example_var_1>
      value: "<example_value_1>"
    - name: <example_var_2>
      value: "<example_value_2>"

다음 예제에서는 Kubernetes Downward API를 사용하여 Pod를 환경 변수로 노출하는 BuildRun 리소스를 보여줍니다.

예: Pod를 환경 변수로 노출하도록 BuildRun 리소스 정의

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  build:
    name: buildah-build
  env:
    - name: <pod_name>
      valueFrom:
        fieldRef:
          fieldPath: metadata.name

다음 예제에서는 Kubernetes Downward API를 사용하여 컨테이너를 환경 변수로 노출하는 BuildRun 리소스를 보여줍니다.

예: 컨테이너를 환경 변수로 노출하도록 BuildRun 리소스 정의

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  build:
    name: buildah-build
  env:
    - name: MEMORY_LIMIT
      valueFrom:
        resourceFieldRef:
          containerName: <my_container>
          resource: limits.memory

3.9. 빌드 실행 상태

BuildRun 리소스는 다음 예와 같이 이미지 빌드 상태가 변경될 때마다 업데이트됩니다.

예: 알 수 없는 상태로 빌드

$ oc get buildrun buildah-buildrun-mp99r
NAME                    SUCCEEDED   REASON    STARTTIME   COMPLETIONTIME
buildah-buildrun-mp99r  Unknown     Unknown      1s

예: True 상태로 BuildRun

$ oc get buildrun buildah-buildrun-mp99r
NAME                   SUCCEEDED   REASON     STARTTIME   COMPLETIONTIME
buildah-buildrun-mp99r  True        Succeeded      29m       20m

BuildRun 리소스는 상태 관련 정보를 status.conditions 필드에 저장합니다. 예를 들어 Succeeded 유형의 조건은 리소스가 작업을 성공적으로 완료했음을 나타냅니다. status.conditions 필드에는 BuildRun 리소스의 status, reason, message와 같은 중요한 정보가 포함됩니다.

3.9.1. 빌드 실행 상태 설명

BuildRun CR(사용자 정의 리소스)은 이미지 빌드 프로세스 중에 다른 상태를 가질 수 있습니다. 다음 표에서는 빌드 실행의 다양한 상태에 대해 설명합니다.

표 3.2. 빌드 실행의 상태
상태원인설명

알 수 없음

보류 중

BuildRun 리소스는 Pod 상태가 Pending 임을 기다립니다.

알 수 없음

Running

BuildRun 리소스의 유효성이 검사되었으며 작업을 수행하기 시작했습니다.

알 수 없음

BuildRunCanceled

사용자가 빌드 실행을 취소하도록 요청했습니다. 이 요청은 빌드 실행 컨트롤러를 트리거하여 관련 작업 실행 취소를 요청합니다. 이 상태가 있는 경우에도 취소가 진행 중입니다.

True

succeeded

BuildRun 리소스의 Pod가 생성됩니다.

False

Failed

단계 중 하나에서 BuildRun 리소스가 실패합니다.

False

BuildRunTimeout

BuildRun 리소스의 실행이 시간 초과됩니다.

False

UnknownStrategyKind

Kind 필드에 정의된 전략 유형은 알 수 없습니다. 이러한 전략 유형인 ClusterBuildStrategyBuildStrategy 를 정의할 수 있습니다.

False

ClusterBuildStrategyNotFound

참조된 클러스터 범위 전략이 클러스터에서 찾을 수 없습니다.

False

BuildStrategyNotFound

참조된 네임스페이스 범위 전략이 클러스터에서 찾을 수 없습니다.

False

SetOwnerReferenceFailed

BuildRun 리소스에서 ownerReferences 필드를 관련 TaskRun 리소스로 설정하지 못했습니다.

False

TaskRunIsMissing

BuildRun 리소스와 관련된 TaskRun 리소스를 찾을 수 없습니다.

False

TaskRunGenerationFailed

TaskRun 사양 생성에 실패했습니다.

False

MissingParameterValues

기본값 없이 빌드 전략에 정의된 일부 매개변수에 대한 값을 제공하지 않았습니다. Build 또는 BuildRun CR에서 해당 매개변수의 값을 제공해야 합니다.

False

RestrictedParametersInUse

시스템 매개 변수의 값이 제공되었습니다. 이 값은 허용되지 않습니다.

False

UndefinedParameter

빌드 전략에 정의되지 않은 매개변수 값이 제공되었습니다.

False

WrongParameterValueType

잘못된 유형의 빌드 전략 매개변수에 대한 값이 제공되었습니다. 예를 들어 매개변수가 빌드 전략에서 배열 또는 문자열로 정의된 경우 그에 따라 값 집합 또는 직접 값을 제공해야 합니다.

False

InconsistentParameterValues

매개변수 값에는 값 ,configMapValue, secretValue 등 두 개 이상의 값이 포함되어 있습니다. 일관성을 유지하려면 언급된 값 중 하나만 제공해야 합니다.

False

EmptyArrayItemParameterValues

array 매개변수의 값에는 값 ,configMapValue, secretValue 라는 값이 포함되어 있지 않습니다. 언급된 값 중 하나만 null 배열 항목이 허용되지 않으므로 제공해야 합니다.

False

IncompleteConfigMapValueParameterValues

매개변수 값에는 이름 또는 value 필드가 비어 있는 configMapValue 값이 포함되어 있습니다. 네임스페이스의 기존 구성 맵 키를 가리키는 빈 필드를 지정해야 합니다.

False

IncompleteSecretValueParameterValues

매개변수 값에는 이름 또는 value 필드가 비어 있는 secretValue 값이 포함되어 있었습니다. 네임스페이스의 기존 시크릿 키를 가리키도록 빈 필드를 지정해야 합니다.

False

ServiceAccountNotFound

참조된 서비스 계정이 클러스터에서 찾을 수 없습니다.

False

BuildRegistrationFailed

BuildRun 리소스의 참조된 빌드는 Failed 상태입니다.

False

BuildNotFound

BuildRun 리소스에서 참조된 빌드를 찾을 수 없습니다.

False

BuildRunCanceled

BuildRun 및 관련 TaskRun 리소스가 성공적으로 취소되었습니다.

False

BuildRunNameInvalid

metadata.name 필드에 정의된 빌드 실행 이름이 유효하지 않습니다. BuildRun CR에서 빌드 실행 이름에 유효한 라벨 값을 제공해야 합니다.

False

BuildRunNoRefOrSpec

BuildRun 리소스에 spec.build.name 또는 spec.build.spec 필드가 정의되어 있지 않습니다.

False

BuildRunAmbiguousBuild

정의된 BuildRun 리소스는 spec.build.namespec.build.spec 필드를 모두 사용합니다. 매개 변수 중 하나만 한 번에 허용됩니다.

False

BuildRunBuildFieldOverrideForbidden

정의된 spec.build.name 필드는 허용되지 않는 spec.build.spec 필드와 함께 재정의를 사용합니다. spec.build.spec 필드를 사용하여 해당 값을 직접 지정합니다.

False

PodEvicted

빌드 실행 Pod가 실행 중인 노드에서 제거되었습니다.

3.9.2. 빌드 실행 실패

빌드 실행에 실패하면 BuildRun CR의 status.failure Details 필드를 확인하여 Pod 또는 컨테이너에서 오류가 발생한 정확한 지점을 확인할 수 있습니다. status.failureDetails 필드에는 오류 메시지와 실패 이유가 포함됩니다. 빌드 전략에 정의된 경우 메시지와 실패 이유만 표시됩니다.

다음 예제에서는 실패한 빌드 실행을 보여줍니다.

# ...
status:
  # ...
  failureDetails:
    location:
      container: step-source-default
      pod: baran-build-buildrun-gzmv5-b7wbf-pod-bbpqr
    message: The source repository does not exist, or you have insufficient permission
      to access it.
    reason: GitRemotePrivate
참고

status.failureDetails 필드는 Git과 관련된 모든 작업에 대한 오류 세부 정보도 제공합니다.

3.9.3. 단계적 결과 빌드 실행 상태가

BuildRun 리소스의 실행을 완료한 후 .status 필드에 빌드 실행 컨트롤러에서 생성된 단계에서 .status.taskResults 결과가 포함됩니다. 결과에는 이미지 다이제스트 또는 이미지 빌드에 사용되는 소스 코드의 커밋 SHA가 포함됩니다. BuildRun 리소스에서 .status.sources 필드에는 소스 단계 실행의 결과가 포함되어 있으며 .status.output 필드에는 출력 단계의 실행 결과가 포함됩니다.

다음 예제에서는 Git 소스에 대한 단계 결과가 있는 BuildRun 리소스를 보여줍니다.

예: Git 소스에 대한 단계 결과가 있는 BuildRun 리소스

# ...
status:
  buildSpec:
    # ...
  output:
    digest: sha256:07626e3c7fdd28d5328a8d6df8d29cd3da760c7f5e2070b534f9b880ed093a53
    size: 1989004
  sources:
  - name: default
    git:
      commitAuthor: xxx xxxxxx
      commitSha: f25822b85021d02059c9ac8a211ef3804ea8fdde
      branchName: main

다음 예제에서는 로컬 소스 코드에 대한 단계 결과가 있는 BuildRun 리소스를 보여줍니다.

예: 로컬 소스 코드에 대한 단계 결과가 있는 BuildRun 리소스

# ...
status:
  buildSpec:
    # ...
  output:
    digest: sha256:07626e3c7fdd28d5328a8d6df8d29cd3da760c7f5e2070b534f9b880ed093a53
    size: 1989004
  sources:
  - name: default
    bundle:
      digest: sha256:0f5e2070b534f9b880ed093a537626e3c7fdd28d5328a8d6df8d29cd3da760c7

참고

빌드 전략에 정의된 경우에만 출력 이미지의 다이제스트와 크기가 표시됩니다.

3.9.4. 빌드 스냅샷

각 빌드 실행 조정에 대해 기존 작업 실행이 해당 빌드 실행의 일부인 경우 BuildRun 리소스 상태의 buildSpec 필드가 업데이트됩니다.

이번 업데이트 중에 Build 리소스 스냅샷은 BuildRun 리소스의 status.buildSpec 필드를 생성하고 포함합니다. 이로 인해 buildSpec 필드에는 특정 이미지 빌드를 실행하는 데 사용된 원래 Build 사양의 정확한 사본이 포함되어 있습니다. 빌드 스냅샷을 사용하면 원래 Build 리소스 구성을 볼 수 있습니다.

3.10. Tekton 작업과의 빌드 실행 관계

BuildRun 리소스는 이미지 생성 작업을 Tekton TaskRun 리소스에 위임하여 작업이 완료되거나 작업에서 실패할 때까지 모든 단계를 실행합니다.

빌드 실행 조정 중에 빌드 실행 컨트롤러에서 새 TaskRun 리소스를 생성합니다. 컨트롤러는 TaskRun 리소스에서 빌드 실행 실행에 필요한 단계를 포함합니다. 포함된 단계는 빌드 전략에 정의됩니다.

3.11. 빌드 실행 취소

상태를 BuildRun Canceled 로 설정하여 활성 BuildRun 인스턴스를 취소할 수 있습니다. BuildRun 인스턴스를 취소하면 기본 TaskRun 리소스도 취소됨으로 표시됩니다.

다음 예제에서는 BuildRun 리소스에 대해 취소된 빌드 실행을 보여줍니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  # [...]
  state: "BuildRunCanceled"

3.12. 자동 빌드 실행 삭제

빌드 실행을 자동으로 삭제하려면 빌드 또는 build run 사양에 다음 보존 매개변수를 추가할 수 있습니다.

  • buildrun TTL 매개변수: 빌드가 완료된 후 정의된 기간 동안만 존재하는지 확인합니다.

    • buildrun.spec.retention.ttlAfterFailed: 지정된 시간이 경과하고 빌드 실행에 실패한 경우 빌드 실행이 삭제됩니다.
    • buildrun.spec.retention.ttlAfterSucceeded: 지정된 시간이 통과되고 빌드 실행에 성공하면 빌드 실행이 삭제됩니다.
  • Build TTL 매개변수: 빌드가 완료된 후 정의된 기간 동안만 빌드에 대해 실행되도록 합니다.

    • build.spec.retention.ttlAfterFailed: 지정된 시간이 경과하고 빌드 실행에 실패한 경우 빌드 실행이 삭제됩니다.
    • build.spec.retention.ttlAfterSucceeded: 지정된 시간이 경과하고 빌드에 성공한 경우 빌드 실행이 삭제됩니다.
  • 빌드 제한 매개변수: 빌드에 대해 제한된 수의 성공 또는 실패한 빌드 실행만 존재할 수 있는지 확인합니다.

    • build.spec.retention.succeededLimit: 빌드에 존재할 수 있는 성공한 빌드 실행 수를 정의합니다.
    • build.spec.retention.failedLimit: 빌드에 존재할 수 있는 실패한 빌드 실행 수를 정의합니다.

4장. 네트워크 제한 환경에서 빌드 사용

Red Hat OpenShift Pipelines Operator는 네트워크 제한 환경에서 프록시 환경 변수를 삽입할 수 있도록 지원합니다.

4.1. 클러스터 전체 프록시 확인

클러스터 관리자는 클러스터 전체 프록시 설정을 확인할 수 있습니다.

프로세스

  • 클러스터 전체 프록시가 올바르게 구성되었는지 확인하려면 다음 명령을 실행합니다.

    $ oc describe proxy/cluster

    cluster proxy 오브젝트는 프록시 서버 및 인증서 정보를 표시합니다.

4.2. 프록시 환경 변수 확인

클러스터 관리자는 환경 변수를 확인하여 OpenShift Container Platform 클러스터에서 Red Hat OpenShift의 빌드에 프록시 설정이 올바르게 구성되었는지 확인할 수 있습니다.

프로세스

  • 환경 변수를 확인하려면 다음 명령을 실행합니다.

    $ oc set env deployment/openshift-builds-operator --list -n openshift-builds | grep PROXY

    다음 예제 출력에는 HTTP_PROXY,HTTPS_PROXY, NO_PROXY 환경 변수가 나열되어 있습니다.

    HTTP_PROXY=http://192.168.130.1:3128
    HTTPS_PROXY=https://192.168.130.1:3129
    NO_PROXY=.cluster.local,.svc,.testing,10.217.0.0/22,10.217.4.0/23,127.0.0.1,192.168.126.0/24,192.168.1
    30.11,api-int.crc.testing,localhost

4.3. 추가 리소스

Legal Notice

Copyright © 2024 Red Hat, Inc.

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.