구성


builds for Red Hat OpenShift 1.5

빌드 구성

초록

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

1장. 빌드 구성

플랫폼 엔지니어는 Build CR(사용자 정의 리소스)에서 소스 코드 위치, 빌드 전략, 매개변수, 출력 설정, 보존 규칙 및 볼륨을 정의할 수 있습니다. Build CR을 사용하면 일관된 빌드 Pod 구성을 활성화하고 클러스터에서 빌드 실행을 관리하기 위한 네임스페이스 범위 방법을 제공합니다.

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

입력, 실행 설정, 출력 및 라이프사이클 동작을 지정하여 Build CR(사용자 정의 리소스)을 구성합니다. 이러한 매개변수는 Build CR의 구성 및 동작을 제어합니다.

다음 표에서는 Build CR의 필수 필드를 설명합니다.

Expand
표 1.1. Build CR의 필수 필드
필드설명

apiVersion

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

kind

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

메타데이터

사용자 지정 리소스 정의 인스턴스를 식별하는 메타데이터를 지정합니다(예: Build 리소스 이름).

spec.source

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

spec.strategy

Build 리소스에 사용되는 전략의 이름과 유형을 지정합니다.

spec.output

시스템이 생성된 이미지를 내보내는 위치를 지정합니다.

spec.output.pushSecret

컨테이너 레지스트리에 액세스하기 위해 기존 보안을 지정합니다.

다음 표에서는 Build CR의 선택적 필드를 설명합니다.

Expand
표 1.2. Build CR의 선택적 필드
필드설명

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

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

spec.nodeSelector

빌드해야 하는 노드를 지정합니다.

spec.tolerations

빌드 Pod에 대한 허용 오차를 지정합니다.

spec.schedulerName

빌드 Pod에 대한 스케줄러를 지정합니다.

1.2. 소스 정의

빌드 CR(사용자 정의 리소스)에서 빌드 의 소스 코드 위치를 구성합니다.

다음 소스 필드는 빌드가 Git 리포지토리에 액세스하는 방법을 지정하고 소스 콘텐츠를 선택합니다.

  • source.git.url: Git 리포지토리 위치입니다.
  • source.git.cloneSecret: 개인 리포지토리에 대한 SSH 키가 포함된 시크릿입니다.
  • source.git.revision: 특정 커밋, 태그 또는 분기(기본 분기의 기본값)입니다.
  • source.contextDir: 소스 코드가 포함된 하위 디렉터리입니다.

빌드 컨트롤러는 기본적으로 Git 리포지토리를 확인하지 않습니다. 검증을 활성화하려면 다음 예와 같이 Build CR에서 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 )이 정의되어 있지 않은 경우입니다.

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

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

다음 예와 같이 리포지토리 인증 정보가 포함된 보안을 참조하여 프라이빗 Git 리포지토리에 액세스하도록 빌드를 구성합니다.

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
태그를 사용하여 빌드 구성

다음 예와 같이 v0.1.0과 같은 특정 Git 태그를 사용하도록 빌드를 구성합니다.

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. 전략 정의

빌드 전략은 소스 코드가 컨테이너 이미지로 변환하는 방식을 결정합니다. 지원되는 전략에는 buildah,source-to-image, buildpacks 가 포함됩니다. Build CR의 spec.strategy 필드에 전략을 정의합니다.

빌드 전략을 구성하려면 다음 예와 같이 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)에서 빌드 전략 매개변수를 설정할 수 있습니다. 이러한 설정은 빌드가 실행되는 방식을 제어합니다. 모든 매개변수에 대해 값을 제공해야 합니다. ConfigMaps 또는 Secrets 에서 값을 직접 제공하거나 참조 키를 제공할 수 있습니다.

참고

매개변수가 빌드 전략의 명령, 인수 또는 환경 변수에 표시되는 경우에만 ConfigMap 또는 Secrets 를 사용할 수 있습니다.

다음은 빌드에 매개변수 값 정의를 사용하는 요구 사항입니다.

  • mapping: 모든 spec.paramValues 이름은 BuildStrategy CR에 정의된 매개변수와 일치해야 합니다.
  • 예약된 이름: BUILDER_IMAGE,CONTEXT_DIR 또는 shp- 로 시작하는 모든 이름을 사용하지 마십시오.
  • resources: 매개변수가 명령, 인수 또는 환경 변수에 사용되는 경우에만 ConfigMap 또는 보안을 사용할 수 있습니다.

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

다음 예제에서는 빌드 전략에서 매개변수를 설정하는 방법을 보여줍니다. 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에서 해당 값을 변경할 수 있습니다.

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:
  # ...

다음과 같습니다.

<your_build>
빌드 CR의 이름을 지정합니다.
<your_namespace>
빌드 CR의 네임스페이스를 지정합니다.
중앙에서 매개변수를 제어하는 ConfigMap CR 생성
여러 빌드에 동일한 매개변수 값을 사용하려면 ConfigMap 을 사용합니다. 이를 통해 한 곳에서 값을 변경하고 사용량을 중앙에서 제어할 수 있습니다. 다음 예제 구성을 참조하십시오.
apiVersion: v1
kind: ConfigMap
metadata:
  name: buildah-configuration
  namespace: <your_namespace>
data:
  storage-driver: overlay

+

다음과 같습니다.

<your_namespace>
ConfigMap CR의 네임스페이스를 지정합니다.

+ 다음 예와 같이 생성된 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:
  # ...

+

다음과 같습니다.

메타데이터
빌드 CR의 메타데이터를 지정합니다.
Build CR에서 배열 유형의 매개변수에 값을 할당합니다.

또한 배열 형식의 매개 변수에 값을 할당할 수도 있습니다. 예를 들어 다음 예와 같이 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:
  # ...

다음과 같습니다.

메타데이터
빌드 CR의 메타데이터를 지정합니다.
Build CR에서 시크릿 참조

매개변수에 대한 시크릿 을 참조할 수 있습니다. 다음 예제에서는 Secret 을 사용하여 특정 레지스트리를 차단하는 방법을 보여줍니다.

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:
        name: registry-configuration
        key: reg-blocked
  strategy:
    name: buildah
    kind: ClusterBuildStrategy
  output:
  # ...

다음과 같습니다.

메타데이터
빌드 CR의 메타데이터를 지정합니다.
values.secretValue
보안을 참조하는 값을 지정합니다.

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. 빌드에 대한 보존 매개변수 정의

Build CR(사용자 정의 리소스)에서 보존 매개변수를 정의합니다. 이러한 매개 변수는 BuildRun 인스턴스의 라이프사이클을 관리합니다.

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

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

Build CR(사용자 정의 리소스)에서 다음 보존 매개변수 값을 설정할 수 있습니다.

  • retention.succeededLimit: 빌드를 위해 존재할 수 있는 성공적인 빌드 실행 수입니다.
  • retention.failedLimit: 빌드에 존재할 수 있는 실패한 빌드 실행 수입니다.
  • retention.ttlAfterFailed: 실패한 빌드 실행이 존재할 수 있는 기간입니다.
  • retention.ttlAfterSucceeded: 성공적인 빌드 실행이 존재할 수 있는 기간입니다.
참고

제한을 변경하면 즉시 적용됩니다. TTL(Time to live)을 변경하는 경우 새 빌드 실행에만 적용됩니다.

다음 예제에서는 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 매개변수 값을 변경하면 새 빌드 실행에서만 새 보존 기간이 적용됩니다. 이전 빌드는 이전 보존 기간을 따릅니다. BuildRunBuild CR 모두에 보존 기간이 정의된 경우 BuildRun CR이 우선합니다.

1.8. 빌드의 볼륨 정의

Build Strategy 리소스에 지정된 볼륨을 덮어쓰도록 Build CR(사용자 정의 리소스)에 볼륨을 정의합니다. 볼륨이 명시적으로 재정의되지 않으면 빌드 실행이 실패합니다.

다음 예제에서는 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: <volume_name>
      configMap:
        name: <configmap_name>

다음과 같습니다.

<build_name>
빌드 의 이름을 지정합니다.
<volume_name>
볼륨의 이름을 지정합니다.
<configmap_name>
ConfigMap 의 이름을 지정합니다.

1.9. Pod 구성

선택적 BuildRun CR(사용자 정의 리소스) 필드를 사용하여 빌드에 대한 Pod 예약 및 배치 구성

다음 선택적 Build CR 필드를 사용하여 빌드 Pod를 구성합니다.

  • spec.tolerations 필드는 다음과 같은 제한으로 빌드 Pod에 대한 허용 오차를 지정합니다.

    • NoSchedule 테인트 효과만 지원됩니다.
  • spec.nodeSelector 필드는 Builds Pod를 실행해야 하는 노드를 지정합니다.
  • spec.schedulerName 필드는 빌드 Pod에 대한 스케줄러를 지정합니다.
참고

Build 및 BuildRun CR에서 이러한 필드를 정의하는 경우 BuildRun 값이 우선합니다.

2장. 빌드 전략 구성

플랫폼 엔지니어는 BuildStrategy 또는 ClusterBuildStrategy CR(사용자 정의 리소스)에서 매개변수, 시스템 설정, 리소스 요구 사항, 주석 및 볼륨을 지정하여 일관된 빌드 전략을 정의할 수 있습니다. 이러한 전략을 사용하면 클러스터 전체에서 제어되고 재사용 가능한 빌드 실행을 수행할 수 있습니다.

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 매개변수 값을 설정할 수 있습니다. 요구 사항에 따라 다음 문자열 매개변수를 정의할 수 있습니다.

    Expand
    표 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(사용자 정의 리소스)에서 사용자 정의 정보에 액세스합니다. 빌드 실행 컨트롤러에서 런타임에 정의하므로 시스템 매개변수를 구성하거나 수정할 수 없습니다.

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

Expand
표 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, 메모리 및 디스크 제한을 정의합니다. 전략에 여러 단계가 있는 경우 각각 다른 리소스 양을 할당할 수 있습니다.

관리자는 사용자가 빌드 요구 사항에 맞는 리소스 프로필을 선택할 수 있도록 동일한 전략(예: buildah-undercloud 및 buildah-large)의 다른 버전을 제공할 수 있습니다.

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

다른 빌드 요구 사항에 따라 다른 리소스 제한을 적용하려면 동일한 전략의 여러 변형을 정의합니다.

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

다음 예와 같이 buildah 전략에 대한 리소스 제한이 작은 spec.steps[].resources 필드를 정의할 수 있습니다.

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: []
    # ...

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

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 파이프라인의 리소스 관리

빌드 컨트롤러는 Tekton 파이프라인 컨트롤러와 함께 작동하여 전략 단계를 실행하는 Pod를 예약합니다. 런타임 시 빌드 컨트롤러는 작업을 실행하고 상태 및 결과를 기록하는 Tekton TaskRun을 생성합니다. TaskRun은 대상 네임스페이스에서 모든 단계를 순차적으로 실행하는 Pod를 생성합니다.

2.4. 주석 정의

Kubernetes 오브젝트와 동일한 방식으로 BuildStrategy 또는 ClusterBuildStrategy 에 대한 주석을 정의합니다. 빌드 전략은 이러한 주석을 TaskRun 리소스에 전달합니다. 그런 다음 Tekton은 Pod에 전달합니다.

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

  • 네트워크 대역폭: kubernetes.io/ingress-bandwidth 또는 kubernetes.io/egress-bandwidth 를 사용하여 네트워크 대역폭을 제한합니다.
  • 보안 프로필: container.apparmor.security.beta.kubernetes.io/<container_name >을 사용하여 컨테이너의 AppArmor 프로필을 정의합니다.

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

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. 문자열 매개변수 보안 참조

$(params.your-parameter-name) 구문을 사용하여 빌드 전략의 문자열 매개변수를 참조합니다. 빌드가 실행되면 시스템이 변수를 실제 문자열로 대체합니다.

참고

시스템 및 전략 매개변수에 $(params.your-parameter-name) 구문을 사용할 수 있습니다.

인라인 스크립트를 사용할 때 명령에서 취약점을 주입하지 않으려면 다음 보안 방법 중 하나를 사용합니다.

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

    문자열 매개변수를 환경 변수로 참조

    매개 변수를 환경 변수에 전달합니다. 그런 다음 스크립트에서 해당 변수 주위에 따옴표를 사용합니다. 다음 예제에서는 스크립트 내의 환경 변수를 사용하여 문자열 매개변수를 참조합니다.

    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}"
    문자열 매개변수를 인수로 참조

    매개 변수를 스크립트에 인수로 전달합니다. 그런 다음 쉘 변수를 사용하여 읽습니다. 다음 예제에서는 스크립트 내에 정의된 인수를 사용하여 문자열 매개변수를 참조합니다.

    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(사용자 정의 리소스)에 정의할 수 있습니다.

Expand
표 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. 볼륨 및 볼륨 마운트 정의

빌드 전략에서는 볼륨 및 볼륨 마운트를 사용하여 빌드 단계에서 데이터를 관리합니다. 기본적으로 BuildStrategy 에서는 볼륨을 덮어쓸 수 없습니다. Build 또는 BuildRun 이 사용자 지정 볼륨을 사용하도록 허용하려면 전략에서 덮어쓸 수 있는 필드를 true 로 설정해야 합니다.

참고

빌드 단계에 정의된 볼륨 마운트를 사용하면 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 CR은 네임스페이스 내에서 개별 빌드가 실행되는 방식을 관리하여 런타임 동작을 제어합니다.

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

입력 매개변수, 서비스 계정, 출력 및 라이프사이클 설정을 지정하여 BuildRun CR(사용자 정의 리소스)을 구성합니다.

다음 표에서는 BuildRun CR(사용자 정의 리소스)의 필수 필드를 설명합니다.

Expand
표 3.1. BuildRun CR의 필수 필드
필드설명

apiVersion

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

kind

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

메타데이터

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

다음 표에서는 BuildRun CR(사용자 정의 리소스)의 선택적 필드를 설명합니다.

Expand
표 3.2. BuildRun CR의 선택적 필드
필드설명

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.nodeSelector

빌드해야 하는 노드를 지정합니다.

spec.tolerations

빌드 Pod에 대한 허용 오차를 지정합니다.

spec.schedulerName

빌드 Pod에 대한 스케줄러를 지정합니다.

중요

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 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>

다음과 같습니다.

<path_to_image>
이미지 파일의 경로를 지정합니다.
참고

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

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

BuildRun CR(사용자 정의 리소스)에서 빌드 전략 매개변수 값을 정의할 수 있습니다. BuildRun 리소스에 설정된 값은 Build 리소스에서 동일한 이름으로 모든 값을 재정의합니다.

다음 예에서 BuildRuncache 값은 Build 리소스의 캐시 값을 재정의합니다.

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:
  # ...

다음과 같습니다.

<your_build>
Build CR의 이름을 지정합니다.
<your_namespace>
Build CR의 네임스페이스를 지정합니다.
<your_strategy>
Build CR에 사용되는 전략을 지정합니다.
apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: <your_buildrun>
  namespace: <your_namespace>
spec:
  build:
    name: <your_build>
  paramValues:
  - name: cache
    value: registry

다음과 같습니다.

<your_buildrun>
Buildrun CR의 이름을 지정합니다.
<your_namespace>
Buildrun CR의 네임스페이스를 지정합니다.
<your_build>
빌드 의 이름을 지정합니다.

3.5. 서비스 계정 정의

다음 예제와 같이 BuildRun 리소스에 서비스 계정을 정의하여 Build 리소스에서 참조하는 시크릿에 대한 액세스를 제공합니다.

apiVersion: shipwright.io/v1beta1
kind: BuildRun
metadata:
  name: buildah-buildrun
spec:
  build:
    name: buildah-build
  serviceAccount: pipeline
  • spec.serviceAccount: BuildRun 리소스의 이름에 해당하는 생성된 서비스 계정의 이름을 정의합니다. 또한 값을 ".generate" 로 설정하여 런타임 중에 서비스 계정을 생성할 수도 있습니다.

    참고

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

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

BuildRun CR(사용자 정의 리소스)에서 보존 매개변수를 사용하여 완료된 빌드 실행을 자동으로 삭제합니다. 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. 빌드 실행에 대한 볼륨 정의

BuildStrategy 리소스의 볼륨을 재정의하려면 BuildRun CR(사용자 정의 리소스)에 볼륨을 정의합니다. 볼륨을 재정의하지 않으면 빌드 실행이 실패합니다. 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>

다음과 같습니다.

<build_name>
Buildrun CR의 이름을 지정합니다.
<buildrun_name>
Build CR의 이름을 지정합니다.
<volume_name>
Build CR의 볼륨 이름을 지정합니다.
<configmap_name>
Build CR의 ConfigMap 이름을 지정합니다.

3.8. 환경 변수 정의

BuildRun CR(사용자 정의 리소스)에서 환경 변수를 설정할 수 있습니다. 이러한 변수는 빌드 컨테이너에 정보를 전달합니다. 리터럴 값 또는 Kubernetes Downward API를 사용할 수 있습니다.

다음 예제에서는 환경 변수를 정의하는 방법을 보여줍니다.

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>"

다음과 같습니다.

env.name
BuildRun CR에서 환경 변수의 이름을 정의합니다.
env.value
BuildRun CR에서 환경 변수의 값을 정의합니다.

다음 예제에서는 Kubernetes Downward API를 사용하여 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

다음과 같습니다.

<pod_name>
pod 이름을 지정합니다.

다음 예제에서는 Kubernetes Downward API를 사용하여 컨테이너를 환경 변수로 노출하는 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

다음과 같습니다.

<my_container>
컨테이너 이름을 지정합니다.

3.9. 빌드 실행 상태

BuildRun CR(사용자 정의 리소스)의 상태를 확인하여 이미지 빌드 진행 및 완료를 모니터링합니다. BuildRun CR은 status.conditions 필드에 상태 정보를 저장합니다. 이 필드에는 상태, 해당 상태의 이유 및 설명 메시지가 포함됩니다. 예를 들어 Succeeded 조건 유형은 빌드가 성공적으로 완료된 것을 의미합니다.

다음 예제에서는 특정 BuildRun CR의 상태를 보는 방법을 보여줍니다.

알 수 없는 상태
알 수 없는 상태는 빌드가 아직 시작 중이거나 진행 중임을 나타냅니다. 다음 예제에서는 Unknown 상태의 BuildRun 을 보여줍니다.
$ oc get buildrun buildah-buildrun-mp99r

출력 예:

NAME                    SUCCEEDED   REASON    STARTTIME   COMPLETIONTIME
buildah-buildrun-mp99r  Unknown     Unknown      1s
true 상태
True 상태는 빌드가 성공적으로 완료되었음을 나타냅니다. 다음 예제에서는 True 상태의 BuildRun'을 보여줍니다.
$ oc get buildrun buildah-buildrun-mp99r

출력 예:

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

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

3.9.1. 빌드 실행 상태 설명

BuildRun CR(사용자 정의 리소스)은 이미지 빌드 프로세스 중에 다른 상태를 가질 수 있습니다. status 필드를 사용하여 빌드 상태를 추적합니다.

다음 표에서는 빌드 실행의 다양한 상태에 대해 설명합니다.

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

알 수 없음

보류 중

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:
    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 CR(사용자 정의 리소스) 실행이 완료되면 .status.taskResults 에 이미지 다이제스트 또는 커밋 SHA와 같은 단계 결과가 표시됩니다. .status.sources 는 소스 단계의 결과를 보유하고 있으며 .status.output 은 소스 및 빌드 이미지를 반영하여 출력 단계의 결과를 보유합니다.

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

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

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

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

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

3.9.4. 빌드 스냅샷

빌드 스냅샷은 특정 빌드 실행에 사용되는 정확한 구성을 기록합니다.

빌드 실행이 조정되면 BuildRun CR(사용자 정의 리소스)의 status.buildSpec 필드가 업데이트됩니다. 이 필드는 특정 이미지 빌드에 사용되는 원래 Build 사양의 전체 사본을 저장합니다. 이 스냅샷을 사용하여 원래 Build CR이 나중에 변경되어도 실행 중에 사용되는 설정을 확인할 수 있습니다.

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

BuildRun 은 Tekton TaskRun 리소스를 사용하여 이미지를 빌드합니다. TaskRun 은 빌드가 완료되거나 실패할 때까지 빌드 전략에 정의된 단계를 따릅니다.

BuildRun 을 생성하면 빌드 컨트롤러에서 새 TaskRun을 시작합니다. BuildRun 리소스는 이 TaskRun 에 이미지 생성 작업을 할당합니다. 그러면 TaskRun 이 빌드 전략에 정의된 모든 단계를 실행합니다.

3.11. 빌드 실행 취소

활성 BuildRun 리소스를 중지하려면 BuildRun 리소스의 state 필드를 BuildRun Canceled 으로 설정합니다. BuildRun 을 취소하면 기본 TaskRun 리소스도 취소됩니다.

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

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

3.12. 자동 빌드 실행 삭제

보존 및 TTL 매개변수를 정의하여 빌드 실행의 라이프사이클을 자동으로 관리합니다.

빌드 또는 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: 빌드에 존재할 수 있는 실패한 빌드 실행 수를 정의합니다.

3.13. Pod 구성

선택적 BuildRun CR(사용자 정의 리소스) 필드를 사용하여 빌드에 대한 Pod 예약 및 배치를 구성합니다.

다음 필드를 사용하여 빌드 포드를 구성합니다.

  • spec.tolerations: Pod 허용 오차를 지정합니다. 참고: NoSchedule 테인트 효과만 지원됩니다.
  • spec.nodeSelector: Pod를 실행해야 하는 노드를 지정합니다.
  • spec.schedulerName: Pod의 사용자 정의 스케줄러를 지정합니다.
참고

BuildBuildRun CR 모두에 이러한 필드를 정의하는 경우 BuildRun 값이 우선합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동