CI/CD
OpenShift Container Platform의 빌드, 파이프라인, GitOps에 대한 정보 제공
초록
1장. OpenShift Container Platform CI/CD 개요
OpenShift Container Platform은 개발자를 위한 엔터프라이즈급 Kubernetes 플랫폼으로, CI(지속 통합) 및 연속 제공(CD)과 같은 DevOps 사례를 통해 애플리케이션 제공 프로세스를 자동화할 수 있습니다. 조직의 요구 사항을 충족하기 위해 OpenShift Container Platform에서는 다음과 같은 CI/CD 솔루션을 제공합니다.
- OpenShift Builds
- OpenShift Pipelines
- OpenShift GitOps
1.1. OpenShift Builds
OpenShift 빌드를 사용하면 선언적 빌드 프로세스를 사용하여 클라우드 네이티브 애플리케이션을 생성할 수 있습니다. BuildConfig 오브젝트를 생성하는 데 사용하는 YAML 파일에 빌드 프로세스를 정의할 수 있습니다. 이 정의에는 빌드 트리거, 입력 매개변수 및 소스 코드와 같은 특성이 포함됩니다. 배포되면 BuildConfig 오브젝트는 일반적으로 실행 가능한 이미지를 빌드하여 컨테이너 이미지 레지스트리로 푸시합니다.
OpenShift 빌드에서는 빌드 전략에 대해 다음과 같은 확장 가능한 지원을 제공합니다.
- Docker 빌드
- S2I(Source-to-Image) 빌드
- 사용자 정의 빌드
자세한 내용은 이미지 빌드 이해를참조하십시오.
1.2. OpenShift Pipelines
OpenShift Pipelines는 Kubernetes 네이티브 CI/CD 프레임워크를 제공하여 자체 컨테이너에서 CI/CD 파이프라인의 각 단계를 설계 및 실행할 수 있습니다. 필요에 따라 파이프라인을 예측 가능한 결과와 충족하도록 독립적으로 확장할 수 있습니다.
자세한 내용은 OpenShift Pipelines 이해를참조하십시오.
1.3. OpenShift GitOps
OpenShift GitOps는 Argo CD를 선언적 GitOps 엔진으로 사용하는 Operator입니다. 다중 클러스터 OpenShift 및 Kubernetes 인프라에서 GitOps 워크플로우를 활성화합니다. 관리자는 OpenShift GitOps를 사용하여 클러스터 및 개발 라이프사이클 전반에 Kubernetes 기반 인프라 및 애플리케이션을 일관되게 구성하고 배포할 수 있습니다.
자세한 내용은 OpenShift GitOps 이해를참조하십시오.
1.4. Jenkins
Jenkins는 애플리케이션 및 프로젝트 빌드, 테스트 및 배포 프로세스를 자동화합니다. OpenShift Developer Tools는 OpenShift Container Platform과 직접 통합된 Jenkins 이미지를 제공합니다. Jenkins는 Samples Operator 템플릿 또는 인증된 Helm 차트를 사용하여 OpenShift에 배포할 수 있습니다.
2장. 빌드
2.1. 이미지 빌드 이해
2.1.1. 빌드
빌드는 입력 매개변수를 결과 오브젝트로 변환하는 프로세스입니다. 대부분의 경우 프로세스는 입력 매개변수 또는 소스 코드를 실행 가능한 이미지로 변환하는 데 사용됩니다. BuildConfig
오브젝트는 전체 빌드 프로세스에 대한 정의입니다.
OpenShift Container Platform에서는 빌드 이미지에서 컨테이너를 생성하고 이를 컨테이너 이미지 레지스트리로 내보내는 방식으로 Kubernetes를 사용합니다.
빌드 오브젝트는 빌드에 대한 입력, 즉 빌드 프로세스를 완료하고 빌드 프로세스를 로깅한 후 성공한 빌드의 리소스를 게시하고 빌드의 최종 상태를 게시하는 데 필요한 요구 사항과 같은 공통 특징을 공유합니다. 빌드에서는 CPU 사용량, 메모리 사용량, 빌드 또는 Pod 실행 시간과 같은 리소스 제한 사항을 활용합니다.
OpenShift Container Platform 빌드 시스템은 빌드 API에서 지정한 선택 가능한 유형을 기반으로 하는 빌드 전략에 확장 가능한 지원을 제공합니다. 다음은 세 가지 주요 빌드 전략입니다.
- Docker 빌드
- S2I(Source-to-Image) 빌드
- 사용자 정의 빌드
기본적으로 Docker 빌드 및 S2I 빌드가 지원됩니다.
빌드의 결과 오브젝트는 빌드를 생성하는 데 사용된 빌더에 따라 다릅니다. Docker 및 S2I 빌드의 경우 결과 오브젝트는 실행 가능한 이미지입니다. 사용자 정의 빌드의 경우 결과 오브젝트는 빌더 이미지 작성자가 지정한 모든 항목입니다.
또한 파이프라인 빌드 전략을 사용하여 정교한 워크플로를 구현할 수 있습니다.
- 연속 통합
- 연속 배포
2.1.1.1. Docker 빌드
OpenShift Container Platform은 Buildah를 사용하여 Dockerfile에서 컨테이너 이미지를 빌드합니다. Dockerfile을 사용하여 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 Dockerfile 참조 문서를 참조하십시오.
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정하는 경우 Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
2.1.1.2. S2I(Source-to-Image) 빌드
S2I(Source-to-Image)는 재현 가능한 컨테이너 이미지를 빌드하는 툴입니다. 컨테이너 이미지에 애플리케이션 소스를 삽입하고 새 이미지를 어셈블하여 실행할 수 있는 이미지를 생성합니다. 새 이미지는 기본 이미지, 빌더, 빌드 소스를 통합하고 buildah run
명령과 함께 사용할 수 있습니다. S2I는 이전에 다운로드한 종속 항목, 이전에 빌드한 아티팩트 등을 다시 사용하는 증분 빌드를 지원합니다.
2.1.1.3. 사용자 정의 빌드
사용자 정의 빌드 전략을 사용하면 개발자가 전체 빌드 프로세스를 담당하는 특정 빌더 이미지를 정의할 수 있습니다. 자체 빌더 이미지를 사용하면 빌드 프로세스를 사용자 정의할 수 있습니다.
사용자 정의 빌더 이미지는 빌드 프로세스 논리가 포함된 일반 컨테이너 이미지입니다(예: RPM 또는 기본 이미지 빌드).
사용자 정의 빌드는 높은 권한으로 실행되며 기본적으로 사용자에게 제공되지 않습니다. 클러스터 관리 권한이 있는 신뢰할 수 있는 사용자에게만 사용자 정의 빌드를 실행할 수 있는 권한을 부여해야 합니다.
2.1.1.4. 파이프라인 빌드
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인 빌드 전략을 사용하면 개발자가 Jenkins 파이프라인 플러그인에서 사용할 Jenkins 파이프라인을 정의할 수 있습니다. 다른 빌드 유형과 동일한 방식으로 OpenShift Container Platform에서 빌드를 시작, 모니터링, 관리할 수 있습니다.
파이프라인 워크플로는 빌드 구성에 직접 포함하거나 Git 리포지토리에 제공하는 방식으로 jenkinsfile
에 정의하고 빌드 구성에서 참조합니다.
2.2. 빌드 구성 이해
다음 섹션에서는 빌드의 개념과 빌드 구성을 정의하고 사용 가능한 주요 빌드 전략을 간략히 설명합니다.
2.2.1. BuildConfigs
빌드 구성은 단일 빌드 정의와 새 빌드가 생성될 때의 트리거 세트를 나타냅니다. 빌드 구성은 BuildConfig
에 의해 정의되는데 BuildConfig는 새 인스턴스를 생성하기 위해 API 서버에 대한 POST에 사용할 수 있는 REST 오브젝트입니다.
빌드 구성 또는 BuildConfig
는 빌드 전략 및 하나 이상의 소스가 특징입니다. 전략에 따라 프로세스가 결정되고 소스에서는 입력을 제공합니다.
OpenShift Container Platform을 사용하여 애플리케이션을 생성하기 위해 선택하는 방법에 따라 BuildConfig
는 일반적으로 웹 콘솔 또는 CLI를 사용하는 경우 자동으로 생성되며 언제든지 편집할 수 있습니다. BuildConfig
를 구성하는 부분과 해당 부분의 사용 가능한 옵션을 이해하면 나중에 구성을 수동으로 변경할 때 도움이 될 수 있습니다.
다음 예제 BuildConfig
에서는 컨테이너 이미지 태그 또는 소스 코드가 변경될 때마다 새 빌드를 생성합니다.
BuildConfig
오브젝트 정의
kind: BuildConfig apiVersion: build.openshift.io/v1 metadata: name: "ruby-sample-build" 1 spec: runPolicy: "Serial" 2 triggers: 3 - type: "GitHub" github: secret: "secret101" - type: "Generic" generic: secret: "secret101" - type: "ImageChange" source: 4 git: uri: "https://github.com/openshift/ruby-hello-world" strategy: 5 sourceStrategy: from: kind: "ImageStreamTag" name: "ruby-20-centos7:latest" output: 6 to: kind: "ImageStreamTag" name: "origin-ruby-sample:latest" postCommit: 7 script: "bundle exec rake test"
- 1
- 이 사양은
ruby-sample-build
라는 새BuildConfig
를 생성합니다. - 2
runPolicy
필드는 이 빌드 구성에서 생성한 빌드를 동시에 실행할 수 있는지 여부를 제어합니다. 기본값은Serial
입니다. 즉 새 빌드가 동시에 실행되지 않고 순차적으로 실행됩니다.- 3
- 트리거 목록을 지정할 수 있으며 이 경우 새 빌드가 생성될 수 있습니다.
- 4
source
섹션은 빌드의 소스를 정의합니다. 소스 유형에 따라 기본 입력 소스가 결정되는데, 소스 유형은 코드 리포지토리 위치를 가리키는Git
, 인라인 Dockerfile에서 빌드하는Dockerfile
또는 바이너리 페이로드를 허용하는Binary
일 수 있습니다. 한 번에 여러 개의 소스를 사용할 수 있습니다. 자세한 내용은 각 소스 유형에 대한 설명서를 참조하십시오.- 5
strategy
섹션에서는 빌드를 실행하는 데 사용하는 빌드 전략에 대해 설명합니다. 여기에서Source
,Docker
또는Custom
전략을 지정할 수 있습니다. 이 예에서는 S2I(Source-to-Image)에서 애플리케이션 빌드에 사용하는ruby-20-centos7
컨테이너 이미지를 사용합니다.- 6
- 컨테이너 이미지가 성공적으로 빌드되면
output
섹션에 설명된 리포지토리로 푸시됩니다. - 7
postCommit
섹션에서는 선택적 빌드 후크를 정의합니다.
2.3. 빌드 입력 생성
다음 섹션에서는 빌드 입력에 대한 개요, 입력을 사용하여 빌드가 작동하도록 소스 콘텐츠를 제공하는 방법, 빌드 환경을 사용하고 보안을 생성하는 방법에 대한 지침을 확인할 수 있습니다.
2.3.1. 빌드 입력
빌드 입력에서는 빌드가 작동하도록 소스 콘텐츠를 제공합니다. 다음 빌드 입력을 사용하여 OpenShift Container Platform에 소스를 제공할 수 있습니다(우선순위 순으로 표시됨).
- 인라인 Dockerfile 정의
- 기존 이미지에서 추출한 컨텐츠
- Git 리포지토리
- 바이너리(로컬) 입력
- 입력 보안
- 외부 아티팩트
단일 빌드에서 여러 입력을 결합할 수 있습니다. 그러나 인라인 Dockerfile이 우선하므로 다른 입력에서 제공하는 Dockerfile이라는 기타 파일을 덮어쓸 수 있습니다. 바이너리(local) 입력과 Git 리포지토리는 서로 함께 사용할 수 없는 입력입니다.
빌드 중 사용한 특정 리소스 또는 자격 증명을 빌드에서 생성한 최종 애플리케이션 이미지에 사용하지 않으려는 경우 또는 보안 리소스에 정의된 값을 사용하려는 경우에는 입력 보안을 사용하면 됩니다. 외부 아티팩트를 사용하면 기타 빌드 입력 유형 중 하나로 사용할 수 없는 추가 파일을 가져올 수 있습니다.
빌드를 실행하면 다음이 수행됩니다.
- 작업 디렉터리가 구성되고 모든 입력 콘텐츠가 작업 디렉터리에 배치됩니다. 예를 들어 입력 Git 리포지토리가 작업 디렉터리에 복제되고 입력 이미지에서 지정된 파일이 타겟 경로를 사용하여 작업 디렉터리에 복사됩니다.
-
빌드 프로세스에서는
contextDir
이 정의된 경우 디렉터리를 해당 디렉터리로 변경합니다. - 인라인 Dockerfile(있는 경우)은 현재 디렉터리에 기록됩니다.
-
현재 디렉터리의 콘텐츠는 Dockerfile, 사용자 지정 빌더 논리 또는
assemble
스크립트에서 참조할 수 있도록 빌드 프로세스에 제공됩니다. 즉contextDir
외부에 있는 모든 입력 콘텐츠는 빌드에서 무시합니다.
다음 소스 정의 예제에는 다양한 입력 유형 및 이러한 유형이 결합되는 방법에 대한 설명이 포함되어 있습니다. 각 입력 유형이 정의되는 방법에 대한 자세한 내용은 각 입력 유형별 섹션을 참조하십시오.
source: git: uri: https://github.com/openshift/ruby-hello-world.git 1 ref: "master" images: - from: kind: ImageStreamTag name: myinputimage:latest namespace: mynamespace paths: - destinationDir: app/dir/injected/dir 2 sourcePath: /usr/lib/somefile.jar contextDir: "app/dir" 3 dockerfile: "FROM centos:7\nRUN yum install -y httpd" 4
2.3.2. Dockerfile 소스
dockerfile
값을 제공하면 이 필드의 콘텐츠가 dockerfile
이라는 파일로 디스크에 작성됩니다. 이 작업은 다른 입력 소스를 처리한 후 수행되므로 입력 소스 리포지토리의 루트 디렉터리에 Dockerfile이 포함된 경우 해당 콘텐츠가 이를 덮어씁니다.
소스 정의는 BuildConfig
에 있는 spec
섹션의 일부입니다.
source:
dockerfile: "FROM centos:7\nRUN yum install -y httpd" 1
- 1
dockerfile
필드에는 빌드된 인라인 Dockerfile이 포함됩니다.
추가 리소스
- 이 필드는 일반적으로 Docker 전략 빌드에 Dockerfile을 제공하는 데 사용합니다.
2.3.3. 이미지 소스
이미지가 포함된 빌드 프로세스에 파일을 추가할 수 있습니다. 입력 이미지는 From
및 To
이미지 타겟을 정의하는 방식과 동일한 방식으로 참조합니다. 즉 컨테이너 이미지와 이미지 스트림 태그를 모두 참조할 수 있습니다. 이미지와 함께 이미지를 복사할 파일 또는 디렉터리의 경로와 빌드 컨텍스트에서 해당 이미지를 배치할 대상을 나타내는 하나 이상의 경로 쌍을 제공해야 합니다.
소스 경로는 지정된 이미지 내의 모든 절대 경로일 수 있습니다. 대상은 상대 디렉터리 경로여야 합니다. 빌드 시 이미지가 로드되고 표시된 파일과 디렉터리가 빌드 프로세스의 컨텍스트 디렉터리로 복사됩니다. 이 디렉터리는 소스 리포지토리 콘텐츠가 복제되는 것과 동일한 디렉터리입니다. 소스 경로가 /.
로 종료되면 디렉터리의 콘텐츠가 복사되지만 디렉터리 자체는 대상에 생성되지 않습니다.
이미지 입력은 BuildConfig
의 source
정의에 지정됩니다.
source: git: uri: https://github.com/openshift/ruby-hello-world.git ref: "master" images: 1 - from: 2 kind: ImageStreamTag name: myinputimage:latest namespace: mynamespace paths: 3 - destinationDir: injected/dir 4 sourcePath: /usr/lib/somefile.jar 5 - from: kind: ImageStreamTag name: myotherinputimage:latest namespace: myothernamespace pullSecret: mysecret 6 paths: - destinationDir: injected/dir sourcePath: /usr/lib/somefile.jar
- 1
- 하나 이상의 입력 이미지 및 파일로 이루어진 배열입니다.
- 2
- 복사할 파일이 포함된 이미지에 대한 참조입니다.
- 3
- 소스/대상 경로로 이루어진 배열입니다.
- 4
- 빌드 프로세스에서 파일에 액세스할 수 있는, 빌드 루트의 상대 디렉터리입니다.
- 5
- 참조한 이미지에서 복사할 파일의 위치입니다.
- 6
- 입력 이미지에 액세스하는 데 자격 증명이 필요한 경우 제공되는 선택적 보안입니다.참고
클러스터에서
ImageContentSourcePolicy
오브젝트를 사용하여 저장소 미러링을 구성하는 경우 미러링된 레지스트리에 대한 글로벌 풀 시크릿만 사용할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.
pull secret이 필요한 이미지
가져오기 보안이 필요한 입력 이미지를 사용하는 경우 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결할 수 있습니다. 기본적으로 빌드에서는 builder
서비스 계정을 사용합니다. 보안에 입력 이미지를 호스팅하는 리포지토리와 일치하는 자격 증명이 포함된 경우 가져오기 보안이 빌드에 자동으로 추가됩니다. 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결하려면 다음을 실행합니다.
$ oc secrets link builder dockerhub
이 기능은 사용자 정의 전략을 사용하는 빌드에는 지원되지 않습니다.
pull secret이 필요한 미러링된 레지스트리의 이미지
미러링된 레지스트리에서 입력 이미지를 사용하는 경우 빌드 오류가 발생하는 경우 이미지 메시지를 가져오지 못한
경우 다음 방법 중 하나를 사용하여 오류를 해결할 수 있습니다.
- 빌더 이미지 리포지토리 및 알려진 모든 미러에 대한 인증 자격 증명이 포함된 입력 보안을 생성합니다. 이 경우 이미지 레지스트리 및 미러에 대한 인증 정보에 대한 풀 시크릿을 생성합니다.
-
입력 보안을
BuildConfig
오브젝트의 풀 시크릿으로 사용합니다.
2.3.4. Git 소스
지정하는 경우 입력한 위치에서 소스 코드를 가져옵니다.
인라인 Dockerfile을 제공하는 경우 Git 리포지토리의 contextDir
에 Dockerfile을 덮어씁니다.
소스 정의는 BuildConfig
에 있는 spec
섹션의 일부입니다.
source: git: 1 uri: "https://github.com/openshift/ruby-hello-world" ref: "master" contextDir: "app/dir" 2 dockerfile: "FROM openshift/ruby-22-centos7\nUSER example" 3
- 1
git
필드에는 소스 코드의 원격 Git 리포지토리에 대한 URI가 포함되어 있습니다. 필요한 경우ref
필드를 지정하여 특정 Git 참조를 확인합니다. 유효한ref
는 SHA1 태그 또는 분기 이름이 될 수 있습니다.- 2
contextDir
필드를 사용하면 빌드에서 애플리케이션 소스 코드를 찾는 소스 코드 리포지토리 내부의 기본 위치를 덮어쓸 수 있습니다. 애플리케이션이 하위 디렉터리에 있는 경우 이 필드를 사용하여 기본 위치(루트 폴더)를 덮어쓸 수 있습니다.- 3
- 선택적
dockerfile
필드를 제공하는 경우 소스 리포지토리에 있을 수 있는 모든 Dockerfile을 덮어쓰는 Dockerfile이 문자열에 포함되어야 합니다.
ref
필드가 가져오기 요청을 나타내는 경우 시스템은 git fetch
작업을 사용한 후 FETCH_HEAD
를 점검합니다.
ref
값을 제공하지 않으면 OpenShift Container Platform에서 부분 복제(--depth=1)
를 수행합니다. 이 경우 기본 분기(일반적으로 master
)의 최근 커밋과 관련된 파일만 다운로드됩니다. 그러면 리포지토리는 더 빠르게 다운로드되지만 전체 커밋 내역은 다운로드되지 않습니다. 지정된 리포지토리의 기본 분기에 대한 전체 git clone
을 수행하려면 기본 분기(예: master
)의 이름을 ref
로 설정합니다.
MITM(Man in the middle) TLS 하이재킹을 수행하거나 프록시 연결을 재암호화하고 있는 프록시를 통과하는 Git 복제 작업이 작동하지 않습니다.
2.3.4.1. 프록시 사용
프록시를 사용하는 경우에만 Git 리포지토리에 액세스할 수 있는 경우 빌드 구성의 source
섹션에 사용할 프록시를 정의할 수 있습니다. 사용할 HTTP 및 HTTPS 프록시를 둘 다 구성할 수 있습니다. 두 필드 모두 선택 사항입니다. 프록시를 사용할 수 없는 도메인도 NoProxy
필드에 지정할 수 있습니다.
이를 위해서는 소스 URI에서 HTTP 또는 HTTPS 프로토콜을 사용해야 합니다.
source: git: uri: "https://github.com/openshift/ruby-hello-world" ref: "master" httpProxy: http://proxy.example.com httpsProxy: https://proxy.example.com noProxy: somedomain.com, otherdomain.com
Pipeline 전략 빌드의 경우 Jenkins용 Git 플러그인에 대한 현재 제한 사항을 고려할 때 Git 플러그인을 통한 모든 Git 작업은 BuildConfig
에 정의된 HTTP 또는 HTTPS 프록시를 사용하지 않습니다. Git 플러그인은 플러그인 관리자 패널에서 Jenkins UI에 구성된 프록시만 사용합니다. 그런 다음 이 프록시는 모든 작업에서 Jenkins 내의 모든 Git 상호 작용에 사용됩니다.
추가 리소스
- JenkinsBehindProxy에서 Jenkins UI를 통해 프록시를 구성하는 방법에 대한 지침을 확인할 수 있습니다.
2.3.4.2. 소스 복제 보안
빌더 Pod는 빌드의 소스로 정의된 모든 Git 리포지토리에 액세스해야 합니다. 소스 복제 보안은 자체 서명되거나 신뢰할 수 없는 SSL 인증서가 있는 프라이빗 리포지토리 또는 리포지토리와 같이 일반적으로 액세스할 수 없는 리포지토리에 대한 액세스 권한을 제공하는 데 사용됩니다.
다음과 같은 소스 복제 보안 구성이 지원됩니다.
- .gitconfig 파일
- 기본 인증
- SSH 키 인증
- 신뢰할 수 있는 인증 기관
이러한 구성의 조합을 사용하여 특정 요구 사항을 충족할 수도 있습니다.
2.3.4.2.1. 빌드 구성에 소스 복제 보안 자동 추가
BuildConfig
가 생성되면 OpenShift Container Platform에서 소스 복제 보안 참조를 자동으로 채울 수 있습니다. 이 동작을 사용하면 생성된 빌드에서 참조된 보안에 저장된 자격 증명을 자동으로 사용하여 추가 구성없이 원격 Git 리포지토리에 인증할 수 있습니다.
이 기능을 사용하려면 Git 리포지토리 자격 증명이 포함된 보안이 나중에 BuildConfig
가 생성되는 네임스페이스에 있어야 합니다. 이 보안에는 build.openshift.io/source-secret-match-uri-
접두사가 있는 주석이 하나 이상 포함되어야 합니다. 이러한 주석의 각 값은 다음과 같이 정의되는 URI(Uniform Resource Identifier) 패턴입니다. 소스 복제 보안 참조 없이 BuildConfig
를 생성하고 해당 Git 소스 URI가 보안 주석의 URI 패턴과 일치하는 경우 OpenShift Container Platform은 BuildConfig
에 해당 보안에 대한 참조를 자동으로 삽입합니다.
사전 요구 사항
URI 패턴은 다음으로 구성되어야 합니다.
-
유효 스키마:
*://
,git://
,http://
,https://
또는ssh://
-
호스트: *' 또는 유효한 호스트 이름이나 필요한 경우 앞에
*.
가 있는 IP 주소 -
경로:
/*
또는/
뒤에*
문자를 선택적으로 포함하는 모든 문자
위의 모든 항목에서 *
문자는 와일드카드로 해석됩니다.
URI 패턴은 RFC3986을 준수하는 Git 소스 URI와 일치해야 합니다. URI 패턴에 사용자 이름(또는 암호) 구성 요소를 포함하지 마십시오.
예를 들어 Git 리포지토리 URL에 ssh://git@bitbucket.atlassian.com:7999/ATLASSIAN jira.git
을 사용하는 경우 소스 보안을 ssh://bitbucket.atlassian.com:7999/*
(ssh://git@bitbucket.atlassian.com:7999/*
아님)로 지정해야 합니다.
$ oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=ssh://bitbucket.atlassian.com:7999/*'
프로세스
특정 BuildConfig
의 Git URI와 일치하는 보안이 여러 개인 경우 OpenShift Container Platform은 가장 긴 일치 항목이 있는 보안을 선택합니다. 이렇게 하면 다음 예와 같이 기본 덮어쓰기가 가능합니다.
다음 조각은 두 개의 부분적인 소스 복제 보안을 보여줍니다. 첫 번째는 HTTPS를 통해 액세스하는 도메인 mycorp.com
의 모든 서버와 일치하고, 두 번째는 서버 mydev1.mycorp.com
및 mydev2.mycorp.com
에 대한 액세스 권한을 덮어씁니다.
kind: Secret apiVersion: v1 metadata: name: matches-all-corporate-servers-https-only annotations: build.openshift.io/source-secret-match-uri-1: https://*.mycorp.com/* data: ... --- kind: Secret apiVersion: v1 metadata: name: override-for-my-dev-servers-https-only annotations: build.openshift.io/source-secret-match-uri-1: https://mydev1.mycorp.com/* build.openshift.io/source-secret-match-uri-2: https://mydev2.mycorp.com/* data: ...
다음을 사용하여 기존 보안에
build.openshift.io/source-secret-match-uri-
주석을 추가합니다.$ oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=https://*.mycorp.com/*'
2.3.4.2.2. 수동으로 소스 복제 보안 추가
소스 복제 보안은 BuildConfig
내부의 source
필드에 sourceSecret
필드를 추가한 후 사용자가 생성한 보안의 이름으로 설정하는 방식으로 빌드 구성에 수동으로 추가할 수 있습니다. 다음 예에서는 basicsecret
입니다.
apiVersion: "v1" kind: "BuildConfig" metadata: name: "sample-build" spec: output: to: kind: "ImageStreamTag" name: "sample-image:latest" source: git: uri: "https://github.com/user/app.git" sourceSecret: name: "basicsecret" strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "python-33-centos7:latest"
프로세스
oc set build-secret
명령을 사용하여 기존 빌드 구성에 소스 복제 보안을 설정할 수도 있습니다.
기존 빌드 구성에 소스 복제 보안을 설정하려면 다음 명령을 입력합니다.
$ oc set build-secret --source bc/sample-build basicsecret
2.3.4.2.3. .gitconfig 파일에서 보안 생성
애플리케이션 복제에서 .gitconfig
파일을 사용하는 경우 이 파일을 포함하는 보안을 생성할 수 있습니다. 빌더 서비스 계정에 추가한 다음 BuildConfig
에 추가합니다.
프로세스
-
.gitconfig
파일에서 보안을 생성하려면 다음을 수행합니다.
$ oc create secret generic <secret_name> --from-file=<path/to/.gitconfig>
.gitconfig
파일의 http
섹션에 sslVerify=false
가 설정되어 있는 경우 SSL 확인을 해제할 수 있습니다.
[http] sslVerify=false
2.3.4.2.4. 보안 Git의 .gitconfig 파일에서 보안 생성
Git 서버가 양방향 SSL과 사용자 이름 및 암호로 보호되는 경우 소스 빌드에 인증서 파일을 추가하고 .gitconfig
파일의 인증서 파일에 참조를 추가해야 합니다.
사전 요구 사항
- Git 자격 증명이 있어야 합니다.
프로세스
소스 빌드에 인증서 파일을 추가하고 .gitconfig
파일의 인증서 파일에 대한 참조를 추가합니다.
-
애플리케이션 소스 코드의
/var/run/secrets/openshift.io/source/
폴더에client.crt
,cacert.crt
,client.key
파일을 추가합니다. 서버의
.gitconfig
파일에서 다음 예에 표시된[http]
섹션을 추가합니다.# cat .gitconfig
출력 예
[user] name = <name> email = <email> [http] sslVerify = false sslCert = /var/run/secrets/openshift.io/source/client.crt sslKey = /var/run/secrets/openshift.io/source/client.key sslCaInfo = /var/run/secrets/openshift.io/source/cacert.crt
보안을 생성합니다.
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ 1 --from-literal=password=<password> \ 2 --from-file=.gitconfig=.gitconfig \ --from-file=client.crt=/var/run/secrets/openshift.io/source/client.crt \ --from-file=cacert.crt=/var/run/secrets/openshift.io/source/cacert.crt \ --from-file=client.key=/var/run/secrets/openshift.io/source/client.key
암호를 다시 입력하지 않으려면 빌드에서 S2I(Source-to-Image) 이미지를 지정해야 합니다. 그러나 리포지토리를 복제할 수 없는 경우 빌드를 승격하려면 사용자 이름과 암호를 계속 지정해야 합니다.
추가 리소스
-
애플리케이션 소스 코드의
/var/run/secrets/openshift.io/source/
폴더입니다.
2.3.4.2.5. 소스 코드 기본 인증에서 보안 생성
기본 인증에는 --username
및 --password
의 조합 또는 SCM(소프트웨어 구성 관리) 서버에 대해 인증하는 토큰이 필요합니다.
사전 요구 사항
- 개인 리포지토리에 액세스할 수 있는 사용자 이름 및 암호입니다.
프로세스
먼저 보안을 생성한 후
--username
및--password
를 사용하여 개인 리포지토리에 액세스합니다.$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --type=kubernetes.io/basic-auth
토큰을 사용하여 기본 인증 보안을 생성합니다.
$ oc create secret generic <secret_name> \ --from-literal=password=<token> \ --type=kubernetes.io/basic-auth
2.3.4.2.6. 소스 코드 SSH 키 인증에서 보안 생성
SSH 키 기반 인증에는 개인 SSH 키가 필요합니다.
리포지토리 키는 일반적으로 $HOME/.ssh/
디렉터리에 있으며 기본적으로 이름이 id_dsa.pub
, id_ecdsa.pub
, id_ed25519.pub
또는 id_rsa.pub
입니다.
프로세스
SSH 키 자격 증명을 생성합니다.
$ ssh-keygen -t ed25519 -C "your_email@example.com"
참고SSH 키의 암호를 생성하면 OpenShift Container Platform이 빌드되지 않습니다. 암호를 입력하라는 메시지가 표시되면 비워 두십시오.
두 파일(공개 키 및 해당 개인 키(
id_dsa
,id_ecdsa
,id_ed25519
또는id_rsa
))이 생성됩니다. 두 파일이 모두 있는 상태에서 공개 키를 업로드하는 방법에 대한 SCM(소스 제어 관리) 시스템의 설명서를 참조하십시오. 개인 키는 개인 리포지토리에 액세스하는 데 사용됩니다.SSH 키를 사용하여 개인 리포지토리에 액세스하기 전에 보안을 생성합니다.
$ oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/known_hosts> \ 1 --type=kubernetes.io/ssh-auth
- 1
- 선택 사항: 이 필드를 추가하면 엄격한 서버 호스트 키 확인이 가능합니다.
주의시크릿을 생성하는 동안
known_hosts
파일을 건너뛰면 잠재적인 MIT(man-in-the-middle) 공격에 빌드가 취약해집니다.참고known_hosts
파일에 소스 코드 호스트의 항목이 포함되어 있는지 확인합니다.
2.3.4.2.7. 신뢰할 수 있는 소스 코드 인증 기관에서 보안 생성
Git 복제 작업 중 신뢰할 수 있는 일련의 TLS(Transport Layer Security) CA(인증 기관)가 OpenShift Container Platform 인프라 이미지로 빌드됩니다. Git 서버에서 자체 서명된 인증서 또는 이미지에서 신뢰할 수 없는 인증 기관에서 서명한 인증서를 사용하는 경우 인증서가 포함된 보안을 생성하거나 TLS 확인을 비활성화할 수 있습니다.
CA 인증서에 대한 보안을 생성하는 경우 OpenShift Container Platform에서는 Git 복제 작업 중 Git 서버에 액세스합니다. 이 방법을 사용하면 제공되는 모든 TLS 인증서를 허용하는 Git SSL 확인을 비활성화하는 것보다 더 안전합니다.
프로세스
CA 인증서 파일을 사용하여 보안을 생성합니다.
CA에서 중간 인증 기관을 사용하는 경우
ca.crt
파일의 모든 CA 인증서를 결합합니다. 다음 명령을 실행합니다.$ cat intermediateCA.crt intermediateCA.crt rootCA.crt > ca.crt
보안을 생성합니다.
$ oc create secret generic mycert --from-file=ca.crt=</path/to/file> 1
- 1
- 키 이름으로
ca.crt
를 사용해야 합니다.
2.3.4.2.8. 소스 보안 조합
특정 요구 사항에 맞는 소스 복제 보안을 생성하기 위해 다양한 방법을 결합할 수 있습니다.
2.3.4.2.8.1. .gitconfig
파일을 사용하여 SSH 기반 인증 보안 생성
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: .gitconfig
파일을 사용하는 SSH 기반 인증 보안).
사전 요구 사항
- SSH 인증
- .gitconfig 파일
프로세스
.gitconfig
파일을 사용하여 SSH 기반 인증 보안을 생성하려면 다음을 실행합니다.$ oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/.gitconfig> \ --type=kubernetes.io/ssh-auth
2.3.4.2.8.2. .gitconfig 파일 및 CA 인증서를 결합하는 보안 생성
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: .gitconfig
파일 및 CA(인증 기관) 인증서를 결합하는 보안).
사전 요구 사항
- .gitconfig 파일
- CA 인증서
프로세스
.gitconfig
파일 및 CA 인증서를 결합하는 보안을 생성하려면 다음을 실행합니다.$ oc create secret generic <secret_name> \ --from-file=ca.crt=<path/to/certificate> \ --from-file=<path/to/.gitconfig>
2.3.4.2.8.3. CA 인증서를 사용하여 기본 인증 보안 생성
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: 기본 인증 및 CA(인증 기관) 인증서를 결합하는 보안).
사전 요구 사항
- 기본 인증 자격 증명
- CA 인증서
프로세스
CA 인증서로 기본 인증 보안을 생성하려면 다음을 실행합니다.
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=ca-cert=</path/to/file> \ --type=kubernetes.io/basic-auth
2.3.4.2.8.4. .gitconfig 파일을 사용하여 기본 인증 보안 생성
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: 기본 인증 및 .gitconfig
파일을 결합하는 보안 ).
사전 요구 사항
- 기본 인증 자격 증명
-
.gitconfig
파일
프로세스
.gitconfig
파일을 사용하여 기본 인증 보안을 생성하려면 다음을 실행합니다.$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=</path/to/.gitconfig> \ --type=kubernetes.io/basic-auth
2.3.4.2.8.5. .gitconfig 파일 및 CA 인증서를 사용하여 기본 인증 보안 생성
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: 기본 인증, .gitconfig
파일, CA(인증 기관) 인증서를 결합하는 보안).
사전 요구 사항
- 기본 인증 자격 증명
-
.gitconfig
파일 - CA 인증서
프로세스
.gitconfig
파일 및 CA 인증서를 사용하여 기본 인증 보안을 생성하려면 다음을 실행합니다.$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=</path/to/.gitconfig> \ --from-file=ca-cert=</path/to/file> \ --type=kubernetes.io/basic-auth
2.3.5. 바이너리(로컬) 소스
로컬 파일 시스템의 콘텐츠를 빌더로 스트리밍하는 것을 Binary
빌드라고 합니다. 이러한 빌드의 경우 BuildConfig.spec.source.type
의 해당 값이 Binary
입니다.
이 소스 유형은 oc start-build
를 사용할 때만 활용하므로 고유합니다.
바이너리 유형 빌드에서는 로컬 파일 시스템의 콘텐츠를 스트리밍해야 하므로 이미지 변경 트리거와 같이 바이너리 유형 빌드를 자동으로 트리거할 수 없습니다. 바이너리 파일을 제공할 수 없기 때문입니다. 마찬가지로 웹 콘솔에서 바이너리 유형 빌드를 시작할 수 없습니다.
바이너리 빌드를 사용하려면 다음 옵션 중 하나를 사용하여 oc start-build
를 호출합니다.
-
--from-file
: 지정한 파일의 콘텐츠가 빌더에 바이너리 스트림으로 전송됩니다. 파일에 URL을 지정할 수도 있습니다. 그러면 빌더에서 빌드 컨텍스트 상단에 있는 것과 동일한 이름으로 파일에 데이터를 저장합니다. -
--from-dir
및--from-repo
: 콘텐츠가 보관되고 빌더에 바이너리 스트림으로 전송됩니다. 그러면 빌더가 빌드 컨텍스트 디렉터리 내에서 아카이브 콘텐츠를 추출합니다.--from-dir
을 사용하면 추출된 아카이브에 URL을 지정할 수도 있습니다. -
--from-archive
: 지정하는 아카이브가 빌더로 전송되며 빌드 컨텍스트 디렉터리 내에서 추출됩니다. 이 옵션은--from-dir
과 동일하게 작동합니다. 이러한 옵션에 대한 인수가 디렉터리인 경우 먼저 호스트에서 아카이브가 생성됩니다.
위에 나열된 각 사례에서 다음을 수행합니다.
-
BuildConfig
에 이미Binary
소스 유형이 정의되어 있는 경우 효과적으로 무시되고 클라이언트에서 전송하는 내용으로 교체됩니다. -
BuildConfig
에Git
소스 유형이 정의되어 있는 경우Binary
및Git
을 함께 사용할 수 없으므로 해당 BuildConfig가 동적으로 비활성화되고 빌더에 제공하는 바이너리 스트림의 데이터에 우선순위가 지정됩니다.
HTTP 또는 HTTPS 스키마를 사용하여 파일 이름 대신 URL을 --from-file
및 --from-archive
로 전달할 수 있습니다. URL과 함께 --from-file
을 사용하는 경우 빌더 이미지의 파일 이름은 웹 서버에서 전송한 Content-Disposition
헤더 또는 헤더가 없는 경우 URL 경로의 마지막 구성 요소에 따라 결정됩니다. 지원되는 인증 형식이 없는 경우 사용자 정의 TLS 인증서를 사용하거나 인증서 검증 작업을 비활성화할 수 없습니다.
oc new-build --binary=true
를 사용하면 명령에서 바이너리 빌드와 관련된 제한을 적용합니다. 생성된 BuildConfig
의 소스 유형이 Binary
이므로 이 BuildConfig
로 빌드를 실행하는 유일한 방법은 --from
옵션 중 하나와 함께 oc start-build
를 사용하여 필수 바이너리 데이터를 제공하는 것입니다.
Dockerfile 및 contextDir
소스 옵션에는 바이너리 빌드에서 특별한 의미가 있습니다.
Dockerfile은 바이너리 빌드 소스와 함께 사용할 수 있습니다. Dockerfile을 사용하고 바이너리 스트림이 아카이브인 경우 해당 콘텐츠는 아카이브의 모든 Dockerfile에 대한 대체 Dockerfile 역할을 합니다. Dockerfile을 --from-file
인수와 함께 사용하고 파일 인수의 이름이 Dockerfile인 경우 Dockerfile의 값이 바이너리 스트림의 값을 대체합니다.
추출된 아카이브 콘텐츠를 캡슐화하는 바이너리 스트림의 경우 contextDir
필드의 값이 아카이브 내 하위 디렉터리로 해석되고, 유효한 경우 빌드를 실행하기 전에 빌더가 해당 하위 디렉터리로 변경됩니다.
2.3.6. 입력 보안 및 구성 맵
입력 보안 및 구성 맵의 콘텐츠가 빌드 출력 컨테이너 이미지에 표시되지 않도록 하려면 Docker 빌드 및 S2I 빌드 전략의 빌드 볼륨을 사용합니다.
일부 시나리오에서는 빌드 작업을 수행하려면 종속 리소스에 액세스하기 위해 자격 증명 또는 기타 구성 데이터가 필요합니다. 그러나 이러한 정보가 소스 제어에 배치되는 것은 바람직하지 않습니다. 이러한 용도를 위해 입력 보안 및 입력 구성 맵을 정의할 수 있습니다.
예를 들어 Maven으로 Java 애플리케이션을 빌드할 때 개인 키로 액세스할 수 있는 Maven Central 또는 JCenter의 개인 미러를 설정할 수 있습니다. 해당 개인 미러에서 라이브러리를 다운로드하려면 다음을 제공해야 합니다.
-
미러의 URL 및 연결 설정으로 구성된
settings.xml
파일 -
설정 파일에서 참조하는 개인 키(예:
~/.ssh/id_rsa
)
보안상의 이유로 애플리케이션 이미지에 자격 증명을 노출해서는 안 됩니다.
이 예제에서는 Java 애플리케이션을 설명하지만 /etc/ssl/certs
디렉터리, API 키 또는 토큰, 라이선스 파일 등에 SSL 인증서를 추가하는 데 동일한 접근 방식을 사용할 수 있습니다.
2.3.6.1. 비밀이란?
Secret
오브젝트 유형에서는 암호, OpenShift Container Platform 클라이언트 구성 파일, dockercfg
파일, 개인 소스 리포지토리 자격 증명 등과 같은 중요한 정보를 보유하는 메커니즘을 제공합니다. 보안은 Pod에서 중요한 콘텐츠를 분리합니다. 볼륨 플러그인을 사용하여 컨테이너에 보안을 마운트하거나 시스템에서 시크릿을 사용하여 Pod 대신 작업을 수행할 수 있습니다.
YAML 보안 오브젝트 정의
apiVersion: v1 kind: Secret metadata: name: test-secret namespace: my-namespace type: Opaque 1 data: 2 username: dmFsdWUtMQ0K 3 password: dmFsdWUtMg0KDQo= stringData: 4 hostname: myapp.mydomain.com 5
2.3.6.1.1. 보안 속성
주요 속성은 다음과 같습니다.
- 보안 데이터는 정의와는 별도로 참조할 수 있습니다.
- 보안 데이터 볼륨은 임시 파일 저장 기능(tmpfs)에 의해 지원되며 노드에 저장되지 않습니다.
- 보안 데이터는 네임스페이스 내에서 공유할 수 있습니다.
2.3.6.1.2. 보안 유형
type
필드의 값은 보안의 키 이름과 값의 구조를 나타냅니다. 유형을 사용하면 보안 오브젝트에 사용자 이름과 키를 적용할 수 있습니다. 검증을 수행하지 않으려면 기본값인 opaque
유형을 사용합니다.
보안 데이터에 특정 키 이름이 있는지 확인하기 위해 서버 측 최소 검증을 트리거하려면 다음 유형 중 하나를 지정합니다.
-
kubernetes.io/service-account-token
. 서비스 계정 토큰을 사용합니다. -
kubernetes.io/dockercfg
. 필수 Docker 자격 증명으로.dockercfg
파일을 사용합니다. -
kubernetes.io/dockerconfigjson
. 필수 Docker 자격 증명으로.docker/config.json
파일을 사용합니다. -
kubernetes.io/basic-auth
. 기본 인증에 사용합니다. -
kubernetes.io/ssh-auth
. SSH 키 인증에 사용합니다. -
kubernetes.io/tls
. TLS 인증 기관에 사용합니다.
검증을 수행하지 않으려면 type= Opaque
를 지정합니다. 즉 보안에서 키 이름 또는 값에 대한 규칙을 준수하도록 요청하지 않습니다. opaque
보안에는 임의의 값을 포함할 수 있는 비정형 key:value
쌍을 사용할 수 있습니다.
example.com/my-secret-type
과 같은 다른 임의의 유형을 지정할 수 있습니다. 이러한 유형은 서버 측에 적용되지 않지만 보안 생성자가 해당 유형의 키/값 요구 사항을 준수하도록 의도했음을 나타냅니다.
2.3.6.1.3. 보안 업데이트
보안 값을 수정해도 이미 실행 중인 Pod에서 사용하는 값은 동적으로 변경되지 않습니다. 보안을 변경하려면 동일한 PodSpec
을 사용하는 일부 경우에서 원래 Pod를 삭제하고 새 Pod를 생성해야 합니다.
보안 업데이트 작업에서는 새 컨테이너 이미지를 배포하는 것과 동일한 워크플로를 따릅니다. kubectl rolling-update
명령을 사용할 수 있습니다.
보안의 resourceVersion
값은 참조 시 지정되지 않습니다. 따라서 Pod가 시작되는 동시에 보안이 업데이트되는 경우 Pod에 사용되는 보안의 버전이 정의되지 않습니다.
현재는 Pod가 생성될 때 사용된 보안 오브젝트의 리소스 버전을 확인할 수 없습니다. 컨트롤러에서 이전 resourceVersion
을 사용하여 재시작할 수 있도록 Pod에서 이 정보를 보고하도록 계획되어 있습니다. 그동안 기존 보안 데이터를 업데이트하지 말고 고유한 이름으로 새 보안을 생성하십시오.
2.3.6.2. 보안 생성
먼저 보안을 생성한 후 해당 보안을 사용하는 Pod를 생성해야 합니다.
보안 생성 시 다음을 수행합니다.
- 보안 데이터를 사용하여 보안 오브젝트를 생성합니다.
- Pod 서비스 계정을 업데이트하여 보안에 대한 참조를 허용합니다.
-
보안을 환경 변수로 사용하거나
secret
볼륨을 사용하여 파일로 사용하는 Pod를 생성합니다.
프로세스
create 명령을 사용하여 JSON 또는 YAML 파일에서 보안 오브젝트를 생성합니다.
$ oc create -f <filename>
예를 들어 로컬
.docker/config.json
파일에서 보안을 생성할 수 있습니다.$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
이 명령은
dockerhub
라는 보안의 JSON 사양을 생성한 후 오브젝트를 생성합니다.YAML Opaque Secret 오브젝트 정의
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque 1 data: username: dXNlci1uYW1l password: cGFzc3dvcmQ=
- 1
- 불투명 보안을 지정합니다.
Docker 구성 JSON 파일 시크릿 오브젝트 정의
apiVersion: v1 kind: Secret metadata: name: aregistrykey namespace: myapps type: kubernetes.io/dockerconfigjson 1 data: .dockerconfigjson:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg== 2
2.3.6.3. 보안 사용
보안을 생성한 후에는 해당 보안을 참조하는 Pod를 생성하고 로그를 가져오고 해당 Pod를 삭제할 수 있습니다.
프로세스
보안을 참조할 Pod를 생성합니다.
$ oc create -f <your_yaml_file>.yaml
로그를 가져옵니다.
$ oc logs secret-example-pod
Pod를 삭제합니다.
$ oc delete pod secret-example-pod
추가 리소스
보안 데이터가 있는 YAML 파일의 예:
파일 4개를 생성할 YAML 보안
apiVersion: v1 kind: Secret metadata: name: test-secret data: username: dmFsdWUtMQ0K 1 password: dmFsdWUtMQ0KDQo= 2 stringData: hostname: myapp.mydomain.com 3 secret.properties: |- 4 property1=valueA property2=valueB
보안 데이터로 볼륨의 파일을 채우는 Pod의 YAML
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "cat /etc/secret-volume/*" ] volumeMounts: # name must match the volume name below - name: secret-volume mountPath: /etc/secret-volume readOnly: true volumes: - name: secret-volume secret: secretName: test-secret restartPolicy: Never
보안 데이터로 환경 변수를 채우는 Pod의 YAML
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "export" ] env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: name: test-secret key: username restartPolicy: Never
보안 데이터로 환경 변수를 채우는 빌드 구성의 YAML
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: secret-example-bc spec: strategy: sourceStrategy: env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: name: test-secret key: username
2.3.6.4. 입력 보안 및 구성 맵 추가
소스 제어에 배치하지 않고 빌드에 자격 증명 및 기타 구성 데이터를 제공하기 위해 입력 보안 및 입력 구성 맵을 정의할 수 있습니다.
일부 시나리오에서는 빌드 작업을 수행하려면 종속 리소스에 액세스하기 위해 자격 증명 또는 기타 구성 데이터가 필요합니다. 소스 제어에 배치하지 않고 해당 정보를 사용할 수 있도록 하려면 입력 보안 및 입력 구성 맵을 정의할 수 있습니다.
절차
입력 보안이나 구성 맵 또는 둘 다를 기존 BuildConfig
오브젝트에 추가하려면 다음을 수행합니다.
ConfigMap
오브젝트가 없는 경우 해당 오브젝트를 생성합니다.$ oc create configmap settings-mvn \ --from-file=settings.xml=<path/to/settings.xml>
그러면
settings-mvn
이라는 새 구성 맵이 생성됩니다. 이 맵에는settings.xml
파일의 일반 텍스트 내용이 포함됩니다.작은 정보다음 YAML을 적용하여 구성 맵을 만들 수 있습니다.
apiVersion: core/v1 kind: ConfigMap metadata: name: settings-mvn data: settings.xml: | <settings> … # Insert maven settings here </settings>
Secret
오브젝트가 없는 경우 해당 오브젝트를 생성합니다.$ oc create secret generic secret-mvn \ --from-file=ssh-privatekey=<path/to/.ssh/id_rsa> --type=kubernetes.io/ssh-auth
그러면
secret-mvn
이라는 새 보안이 생성됩니다. 이 보안에는id_rsa
개인 키의 base64 인코딩 콘텐츠가 포함됩니다.작은 정보다음 YAML을 적용하여 입력 보안을 생성할 수도 있습니다.
apiVersion: core/v1 kind: Secret metadata: name: secret-mvn type: kubernetes.io/ssh-auth data: ssh-privatekey: | # Insert ssh private key, base64 encoded
다음과 같이 기존
BuildConfig
오브젝트의source
섹션에 구성 맵과 보안을 추가합니다.source: git: uri: https://github.com/wildfly/quickstart.git contextDir: helloworld configMaps: - configMap: name: settings-mvn secrets: - secret: name: secret-mvn
새 BuildConfig
오브젝트에 구성 맵과 보안을 포함하려면 다음 명령을 실행합니다.
$ oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn” \ --build-config-map "settings-mvn"
빌드 중 settings.xml
및 id_rsa
파일이 소스 코드가 있는 디렉터리로 복사됩니다. OpenShift Container Platform S2I 빌더 이미지의 경우 이 디렉터리는 Dockerfile
에 WORKDIR
명령을 사용하여 설정하는 이미지 작업 디렉터리입니다. 다른 디렉터리를 지정하려면 정의에 destinationDir
을 추가합니다.
source: git: uri: https://github.com/wildfly/quickstart.git contextDir: helloworld configMaps: - configMap: name: settings-mvn destinationDir: ".m2" secrets: - secret: name: secret-mvn destinationDir: ".ssh"
새 BuildConfig
오브젝트를 생성할 때 대상 디렉터리를 지정할 수도 있습니다.
$ oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn:.ssh” \ --build-config-map "settings-mvn:.m2"
두 경우 모두 settings.xml
파일은 빌드 환경의 ./.m2
디렉터리에 추가되고 id_rsa
키는 ./.ssh
디렉터리에 추가됩니다.
2.3.6.5. S2I(Source-to-Image) 전략
Source
전략을 사용하면 정의된 모든 입력 보안이 해당 destinationDir
에 복사됩니다. destinationDir
을 비워 두면 보안이 빌더 이미지의 작업 디렉터리에 배치됩니다.
destinationDir
이 상대 경로인 경우 동일한 규칙이 사용됩니다. 보안은 이미지 작업 디렉터리의 상대 경로에 배치됩니다. destinationDir
경로의 최종 디렉터리가 빌더 이미지에 없는 경우 해당 디렉터리가 생성됩니다. destinationDir
의 선행 디렉터리가 모두 존재해야 합니다. 없는 경우 오류가 발생합니다.
입력 보안은 전역 쓰기 가능으로 추가되고 0666
권한이 있으며 assemble
스크립트 실행 후 크기가 0으로 잘립니다. 즉 보안 파일은 결과 이미지에 존재하지만 보안상의 이유로 비어 있습니다.
assemble
스크립트가 완료되면 입력 구성 맵이 잘리지 않습니다.
2.3.6.6. Docker 전략
docker 전략을 사용하는 경우 Dockerfile의 ADD
및 COPY
명령을 사용하여 정의된 모든 입력 보안을 컨테이너 이미지에 추가할 수 있습니다.
보안의 destinationDir
을 지정하지 않으면 Dockerfile이 있는 동일한 디렉터리로 파일이 복사됩니다. 상대 경로를 destinationDir
로 지정하면 보안이 Dockerfile 위치와 상대되는 해당 디렉터리에 복사됩니다. 그러면 Docker 빌드 작업에서 빌드 중 사용하는 컨텍스트 디렉터리의 일부로 보안 파일을 사용할 수 있습니다.
보안 및 구성 맵 데이터를 참조하는 Dockerfile의 예
FROM centos/ruby-22-centos7 USER root COPY ./secret-dir /secrets COPY ./config / # Create a shell script that will output secrets and ConfigMaps when the image is run RUN echo '#!/bin/sh' > /input_report.sh RUN echo '(test -f /secrets/secret1 && echo -n "secret1=" && cat /secrets/secret1)' >> /input_report.sh RUN echo '(test -f /config && echo -n "relative-configMap=" && cat /config)' >> /input_report.sh RUN chmod 755 /input_report.sh CMD ["/bin/sh", "-c", "/input_report.sh"]
일반적으로 사용자는 해당 이미지에서 실행되는 컨테이너에 보안이 표시되지 않도록 최종 애플리케이션 이미지에서 입력 보안을 제거합니다. 그러나 보안은 추가된 계층에 있는 이미지 자체에 계속 있습니다. 이 제거는 Dockerfile 자체에 포함됩니다.
입력 보안 및 구성 맵의 콘텐츠가 빌드 출력 컨테이너 이미지에 표시되지 않도록 하고 이러한 제거 프로세스를 모두 방지하려면 Docker 빌드 전략에서 빌드 볼륨을 사용합니다.
2.3.6.7. 사용자 정의 전략
사용자 정의 전략을 사용하는 경우 정의된 입력 보안 및 구성 맵을 /var/run/secrets/openshift.io/build
디렉터리의 빌더 컨테이너에서 모두 사용할 수 있습니다. 사용자 정의 빌드 이미지에서는 이러한 보안 및 구성 맵을 적절하게 사용해야 합니다. 사용자 정의 전략을 사용하면 사용자 정의 전략 옵션에 설명된 대로 보안을 정의할 수 있습니다.
기존 전략 보안과 입력 보안은 기술적으로 차이가 없습니다. 하지만 빌더 이미지는 빌드 사용 사례에 따라 해당 항목을 구분하고 다르게 사용할 수 있습니다.
입력 보안은 항상 /var/run/secrets/openshift.io/build
디렉터리에 마운트되거나 빌더에서 전체 빌드 오브젝트를 포함하는 $BUILD
환경 변수를 구문 분석할 수 있습니다.
레지스트리에 대한 가져오기 보안이 네임스페이스와 노드 모두에 있는 경우 빌드는 기본적으로 네임스페이스의 가져오기 보안을 사용합니다.
2.3.7. 외부 아티팩트
바이너리 파일을 소스 리포지토리에 저장하지 않는 것이 좋습니다. 따라서 빌드 프로세스 중 Java .jar
종속 항목과 같은 추가 파일을 가져오는 빌드를 정의해야 합니다. 이 작업을 수행하는 방법은 사용 중인 빌드 전략에 따라 다릅니다.
소스 빌드 전략의 경우 assemble
스크립트에 적절한 쉘 명령을 배치해야 합니다.
.s2i/bin/assemble
파일
#!/bin/sh APP_VERSION=1.0 wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar
.s2i/bin/run
파일
#!/bin/sh exec java -jar app.jar
Docker 빌드 전략의 경우 Dockerfile을 수정하고 RUN
명령을 사용하여 쉘 명령을 호출해야 합니다.
Dockerfile 발췌 내용
FROM jboss/base-jdk:8 ENV APP_VERSION 1.0 RUN wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar EXPOSE 8080 CMD [ "java", "-jar", "app.jar" ]
실제로 Dockerfile 또는 assemble
스크립트를 업데이트하는 대신 BuildConfig
에 정의된 환경 변수를 사용하여 다운로드할 특정 파일을 사용자 정의할 수 있도록 파일 위치에 대한 환경 변수를 사용할 수 있습니다.
다음과 같이 환경 변수를 정의하는 다양한 방법 중에서 선택할 수 있습니다.
-
.s2i/environment
파일 사용(소스 빌드 전략 전용) -
BuildConfig
에 설정 -
oc start-build --env
를 사용하여 명시적으로 제공(수동으로 트리거하는 빌드 전용)
2.3.8. 개인 레지스트리에 Docker 자격 증명 사용
개인 컨테이너 레지스트리에 유효한 자격 증명이 있는 docker/config.json
파일을 사용하여 빌드를 제공할 수 있습니다. 이 경우 출력 이미지를 개인 컨테이너 이미지 레지스트리로 내보내거나 인증이 필요한 개인 컨테이너 이미지 레지스트리에서 빌더 이미지를 가져올 수 있습니다.
동일한 레지스트리 내에 여러 리포지토리의 인증 정보를 제공할 수 있으며, 각각 해당 레지스트리 경로에 고유한 인증 정보를 제공합니다.
OpenShift Container Platform 컨테이너 이미지 레지스트리의 경우 OpenShift Container Platform에서 보안이 자동으로 생성되므로 필요하지 않습니다.
.docker/config.json
파일은 기본적으로 홈 디렉터리에 있으며 다음과 같은 형식을 취합니다.
auths: index.docker.io/v1/: 1 auth: "YWRfbGzhcGU6R2labnRib21ifTE=" 2 email: "user@example.com" 3 docker.io/my-namespace/my-user/my-image: 4 auth: "GzhYWRGU6R2fbclabnRgbkSp="" email: "user@example.com" docker.io/my-namespace: 5 auth: "GzhYWRGU6R2deesfrRgbkSp="" email: "user@example.com"
여러 컨테이너 이미지 레지스트리를 정의하거나 동일한 레지스트리에 여러 리포지토리를 정의할 수 있습니다. 또는 docker login
명령을 실행하여 이 파일에 인증 항목을 추가할 수도 있습니다. 파일이 없는 경우 생성됩니다.
Kubernetes는 구성 및 암호를 저장하는 데 사용할 수 있는 Secret
오브젝트를 제공합니다.
사전 요구 사항
-
.docker/config.json
파일이 있어야 합니다.
프로세스
로컬
.docker/config.json
파일에서 보안을 생성합니다.$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
이 명령은
dockerhub
라는 보안의 JSON 사양을 생성한 후 오브젝트를 생성합니다.BuildConfig
의output
섹션에pushSecret
필드를 추가하고 생성한secret
이름(위 예의 경우dockerhub
)으로 설정합니다.spec: output: to: kind: "DockerImage" name: "private.registry.com/org/private-image:latest" pushSecret: name: "dockerhub"
oc set build-secret
명령을 사용하여 빌드 구성에 내보내기 보안을 설정할 수 있습니다.$ oc set build-secret --push bc/sample-build dockerhub
pushSecret
필드를 지정하는 대신 빌드에서 사용하는 서비스 계정에 내보내기 보안을 연결할 수도 있습니다. 기본적으로 빌드에서는builder
서비스 계정을 사용합니다. 보안에 빌드의 출력 이미지를 호스팅하는 리포지토리와 일치하는 자격 증명이 포함된 경우 내보내기 보안이 빌드에 자동으로 추가됩니다.$ oc secrets link builder dockerhub
빌드 전략 정의의 일부인
pullSecret
필드를 지정하여 개인 컨테이너 이미지 레지스트리에서 빌더 컨테이너 이미지를 가져옵니다.strategy: sourceStrategy: from: kind: "DockerImage" name: "docker.io/user/private_repository" pullSecret: name: "dockerhub"
oc set build-secret
명령을 사용하여 빌드 구성에 가져오기 보안을 설정할 수 있습니다.$ oc set build-secret --pull bc/sample-build dockerhub
참고이 예제에서는 소스 빌드에
pullSecret
을 사용하지만 Docker 및 Custom 빌드에도 적용할 수 있습니다.pullSecret
필드를 지정하는 대신 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결할 수도 있습니다. 기본적으로 빌드에서는builder
서비스 계정을 사용합니다. 보안에 빌드의 입력 이미지를 호스팅하는 리포지토리와 일치하는 자격 증명이 포함된 경우 가져오기 보안이 빌드에 자동으로 추가됩니다.pullSecret
필드를 지정하는 대신 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결하려면 다음을 실행합니다.$ oc secrets link builder dockerhub
참고이 기능을 사용하려면
BuildConfig
사양에from
이미지를 지정해야 합니다.oc new-build
또는oc new-app
으로 생성한 Docker 전략 빌드는 특정 상황에서 이러한 작업을 수행하지 못할 수 있습니다.
2.3.9. 빌드 환경
Pod 환경 변수와 마찬가지로 빌드 환경 변수는 다른 리소스 또는 변수에 대한 참조 측면에서 Downward API를 사용하여 정의할 수 있습니다. 여기에는 잘 알려진 몇 가지 예외가 있습니다.
oc set env
명령을 사용하면 BuildConfig
에 정의된 환경 변수도 관리할 수 있습니다.
빌드 환경 변수에서 valueFrom
을 사용하여 컨테이너 리소스를 참조하는 기능은 컨테이너를 생성하기 전에 참조를 확인하기 때문에 지원되지 않습니다.
2.3.9.1. 빌드 필드를 환경 변수로 사용
값을 가져올 필드의 JsonPath
에 fieldPath
환경 변수 소스를 설정하면 빌드 오브젝트에 대한 정보를 삽입할 수 있습니다.
Jenkins Pipeline 전략에서는 환경 변수에 valueFrom
구문을 지원하지 않습니다.
프로세스
fieldPath
환경 변수 소스를 값을 가져올 필드의JsonPath
로 설정합니다.env: - name: FIELDREF_ENV valueFrom: fieldRef: fieldPath: metadata.name
2.3.9.2. 보안을 환경 변수로 사용
valueFrom
구문을 사용하여 보안의 키 값을 환경 변수로 사용하도록 설정할 수 있습니다.
이 방법은 빌드 Pod 콘솔의 출력에 일반 텍스트로 시크릿을 표시합니다. 이를 방지하려면 입력 보안 및 구성 맵을 대신 사용합니다.
절차
보안을 환경 변수로 사용하려면
valueFrom
구문을 설정합니다.apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: secret-example-bc spec: strategy: sourceStrategy: env: - name: MYVAL valueFrom: secretKeyRef: key: myval name: mysecret
추가 리소스
2.3.10. 서비스 제공 인증서 보안
서비스 제공 인증서 보안은 즉시 사용 가능한 인증서가 필요한 복잡한 미들웨어 애플리케이션을 지원하기 위한 것입니다. 해당 설정은 관리자 툴에서 노드 및 마스터에 대해 생성하는 서버 인증서와 동일합니다.
프로세스
서비스와의 통신을 보호하려면 클러스터에서 서명된 제공 인증서/키 쌍을 네임스페이스의 보안에 생성하도록 합니다.
보안에 사용할 이름으로 설정된 값을 사용하여 서비스에
service.beta.openshift.io/serving-cert-secret-name
주석을 설정합니다.그러면
PodSpec
에서 해당 보안을 마운트할 수 있습니다. 사용 가능한 경우 Pod가 실행됩니다. 인증서는 내부 서비스 DNS 이름인<service.name>.<service.namespace>.svc
에 적합합니다.인증서 및 키는 PEM 형식이며 각각
tls.crt
및tls.key
에 저장됩니다. 인증서/키 쌍은 만료 시기가 다가오면 자동으로 교체됩니다. 보안의service.beta.openshift.io/expiry
주석에서 RFC3339 형식으로 된 만료 날짜를 확인합니다.
대부분의 경우 서비스 DNS 이름 <service.name>.<service.namespace>.svc
는 외부에서 라우팅할 수 없습니다. <service.name>.<service.namespace>.svc
는 주로 클러스터 내 또는 서비스 내 통신과 경로 재암호화에 사용됩니다.
기타 Pod는 해당 Pod에 자동으로 마운트되는 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
파일의 CA(인증 기관) 번들을 사용하여 내부 DNS 이름에만 서명되는 클러스터 생성 인증서를 신뢰할 수 있습니다.
이 기능의 서명 알고리즘은 x509.SHA256WithRSA
입니다. 직접 교대하려면 생성된 보안을 삭제합니다. 새 인증서가 생성됩니다.
2.3.11. 보안 제한 사항
보안을 사용하려면 Pod에서 보안을 참조해야 합니다. 보안은 다음 세 가지 방법으로 Pod에서 사용할 수 있습니다.
- 컨테이너에 환경 변수를 채우기 위해 사용.
- 하나 이상의 컨테이너에 마운트된 볼륨에서 파일로 사용.
- Pod에 대한 이미지를 가져올 때 kubelet으로 사용.
볼륨 유형 보안은 볼륨 메커니즘을 사용하여 데이터를 컨테이너에 파일로 작성합니다. imagePullSecrets
는 서비스 계정을 사용하여 네임스페이스의 모든 Pod에 보안을 자동으로 주입합니다.
템플릿에 보안 정의가 포함된 경우 템플릿에 제공된 보안을 사용할 수 있는 유일한 방법은 보안 볼륨 소스를 검증하고 지정된 오브젝트 참조가 유형이 Secret
인 오브젝트를 실제로 가리키는 것입니다. 따라서 보안을 생성한 후 해당 보안을 사용하는 Pod를 생성해야 합니다. 가장 효과적인 방법은 서비스 계정을 사용하여 자동으로 삽입되도록 하는 것입니다.
Secret API 오브젝트는 네임스페이스에 있습니다. 동일한 네임스페이스에 있는 Pod만 참조할 수 있습니다.
개별 보안은 1MB로 제한됩니다. 이는 대규모 보안이 생성되어 apiserver 및 kubelet 메모리가 소진되는 것을 막기 위한 것입니다. 그러나 작은 보안을 많이 생성해도 메모리가 소진될 수 있습니다.
2.4. 빌드 출력 관리
빌드 출력 관리에 대한 개요 및 지침은 다음 섹션에서 확인하십시오.
2.4.1. 빌드 출력
Docker 또는 S2I(source-to-image) 전략을 사용하는 빌드에서는 새 컨테이너 이미지를 생성합니다. 그런 다음 이미지를 Build
사양의 output
섹션에 지정된 컨테이너 이미지 레지스트리로 푸시됩니다.
출력 종류가 ImageStreamTag
인 경우 이미지를 통합 OpenShift 이미지 레지스트리로 푸시하고 지정된 이미지 스트림에 태그를 지정합니다. 출력 유형이 DockerImage
인 경우에는 출력 참조 이름이 Docker 내보내기 사양으로 사용됩니다. 사양은 레지스트리를 포함할 수 있으며 레지스트리가 지정되지 않은 경우 기본적으로 DockerHub로 설정됩니다. 빌드 사양의 출력 섹션이 비어 있으면 빌드 종료 시 이미지를 푸시하지 않습니다.
ImageStreamTag로 출력
spec: output: to: kind: "ImageStreamTag" name: "sample-image:latest"
Docker 내보내기 사양으로 출력
spec: output: to: kind: "DockerImage" name: "my-registry.mycompany.com:5000/myimages/myimage:tag"
2.4.2. 이미지 환경 변수 출력
Docker 및 S2I(Source-to-Image) 전략 빌드에서는 출력 이미지에 다음 환경 변수를 설정합니다.
변수 | 설명 |
---|---|
| 빌드 이름 |
| 빌드의 네임스페이스 |
| 빌드의 소스 URL |
| 빌드에 사용된 Git 참조 |
| 빌드에 사용된 소스 커밋 |
또한 모든 사용자 정의 환경 변수(예: S2I 또는 Docker 전략 옵션으로 구성된 환경 변수)도 출력 이미지 환경 변수 목록의 일부입니다.
2.4.3. 출력 이미지 라벨
Docker 및 S2I(Source-to-Image)의 빌드에서는 출력 이미지에 다음 라벨을 설정합니다.
레이블 | 설명 |
---|---|
| 빌드에 사용된 소스 커밋 작성자 |
| 빌드에 사용된 소스 커밋의 날짜 |
| 빌드에 사용된 소스 커밋의 해시 |
| 빌드에 사용된 소스 커밋의 메시지 |
| 소스에 지정된 분기 또는 참조 |
| 빌드의 소스 URL |
BuildConfig.spec.output.imageLabels
필드를 사용하여 빌드 구성에서 빌드하는 각 이미지에 적용할 사용자 정의 라벨 목록을 지정할 수도 있습니다.
빌드한 이미지에 적용할 사용자 정의 라벨
spec: output: to: kind: "ImageStreamTag" name: "my-image:latest" imageLabels: - name: "vendor" value: "MyCompany" - name: "authoritative-source-url" value: "registry.mycompany.com"
2.5. 빌드 전략 사용
다음 섹션에서는 지원되는 주요 빌드 전략과 이러한 전략을 사용하는 방법을 정의합니다.
2.5.1. Docker 빌드
OpenShift Container Platform은 Buildah를 사용하여 Dockerfile에서 컨테이너 이미지를 빌드합니다. Dockerfile을 사용하여 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 Dockerfile 참조 문서를 참조하십시오.
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정하는 경우 Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
2.5.1.1. Dockerfile FROM 이미지 교체
Dockerfile의 FROM
명령을 BuildConfig
오브젝트의 from
으로 교체할 수 있습니다. Dockerfile에서 다중 단계 빌드를 사용하는 경우 마지막 FROM
명령의 이미지가 교체됩니다.
프로세스
Dockerfile의 FROM
명령을 BuildConfig
오브젝트의 from
으로 교체
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
2.5.1.2. Dockerfile 경로 사용
기본적으로 Docker 빌드는 BuildConfig.spec.source.contextDir
필드에 지정된 컨텍스트의 루트에 있는 Dockerfile을 사용합니다.
dockerfilePath
필드를 사용하면 BuildConfig.spec.source.contextDir
필드와 상대되는 다른 경로를 사용하여 Dockerfile을 찾을 수 있습니다. 파일 이름은 기본 Dockerfile(예: MyDockerfile
) 또는 하위 디렉터리의 Dockerfile 경로(예: dockerfiles/app1/Dockerfile
)와 다를 수 있습니다.
프로세스
빌드에서 다른 경로를 사용하여 Dockerfile을 찾도록 dockerfilePath
필드를 사용하려면 다음과 같이 설정합니다.
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
2.5.1.3. Docker 환경 변수 사용
Docker 빌드 프로세스 및 생성된 이미지에 환경 변수를 사용할 수 있도록 빌드 구성의 dockerStrategy
정의에 환경 변수를 추가할 수 있습니다.
정의된 환경 변수는 FROM
명령 직후 단일 ENV
Dockerfile 명령으로 삽입되어 나중에 Dockerfile 내에서 참조할 수 있습니다.
프로세스
변수는 빌드 중 정의되고 출력 이미지에 유지되므로 해당 이미지를 실행하는 모든 컨테이너에도 존재합니다.
예를 들어 다음은 빌드 및 런타임 중 사용할 사용자 정의 HTTP 프록시를 정의합니다.
dockerStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
2.5.1.4. Docker 빌드 인수 추가
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정할 수 있습니다. 빌드 인수는 빌드가 시작될 때 Docker로 전달됩니다.
Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
절차
Docker 빌드 인수를 설정하려면 BuildConfig
오브젝트의 dockerStrategy
정의에 있는 buildArgs
배열에 항목을 추가합니다. 예를 들면 다음과 같습니다.
dockerStrategy: ... buildArgs: - name: "foo" value: "bar"
name
및 value
필드만 지원됩니다. valueFrom
필드의 설정은 모두 무시됩니다.
2.5.1.5. Docker 빌드가 포함된 계층 스쿼시링
Docker 빌드는 일반적으로 Dockerfile의 각 명령을 나타내는 계층을 생성합니다. imageOptimizationPolicy
를 SkipLayers
로 설정하면 모든 명령을 기본 이미지 상단의 단일 계층으로 병합합니다.
프로세스
imageOptimizationPolicy
를SkipLayers
로 설정합니다.strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
2.5.1.6. 빌드 볼륨 사용
실행 중인 빌드 볼륨을 마운트하여 출력 컨테이너 이미지에 유지되지 않는 정보에 대한 액세스 권한을 부여할 수 있습니다.
빌드 볼륨은 빌드 환경 또는 구성에만 필요한 리포지토리 자격 증명과 같은 중요한 정보를 제공합니다. 빌드 볼륨은 데이터가 출력 컨테이너 이미지에 유지될 수 있는 빌드 입력 과 다릅니다.
실행 중인 빌드가 데이터를 읽는 빌드 볼륨의 마운트 지점은 Pod 볼륨 마운트 와 기능이 비슷합니다.
절차
BuildConfig
오브젝트의dockerStrategy
정의에서volumes
배열에 빌드 볼륨을 추가합니다. 예를 들면 다음과 같습니다.spec: dockerStrategy: volumes: - name: secret-mvn 1 mounts: - destinationPath: /opt/app-root/src/.ssh 2 source: type: Secret 3 secret: secretName: my-secret 4 - name: settings-mvn 5 mounts: - destinationPath: /opt/app-root/src/.m2 6 source: type: ConfigMap 7 configMap: name: my-config 8 - name: my-csi-volume 9 mounts: - destinationPath: /opt/app-root/src/some_path 10 source: type: CSI 11 csi: driver: csi.sharedresource.openshift.io 12 readOnly: true 13 volumeAttributes: 14 attribute: value
- 1 5 9
- 필수 항목입니다. 고유한 이름입니다.
- 2 6 10
- 필수 항목입니다. 마운트 지점의 절대 경로입니다. 여기에는
..
또는:
이 포함되어서는 안되며 빌더에서 생성한 대상 경로와 충돌하지 않습니다./opt/app-root/src
는 많은 Red Hat S2I 지원 이미지의 기본 홈 디렉터리입니다. - 3 7 11
- 필수 항목입니다. 소스 유형,
ConfigMap
,Secret
또는CSI
. - 4 8
- 필수 항목입니다. 소스의 이름입니다.
- 12
- 필수 항목입니다. 임시 CSI 볼륨을 제공하는 드라이버입니다.
- 13
- 필수 항목입니다. 이 값은
true
로 설정되어야 합니다. 읽기 전용 볼륨을 제공합니다. - 14
- 선택 사항: 임시 CSI 볼륨의 볼륨 속성입니다. 지원되는 특성 키 및 값은 CSI 드라이버의 설명서를 참조하십시오.
공유 리소스 CSI 드라이버는 기술 프리뷰 기능으로 지원됩니다.
2.5.2. S2I(Source-to-Image) 빌드
S2I(Source-to-Image)는 재현 가능한 컨테이너 이미지를 빌드하는 툴입니다. 컨테이너 이미지에 애플리케이션 소스를 삽입하고 새 이미지를 어셈블하여 실행할 수 있는 이미지를 생성합니다. 새 이미지는 기본 이미지, 빌더, 빌드 소스를 통합하고 buildah run
명령과 함께 사용할 수 있습니다. S2I는 이전에 다운로드한 종속 항목, 이전에 빌드한 아티팩트 등을 다시 사용하는 증분 빌드를 지원합니다.
2.5.2.1. S2I(Source-to-Image) 증분 빌드 수행
S2I(Source-to-Image)는 증분 빌드를 수행할 수 있으므로 이전에 빌드한 이미지의 아티팩트를 재사용할 수 있습니다.
프로세스
증분 빌드를 생성하려면 전략 정의를 다음과 같이 수정합니다.
strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "incremental-image:latest" 1 incremental: true 2
추가 리소스
- 증분 빌드를 지원하는 빌더 이미지를 생성하는 방법에 대한 내용은 S2I 요구 사항을 참조하십시오.
2.5.2.2. S2I(Source-to-Image) 빌더 이미지 스크립트 덮어쓰기
빌더 이미지에서 제공하는 assemble
, run
, save-artifacts
S2I(Source-to-Image) 스크립트를 덮어쓸 수 있습니다.
프로세스
빌더 이미지에서 제공하는 assemble
, run
, save-artifacts
S2I 스크립트를 덮어쓰려면 다음 중 하나를 수행합니다.
-
애플리케이션 소스 리포지토리의
.s2i/bin
디렉터리에assemble
,run
, 또는save-artifacts
스크립트를 제공합니다. 스크립트가 포함된 디렉터리의 URL을 전략 정의의 일부로 제공합니다. 예를 들면 다음과 같습니다.
strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "builder-image:latest" scripts: "http://somehost.com/scripts_directory" 1
- 1
- 이 경로에는
run
,assemble
,save-artifacts
가 추가됩니다. 일부 또는 모든 스크립트가 확인되면 해당 스크립트가 이미지에 제공된 동일한 이름의 스크립트 대신 사용됩니다.
scripts
URL에 있는 파일은 소스 리포지토리의 .s2i/bin
에 있는 파일보다 우선합니다.
2.5.2.3. S2I(Source-to-Image) 환경 변수
소스 빌드 프로세스 및 결과 이미지에서 환경 변수를 사용할 수 있도록 하는 방법에는 환경 파일과 BuildConfig 환경 값을 사용하는 것입니다. 제공되는 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.
2.5.2.3.1. S2I(Source-to-Image) 환경 파일 사용
소스 빌드를 사용하면 소스 리포지토리의 .s2i/environment
파일에 지정하는 방식으로 애플리케이션 내에서 행당 하나씩 환경 값을 설정할 수 있습니다. 이 파일에 지정된 환경 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.
소스 리포지토리에 .s2i/environment
파일을 제공하는 경우 빌드 중 S2I(Source-to-Image)에서 이 파일을 읽습니다. 그러면 assemble
스크립트에서 이러한 변수를 사용할 수 있으므로 빌드 동작을 사용자 정의할 수 있습니다.
프로세스
예를 들어 빌드 중 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.
-
.s2i/environment
파일에DISABLE_ASSET_COMPILATION=true
를 추가합니다.
빌드 외에 지정된 환경 변수도 실행 중인 애플리케이션 자체에서 사용할 수 있습니다. 예를 들어 Rails 애플리케이션이 production
대신 development
모드에서 시작되도록 하려면 다음을 수행합니다.
-
RAILS_ENV=development
를.s2i/environment
파일에 추가합니다.
지원되는 환경 변수의 전체 목록은 각 이미지의 이미지 사용 섹션에서 확인할 수 있습니다.
2.5.2.3.2. S2I(Source-to-Image) 빌드 구성 환경 사용
빌드 구성의 sourceStrategy
정의에 환경 변수를 추가할 수 있습니다. 여기에 정의된 환경 변수는 assemble
스크립트를 실행하는 동안 표시되고 출력 이미지에 정의되어 run
스크립트 및 애플리케이션 코드에서도 사용할 수 있습니다.
프로세스
예를 들어 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.
sourceStrategy: ... env: - name: "DISABLE_ASSET_COMPILATION" value: "true"
추가 리소스
- 빌드 환경 섹션에서는 고급 지침을 제공합니다.
-
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
2.5.2.4. S2I(Source-to-Image) 소스 파일 무시
S2I(Source-to-Image)는 무시해야 하는 파일 패턴 목록이 포함된 .s2iignore
파일을 지원합니다. .s2iignore
파일에 있는 패턴과 일치하고 다양한 입력 소스에서 제공하는 빌드 작업 디렉터리의 파일은 assemble
스크립트에서 사용할 수 없습니다.
2.5.2.5. S2I(Source-to-Image)를 사용하여 소스 코드에서 이미지 생성
S2I(Source-to-Image)는 애플리케이션 소스 코드를 입력으로 사용하고 어셈블된 애플리케이션을 실행하는 새 이미지를 출력으로 생성하는 이미지를 쉽게 작성할 수 있는 프레임워크입니다.
재현 가능한 컨테이너 이미지를 빌드하는 데 S2I를 사용하는 주요 장점은 개발자가 쉽게 사용할 수 있다는 점입니다. 빌더 이미지 작성자는 이미지에서 최상의 S2I 성능, 빌드 프로세스, S2I 스크립트를 제공하도록 두 가지 기본 개념을 이해해야 합니다.
2.5.2.5.1. S2I(Source-to-Image) 빌드 프로세스 이해
빌드 프로세스는 최종 컨테이너 이미지로 통합되는 다음 세 가지 기본 요소로 구성됩니다.
- 소스
- S2I(Source-to-Image) 스크립트
- 빌더 이미지
S2I는 첫 번째 FROM
명령으로 빌더 이미지가 포함된 Dockerfile을 생성합니다. 그런 다음 S2I에서 생성된 Dockerfile은 Buildah로 전달됩니다.
2.5.2.5.2. S2I(Source-to-Image) 스크립트를 작성하는 방법
스크립트를 빌더 이미지 내에서 실행할 수 있는 경우 모든 프로그래밍 언어로 S2I(Source-to-Image) 스크립트를 작성할 수 있습니다. S2I는 assemble
/run
/save-artifacts
스크립트를 제공하는 다양한 옵션을 지원합니다. 이러한 위치는 모두 다음 순서에 따라 각 빌드에서 확인합니다.
- 빌드 구성에 지정된 스크립트입니다.
-
애플리케이션 소스
.s2i/bin
디렉터리에 있는 스크립트입니다. -
라벨이
io.openshift.s2i.scripts-url
인 기본 이미지 URL에 있는 스크립트입니다.
이미지에 지정된 io.openshift.s2i.scripts-url
라벨과 빌드 구성에 지정된 스크립트 모두 다음 양식 중 하나를 취할 수 있습니다.
-
image:///path_to_scripts_dir
: S2I 스크립트가 있는 디렉터리에 대한 이미지 내부의 절대 경로입니다. -
file:///path_to_scripts_dir
: S2I 스크립트가 있는 호스트의 디렉터리에 대한 상대 또는 절대 경로입니다. -
http(s)://path_to_scripts_dir
: S2I 스크립트가 있는 디렉터리에 대한 URL입니다.
표 2.1. S2I 스크립트
스크립트 | 설명 |
---|---|
|
|
|
|
|
이러한 종속 항목은 |
|
|
|
참고
|
S2I 스크립트의 예
다음 예제 S2I 스크립트는 Bash로 작성됩니다. 각 예에서는 tar
콘텐츠가 /tmp/s2i
디렉터리에 압축 해제되어 있다고 가정합니다.
assemble
스크립트:
#!/bin/bash # restore build artifacts if [ "$(ls /tmp/s2i/artifacts/ 2>/dev/null)" ]; then mv /tmp/s2i/artifacts/* $HOME/. fi # move the application source mv /tmp/s2i/src $HOME/src # build application artifacts pushd ${HOME} make all # install the artifacts make install popd
run
스크립트:
#!/bin/bash # run the application /opt/application/run.sh
save-artifacts
스크립트:
#!/bin/bash pushd ${HOME} if [ -d deps ]; then # all deps contents to tar stream tar cf - deps fi popd
usage
스크립트:
#!/bin/bash # inform the user how to use the image cat <<EOF This is a S2I sample builder image, to use it, install https://github.com/openshift/source-to-image EOF
추가 리소스
2.5.2.6. 빌드 볼륨 사용
실행 중인 빌드 볼륨을 마운트하여 출력 컨테이너 이미지에 유지되지 않는 정보에 대한 액세스 권한을 부여할 수 있습니다.
빌드 볼륨은 빌드 환경 또는 구성에만 필요한 리포지토리 자격 증명과 같은 중요한 정보를 제공합니다. 빌드 볼륨은 데이터가 출력 컨테이너 이미지에 유지될 수 있는 빌드 입력 과 다릅니다.
실행 중인 빌드가 데이터를 읽는 빌드 볼륨의 마운트 지점은 Pod 볼륨 마운트 와 기능이 비슷합니다.
절차
BuildConfig
오브젝트의sourceStrategy
정의에서volumes
배열에 빌드 볼륨을 추가합니다. 예를 들면 다음과 같습니다.spec: sourceStrategy: volumes: - name: secret-mvn 1 mounts: - destinationPath: /opt/app-root/src/.ssh 2 source: type: Secret 3 secret: secretName: my-secret 4 - name: settings-mvn 5 mounts: - destinationPath: /opt/app-root/src/.m2 6 source: type: ConfigMap 7 configMap: name: my-config 8 - name: my-csi-volume 9 mounts: - destinationPath: /opt/app-root/src/some_path 10 source: type: CSI 11 csi: driver: csi.sharedresource.openshift.io 12 readOnly: true 13 volumeAttributes: 14 attribute: value
- 1 5 9
- 필수 항목입니다. 고유한 이름입니다.
- 2 6 10
- 필수 항목입니다. 마운트 지점의 절대 경로입니다. 여기에는
..
또는:
이 포함되어서는 안되며 빌더에서 생성한 대상 경로와 충돌하지 않습니다./opt/app-root/src
는 많은 Red Hat S2I 지원 이미지의 기본 홈 디렉터리입니다. - 3 7 11
- 필수 항목입니다. 소스 유형,
ConfigMap
,Secret
또는CSI
. - 4 8
- 필수 항목입니다. 소스의 이름입니다.
- 12
- 필수 항목입니다. 임시 CSI 볼륨을 제공하는 드라이버입니다.
- 13
- 필수 항목입니다. 이 값은
true
로 설정되어야 합니다. 읽기 전용 볼륨을 제공합니다. - 14
- 선택 사항: 임시 CSI 볼륨의 볼륨 속성입니다. 지원되는 특성 키 및 값은 CSI 드라이버의 설명서를 참조하십시오.
공유 리소스 CSI 드라이버는 기술 프리뷰 기능으로 지원됩니다.
2.5.3. 사용자 정의 빌드
사용자 정의 빌드 전략을 사용하면 개발자가 전체 빌드 프로세스를 담당하는 특정 빌더 이미지를 정의할 수 있습니다. 자체 빌더 이미지를 사용하면 빌드 프로세스를 사용자 정의할 수 있습니다.
사용자 정의 빌더 이미지는 빌드 프로세스 논리가 포함된 일반 컨테이너 이미지입니다(예: RPM 또는 기본 이미지 빌드).
사용자 정의 빌드는 높은 권한으로 실행되며 기본적으로 사용자에게 제공되지 않습니다. 클러스터 관리 권한이 있는 신뢰할 수 있는 사용자에게만 사용자 정의 빌드를 실행할 수 있는 권한을 부여해야 합니다.
2.5.3.1. 사용자 정의 빌드에 FROM 이미지 사용
customStrategy.from
섹션을 사용하여 사용자 정의 빌드에 사용할 이미지를 표시할 수 있습니다.
프로세스
customStrategy.from
섹션을 설정합니다.strategy: customStrategy: from: kind: "DockerImage" name: "openshift/sti-image-builder"
2.5.3.2. 사용자 정의 빌드에서 보안 사용
사용자 정의 전략에서는 모든 빌드 유형에 추가할 수 있는 소스 및 이미지 보안 외에 임의의 보안 목록을 빌더 Pod에 추가할 수 있습니다.
프로세스
각 보안을 특정 위치에 마운트하려면
strategy
YAML 파일의secretSource
및mountPath
필드를 편집합니다.strategy: customStrategy: secrets: - secretSource: 1 name: "secret1" mountPath: "/tmp/secret1" 2 - secretSource: name: "secret2" mountPath: "/tmp/secret2"
2.5.3.3. 사용자 정의 빌드에 환경 변수 사용
사용자 정의 빌드 프로세스에서 환경 변수를 사용할 수 있도록 하려면 빌드 구성의 customStrategy
정의에 환경 변수를 추가하면 됩니다.
여기에서 정의한 환경 변수는 사용자 정의 빌드를 실행하는 Pod로 전달됩니다.
프로세스
빌드 중 사용할 사용자 정의 HTTP 프록시를 정의합니다.
customStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
빌드 구성에 정의된 환경 변수를 관리하려면 다음 명령을 입력합니다.
$ oc set env <enter_variables>
2.5.3.4. 사용자 정의 빌더 이미지 사용
OpenShift Container Platform의 사용자 정의 빌드 전략을 사용하면 전체 빌드 프로세스를 담당하는 특정 빌더 이미지를 정의할 수 있습니다. 패키지, JAR, WAR, 설치 가능한 ZIP 또는 기본 이미지와 같은 개별 아티팩트를 생성하는 빌드가 필요한 경우 사용자 정의 빌드 전략을 사용하는 사용자 정의 빌더 이미지를 사용합니다.
사용자 정의 빌더 이미지는 RPM 또는 기본 컨테이너 이미지와 같은 아티팩트를 구축하는 데 사용되는 빌드 프로세스 논리에 내장된 일반 컨테이너 이미지입니다.
또한 사용자 정의 빌더를 사용하면 단위 테스트 또는 통합 테스트를 실행하는 CI/CD 흐름과 같이 확장된 빌드 프로세스를 구현할 수 있습니다.
2.5.3.4.1. 사용자 정의 빌더 이미지
사용자 정의 빌더 이미지는 호출 시 빌드를 진행하는 데 필요한 정보와 함께 다음 환경 변수를 수신합니다.
표 2.2. 사용자 정의 빌더 환경 변수
변수 이름 | 설명 |
---|---|
|
|
| 빌드할 소스가 있는 Git 리포지토리의 URL입니다. |
|
|
| 빌드할 때 사용할 Git 리포지토리의 하위 디렉터리를 지정합니다. 정의한 경우에만 존재합니다. |
| 빌드할 Git 참조입니다. |
| 이 빌드 오브젝트를 생성한 OpenShift Container Platform 마스터의 버전입니다. |
| 이미지를 내보낼 컨테이너 이미지 레지스트리입니다. |
| 빌드 중인 이미지의 컨테이너 이미지 태그 이름입니다. |
|
|
2.5.3.4.2. 사용자 정의 빌더 워크플로
사용자 정의 빌더 이미지 작성자는 빌드 프로세스를 정의하는 데 유연성이 있지만 빌더 이미지는 OpenShift Container Platform 내에서 빌드를 실행하는 데 필요한 다음 단계를 준수해야 합니다.
-
Build
오브젝트 정의에는 빌드의 입력 매개변수에 대한 모든 필수 정보가 포함되어 있습니다. - 빌드 프로세스를 실행합니다.
- 빌드에서 이미지를 생성하면 빌드의 출력 위치가 정의된 경우 해당 위치로 내보냅니다. 다른 출력 위치는 환경 변수를 통해 전달할 수 있습니다.
2.5.4. 파이프라인 빌드
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인 빌드 전략을 사용하면 개발자가 Jenkins 파이프라인 플러그인에서 사용할 Jenkins 파이프라인을 정의할 수 있습니다. 다른 빌드 유형과 동일한 방식으로 OpenShift Container Platform에서 빌드를 시작, 모니터링, 관리할 수 있습니다.
파이프라인 워크플로는 빌드 구성에 직접 포함하거나 Git 리포지토리에 제공하는 방식으로 jenkinsfile
에 정의하고 빌드 구성에서 참조합니다.
2.5.4.1. OpenShift Container Platform 파이프라인 이해
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인을 사용하면 OpenShift Container Platform에서 애플리케이션의 빌드, 배포, 승격을 제어할 수 있습니다. Jenkins Pipeline 빌드 전략, jenkinsfiles
및 OpenShift Container Platform Domain Specific Language (DSL)의 조합을 사용하여 Jenkins 클라이언트 플러그인에서 제공하는 DSL(OpenShift Container Platform Domain Specific Language)을 사용하면 모든 시나리오에 대해 고급 빌드, 테스트, 배포 및 승격을 수행할 수 있습니다.
OpenShift Container Platform Jenkins 동기화 플러그인
OpenShift Container Platform Jenkins 동기화 플러그인은 Jenkins 작업 및 빌드와 동기화된 빌드 구성 및 빌드 오브젝트를 유지하고 다음 기능을 제공합니다.
- Jenkins에서 동적 작업 및 실행 생성
- 이미지 스트림, 이미지 스트림 태그 또는 구성 맵에서 에이전트 Pod 템플릿 동적 생성
- 환경 변수의 노출입니다.
- OpenShift Container Platform 웹 콘솔의 파이프라인 시각화
- Jenkins Git 플러그인과의 통합으로 OpenShift Container Platform 빌드의 커밋 정보를 Jenkins Git 플러그인에 전달합니다.
- Jenkins 자격 증명 항목에 시크릿 동기화.
OpenShift Container Platform Jenkins 클라이언트 플러그인
OpenShift Container Platform Jenkins 클라이언트 플러그인은 Jenkins 플러그인 중 하나로, OpenShift Container Platform API 서버와의 다양한 상호 작용을 위해 읽기 쉽고 간결하고 포괄적이며 유창한 Jenkins Pipeline 구문을 제공하기 위한 것입니다. 플러그인은 OpenShift Container Platform 명령줄 툴인 oc
를 사용하는데 스크립트를 실행하는 노드에서 이 툴을 사용할 수 있어야 합니다.
Jenkins 클라이언트 플러그인은 애플리케이션의 jenkinsfile
내에서 OpenShift Container Platform DSL을 사용할 수 있도록 Jenkins 마스터에 설치해야 합니다. 이 플러그인은 OpenShift Container Platform Jenkins 이미지를 사용할 때 기본적으로 설치 및 활성화됩니다.
프로젝트 내 OpenShift Container Platform Pipeline의 경우 Jenkins Pipeline 빌드 전략을 사용해야 합니다. 이 전략에서는 기본적으로 소스 리포지토리의 루트에서 jenkinsfile
을 사용하지만 다음과 같은 구성 옵션을 제공합니다.
-
빌드 구성 내의 인라인
jenkinsfile
필드 -
소스
contextDir
에 상대적으로 사용할jenkinsfile
의 위치를 참조하는, 빌드 구성 내의jenkinsfilePath
필드
선택적 jenkinsfilePath
필드는 소스 contextDir
에 상대적으로 사용할 파일의 이름을 지정합니다. contextDir
이 생략된 경우 기본값은 리포지토리의 루트입니다. jenkinsfilePath
가 생략된 경우 기본값은 jenkinsfile
입니다.
2.5.4.2. 파이프라인 빌드를 위한 Jenkins 파일 제공
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
jenkinsfile
에서는 표준 Groovy 언어 구문을 사용하여 애플리케이션의 구성, 빌드, 배포를 세부적으로 제어할 수 있습니다.
다음 방법 중 하나로 jenkinsfile
을 제공할 수 있습니다.
- 소스 코드 리포지토리에 있는 파일
-
jenkinsfile
필드를 사용하여 빌드 구성의 일부로 포함
첫 번째 옵션을 사용하는 경우 다음 위치 중 하나의 애플리케이션 소스 코드 리포지토리에 jenkinsfile
을 포함해야 합니다.
-
리포지토리 루트에 있는
jenkinsfile
이라는 파일 -
리포지토리의 소스
contextDir
루트에 있는jenkinsfile
이라는 파일 -
BuildConfig의
JenkinsPipelineStrategy
섹션에 있는jenkinsfilePath
필드를 통해 지정되는 파일 이름(제공되는 경우 소스contextDir
에 상대적이고 제공되지 않는 경우 기본값은 리포지토리의 루트임)
jenkinsfile
은 Jenkins 에이전트 Pod에서 실행됩니다. OpenShift Container Platform DSL을 사용하려면 해당 Pod에 사용 가능한 OpenShift Container Platform 클라이언트 바이너리가 있어야 합니다.
프로세스
다음 중 하나를 수행하여 Jenkins 파일을 제공할 수 있습니다.
- 빌드 구성에 Jenkins 파일 포함
- 빌드 구성에 Jenkins 파일이 포함된 Git 리포지토리에 대한 참조 포함
포함된 정의
kind: "BuildConfig" apiVersion: "v1" metadata: name: "sample-pipeline" spec: strategy: jenkinsPipelineStrategy: jenkinsfile: |- node('agent') { stage 'build' openshiftBuild(buildConfig: 'ruby-sample-build', showBuildLogs: 'true') stage 'deploy' openshiftDeploy(deploymentConfig: 'frontend') }
Git 리포지토리에 대한 참조
kind: "BuildConfig"
apiVersion: "v1"
metadata:
name: "sample-pipeline"
spec:
source:
git:
uri: "https://github.com/openshift/ruby-hello-world"
strategy:
jenkinsPipelineStrategy:
jenkinsfilePath: some/repo/dir/filename 1
- 1
- 선택적
jenkinsfilePath
필드는 소스contextDir
에 상대적으로 사용할 파일의 이름을 지정합니다.contextDir
이 생략된 경우 기본값은 리포지토리의 루트입니다.jenkinsfilePath
가 생략된 경우 기본값은jenkinsfile
입니다.
2.5.4.3. 파이프라인 빌드에 환경 변수 사용
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인 빌드 프로세스에서 환경 변수를 사용할 수 있도록 하려면 빌드 구성의 jenkinsPipelineStrategy
정의에 환경 변수를 추가하면 됩니다.
정의된 환경 변수는 빌드 구성과 관련된 모든 Jenkins 작업의 매개변수로 설정됩니다.
프로세스
빌드 중 사용할 환경 변수를 정의하려면 YAML 파일을 다음과 같이 편집합니다.
jenkinsPipelineStrategy: ... env: - name: "FOO" value: "BAR"
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
2.5.4.3.1. BuildConfig 환경 변수 및 Jenkins 작업 매개변수 간 매핑
파이프라인 전략 빌드 구성의 변경 사항에 따라 Jenkins 작업이 생성되거나 업데이트되면 빌드 구성의 모든 환경 변수가 Jenkins 작업 매개 변수 정의에 매핑됩니다. 여기서 Jenkins 작업 매개변수 정의의 기본값은 연결된 환경 변수의 현재 값입니다.
Jenkins 작업의 초기 생성 후에도 Jenkins 콘솔에서 작업에 매개변수를 추가할 수 있습니다. 매개변수 이름은 빌드 구성의 환경 변수 이름과 다릅니다. 매개변수는 해당 Jenkins 작업에 대한 빌드가 시작될 때 적용됩니다.
Jenkins 작업의 빌드를 시작하는 방법에 따라 매개변수 설정 방법이 결정됩니다.
-
oc start-build
로 시작하는 경우 빌드 구성의 환경 변수 값은 해당 작업 인스턴스에 설정된 매개변수입니다. Jenkins 콘솔에서 매개변수 기본값을 변경하면 해당 변경 사항이 무시됩니다. 빌드 구성 값이 우선합니다. oc start-build -e
로 시작하는 경우-e
옵션에 지정된 환경 변수의 값이 우선합니다.- 빌드 구성에 나열되지 않은 환경 변수를 지정하면 Jenkins 작업 매개변수 정의로 추가됩니다.
-
Jenkins 콘솔에서 환경 변수에 해당하는 매개변수를 변경하면 해당 변경 사항이 무시됩니다. 빌드 구성 및
oc start-build -e
로 지정하는 항목이 우선합니다.
- Jenkins 콘솔에서 Jenkins 작업을 시작하면 작업의 빌드를 시작하는 과정의 일부로 Jenkins 콘솔을 사용하여 매개변수 설정을 제어할 수 있습니다.
빌드 구성에서 작업 매개변수와 연결할 수 있는 모든 환경 변수를 지정하는 것이 좋습니다. 이렇게 하면 디스크 I/O가 줄어들고 Jenkins 처리 중 성능이 향상됩니다.
2.5.4.4. 파이프라인 빌드 튜토리얼
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
이 예제에서는 nodejs-mongodb.json
템플릿을 사용하여 Node.js/MongoDB
애플리케이션을 빌드, 배포, 확인할 OpenShift Container Platform Pipeline을 생성하는 방법을 보여줍니다.
프로세스
Jenkins 마스터를 생성합니다.
$ oc project <project_name>
사용할 프로젝트를 선택하거나
oc new-project <project_name>
을 사용하여 새 프로젝트를 생성합니다.$ oc new-app jenkins-ephemeral 1
영구 스토리지를 사용하려면 대신
jenkins-persistent
를 사용합니다.다음 콘텐츠를 사용하여
nodejs-sample-pipeline.yaml
이라는 파일을 생성합니다.참고이 과정에서 Jenkins Pipeline 전략을 사용하여
Node.js/MongoDB
예제 애플리케이션을 빌드, 배포, 스케일링하는BuildConfig
오브젝트가 생성됩니다.kind: "BuildConfig" apiVersion: "v1" metadata: name: "nodejs-sample-pipeline" spec: strategy: jenkinsPipelineStrategy: jenkinsfile: <pipeline content from below> type: JenkinsPipeline
jenkinsPipelineStrategy
를 사용하여BuildConfig
오브젝트를 생성한 후에는 인라인jenkinsfile
을 사용하여 파이프라인에 수행할 작업을 지시합니다.참고이 예에서는 애플리케이션에 대한 Git 리포지토리를 설정하지 않습니다.
다음
jenkinsfile
콘텐츠는 OpenShift Container Platform DSL을 사용하여 Groovy로 작성됩니다. 소스 리포지토리에jenkinsfile
을 포함하는 것이 기본 방법이지만 이 예제에서는 YAML 리터럴 스타일을 사용하여BuildConfig
오브젝트에 인라인 콘텐츠를 포함합니다.def templatePath = 'https://raw.githubusercontent.com/openshift/nodejs-ex/master/openshift/templates/nodejs-mongodb.json' 1 def templateName = 'nodejs-mongodb-example' 2 pipeline { agent { node { label 'nodejs' 3 } } options { timeout(time: 20, unit: 'MINUTES') 4 } stages { stage('preamble') { steps { script { openshift.withCluster() { openshift.withProject() { echo "Using project: ${openshift.project()}" } } } } } stage('cleanup') { steps { script { openshift.withCluster() { openshift.withProject() { openshift.selector("all", [ template : templateName ]).delete() 5 if (openshift.selector("secrets", templateName).exists()) { 6 openshift.selector("secrets", templateName).delete() } } } } } } stage('create') { steps { script { openshift.withCluster() { openshift.withProject() { openshift.newApp(templatePath) 7 } } } } } stage('build') { steps { script { openshift.withCluster() { openshift.withProject() { def builds = openshift.selector("bc", templateName).related('builds') timeout(5) { 8 builds.untilEach(1) { return (it.object().status.phase == "Complete") } } } } } } } stage('deploy') { steps { script { openshift.withCluster() { openshift.withProject() { def rm = openshift.selector("dc", templateName).rollout() timeout(5) { 9 openshift.selector("dc", templateName).related('pods').untilEach(1) { return (it.object().status.phase == "Running") } } } } } } } stage('tag') { steps { script { openshift.withCluster() { openshift.withProject() { openshift.tag("${templateName}:latest", "${templateName}-staging:latest") 10 } } } } } } }
- 1
- 사용할 템플릿의 경로입니다.
- 1 2
- 생성할 템플릿의 이름입니다.
- 3
- 이 빌드를 실행할
node.js
에이전트 Pod를 구동합니다. - 4
- 이 파이프라인에 타임아웃을 20분으로 설정합니다.
- 5
- 이 템플릿 라벨이 있는 모든 항목을 삭제합니다.
- 6
- 이 템플릿 라벨을 사용하여 모든 보안을 삭제합니다.
- 7
templatePath
에서 새 애플리케이션을 생성합니다.- 8
- 빌드가 완료될 때까지 최대 5분 동안 기다립니다.
- 9
- 배포가 완료될 때까지 최대 5분 정도 기다립니다.
- 10
- 다른 모든 과정이 성공하면
$ {templateName}:latest
이미지에$ {templateName}-staging:latest
태그를 지정합니다. 스테이징 환경에 대한 파이프라인 빌드 구성에서는$ {templateName}-staging:latest
이미지가 변경될 때까지 기다린 다음 해당 이미지를 스테이징 환경에 배포할 수 있습니다.
참고위 예제는 선언적 파이프라인 스타일로 작성되었지만 기존에 스크립팅된 파이프라인 스타일도 지원됩니다.
OpenShift Container Platform 클러스터에서 파이프라인
BuildConfig
를 생성합니다.$ oc create -f nodejs-sample-pipeline.yaml
자체 파일을 생성하지 않으려면 다음을 실행하여 원래 리포지토리의 샘플을 사용하면 됩니다.
$ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/jenkins/pipeline/nodejs-sample-pipeline.yaml
파이프라인을 시작합니다.
$ oc start-build nodejs-sample-pipeline
참고또는 빌드 → 파이프라인 섹션으로 이동하여 파이프라인 시작을 클릭하거나 Jenkins 콘솔을 방문하여 생성한 파이프라인으로 이동한 다음 지금 빌드를 클릭하여 OpenShift Container Platform 웹 콘솔에서 파이프라인을 시작할 수 있습니다.
파이프라인이 시작되면 프로젝트 내에서 수행되는 다음 작업이 표시되어야 합니다.
- Jenkins 서버에서 작업 인스턴스가 생성됩니다.
- 파이프라인에 필요한 경우 에이전트 Pod가 시작됩니다.
파이프라인은 에이전트 Pod에서 실행되지만 에이전트가 필요하지 않은 경우에는 마스터에서 실행됩니다.
-
template=nodejs-mongodb-example
라벨을 사용하여 이전에 생성한 리소스는 삭제됩니다. -
새 애플리케이션 및 이 애플리케이션의 모든 관련 리소스는
nodejs-mongodb-example
템플릿에서 생성됩니다. nodejs-mongodb-example
BuildConfig
를 사용하여 빌드가 시작됩니다.- 파이프라인은 빌드가 완료될 때까지 기다린 후 다음 단계를 트리거합니다.
배포는
nodejs-mongodb-example
배포 구성을 사용하여 시작됩니다.- 파이프라인은 배포가 완료될 때까지 기다린 후 다음 단계를 트리거합니다.
-
빌드 및 배포가 성공하면
nodejs-mongodb-example:latest
이미지에nodejs-mongodb-example:stage
태그가 지정됩니다.
-
파이프라인에 필요한 경우 에이전트 pod가 삭제됩니다.
참고파이프라인 실행을 시각화하는 가장 좋은 방법은 OpenShift Container Platform 웹 콘솔에서 확인하는 것입니다. 웹 콘솔에 로그인하고 빌드 → 파이프라인으로 이동하여 파이프라인을 확인할 수 있습니다.
2.5.5. 웹 콘솔을 사용하여 보안 추가
개인 리포지토리에 액세스할 수 있도록 빌드 구성에 보안을 추가할 수 있습니다.
프로세스
OpenShift Container Platform 웹 콘솔에서 개인 리포지토리에 액세스할 수 있도록 빌드 구성에 보안을 추가하려면 다음을 수행합니다.
- 새 OpenShift Container Platform 프로젝트를 생성합니다.
- 개인 소스 코드 리포지토리에 액세스하는 데 필요한 자격 증명이 포함된 보안을 생성합니다.
- 빌드 구성을 생성합니다.
-
빌드 구성 편집기 페이지 또는 웹 콘솔의
빌더 이미지에서 앱 생성
페이지에서 소스 보안을 설정합니다. - 저장을 클릭합니다.
2.5.6. 가져오기 및 내보내기 활성화
빌드 구성에 가져오기 보안을 설정하여 프라이빗 레지스트리로 가져오고 내보내기 보안을 설정하여 내보낼 수 있습니다.
프로세스
프라이빗 레지스트리로 가져오기를 활성화하려면 다음을 수행합니다.
- 빌드 구성에 가져오기 보안을 설정합니다.
내보내기를 활성화하려면 다음을 수행합니다.
- 빌드 구성에 내보내기 보안을 설정합니다.
2.6. Buildah를 사용한 사용자 정의 이미지 빌드
OpenShift Container Platform 4.12에서는 호스트 노드에 Docker 소켓이 존재하지 않습니다. 즉 사용자 정의 빌드의 Docker 소켓 마운트 옵션에서 사용자 정의 빌드 이미지 내에서 사용하도록 액세스 가능한 Docker 소켓을 제공하지 않을 수 있습니다.
이미지를 빌드하고 내보내기 위해 이 기능이 필요한 경우 사용자 정의 빌드 이미지에 Buildah 툴을 추가한 후 이 툴을 사용하여 사용자 정의 빌드 논리 내에서 이미지를 빌드하고 내보내십시오. 다음은 Buildah를 사용하여 사용자 정의 빌드를 실행하는 방법의 예입니다.
사용자 정의 빌드 전략을 사용하려면 사용자가 클러스터에서 실행되는 권한 있는 컨테이너 내에서 임의의 코드를 실행할 수 있으므로 기본적으로 일반 사용자에게는 없는 권한이 필요합니다. 이 수준의 액세스 권한은 사용 시 클러스터를 손상시킬 수 있으므로 클러스터에 대한 관리 권한이 있는 신뢰할 수 있는 사용자에게만 부여해야 합니다.
2.6.1. 사전 요구 사항
- 사용자 정의 빌드 권한을 부여하는 방법을 검토합니다.
2.6.2. 사용자 정의 빌드 아티팩트 생성
사용자 정의 빌드 이미지로 사용할 이미지를 생성해야 합니다.
프로세스
빈 디렉터리에서부터 다음 콘텐츠를 사용하여
Dockerfile
이라는 파일을 생성합니다.FROM registry.redhat.io/rhel8/buildah # In this example, `/tmp/build` contains the inputs that build when this # custom builder image is run. Normally the custom builder image fetches # this content from some location at build time, by using git clone as an example. ADD dockerfile.sample /tmp/input/Dockerfile ADD build.sh /usr/bin RUN chmod a+x /usr/bin/build.sh # /usr/bin/build.sh contains the actual custom build logic that will be run when # this custom builder image is run. ENTRYPOINT ["/usr/bin/build.sh"]
동일한 디렉터리에서
dockerfile.sample
이라는 파일을 생성합니다. 이 파일은 사용자 정의 빌드 이미지에 포함되어 있으며 사용자 정의 빌드에서 생성하는 이미지를 정의합니다.FROM registry.access.redhat.com/ubi8/ubi RUN touch /tmp/build
동일한 디렉터리에
build.sh
라는 파일을 생성합니다. 이 파일에는 사용자 정의 빌드가 실행될 때 실행되는 논리가 포함되어 있습니다.#!/bin/sh # Note that in this case the build inputs are part of the custom builder image, but normally this # is retrieved from an external source. cd /tmp/input # OUTPUT_REGISTRY and OUTPUT_IMAGE are env variables provided by the custom # build framework TAG="${OUTPUT_REGISTRY}/${OUTPUT_IMAGE}" # performs the build of the new image defined by dockerfile.sample buildah --storage-driver vfs bud --isolation chroot -t ${TAG} . # buildah requires a slight modification to the push secret provided by the service # account to use it for pushing the image cp /var/run/secrets/openshift.io/push/.dockercfg /tmp (echo "{ \"auths\": " ; cat /var/run/secrets/openshift.io/push/.dockercfg ; echo "}") > /tmp/.dockercfg # push the new image to the target for the build buildah --storage-driver vfs push --tls-verify=false --authfile /tmp/.dockercfg ${TAG}
2.6.3. 사용자 정의 빌더 이미지 빌드
OpenShift Container Platform을 사용하여 사용자 정의 전략에서 사용할 사용자 정의 빌더 이미지를 빌드하고 내보낼 수 있습니다.
사전 요구 사항
- 새 사용자 정의 빌더 이미지를 생성하는 데 사용할 모든 입력을 정의합니다.
프로세스
사용자 정의 빌더 이미지를 빌드할
BuildConfig
오브젝트를 정의합니다.$ oc new-build --binary --strategy=docker --name custom-builder-image
사용자 정의 빌드 이미지를 생성한 디렉터리에서 빌드를 실행합니다.
$ oc start-build custom-builder-image --from-dir . -F
빌드가 완료되면
custom-builder-image:latest
라는 이미지 스트림 태그의 프로젝트에서 새 사용자 정의 빌더 이미지를 사용할 수 있습니다.
2.6.4. 사용자 정의 빌더 이미지 사용
사용자 정의 빌더 이미지와 함께 사용자 정의 전략을 사용하여 사용자 정의 빌드 논리를 실행하는 BuildConfig
오브젝트를 정의할 수 있습니다.
사전 요구 사항
- 새 사용자 정의 빌더 이미지에 필요한 모든 입력을 정의합니다.
- 사용자 정의 빌더 이미지를 빌드합니다.
프로세스
buildconfig.yaml
이라는 파일을 생성합니다. 이 파일은 프로젝트에서 생성되어 실행되는BuildConfig
오브젝트를 정의합니다.kind: BuildConfig apiVersion: build.openshift.io/v1 metadata: name: sample-custom-build labels: name: sample-custom-build annotations: template.alpha.openshift.io/wait-for-ready: 'true' spec: strategy: type: Custom customStrategy: forcePull: true from: kind: ImageStreamTag name: custom-builder-image:latest namespace: <yourproject> 1 output: to: kind: ImageStreamTag name: sample-custom:latest
- 1
- 프로젝트 이름을 지정합니다.
BuildConfig
를 생성합니다.$ oc create -f buildconfig.yaml
imagestream.yaml
이라는 파일을 생성합니다. 이 파일은 빌드에서 이미지를 내보낼 이미지 스트림을 정의합니다.kind: ImageStream apiVersion: image.openshift.io/v1 metadata: name: sample-custom spec: {}
이미지 스트림을 생성합니다.
$ oc create -f imagestream.yaml
사용자 정의 빌드를 실행합니다.
$ oc start-build sample-custom-build -F
빌드를 실행하면 빌드에서 이전에 빌드한 사용자 정의 빌더 이미지를 실행하는 Pod를 시작합니다. Pod는 사용자 정의 빌더 이미지의 진입점으로 정의된
build.sh
논리를 실행합니다.build.sh
논리는 Buildah를 호출하여 사용자 정의 빌더 이미지에 포함된dockerfile.sample
을 빌드한 다음 Buildah를 사용하여 새 이미지를sample-custom image stream
으로 내보냅니다.
2.7. 기본 빌드 수행 및 구성
다음 섹션에서는 빌드 시작 및 취소, BuildConfig 편집,
삭제, 빌드 세부 정보 보기, 빌드 로그 액세스 등 기본 빌드 작업에 대한 지침을 제공합니다.
BuildConfig
2.7.1. 빌드 시작
현재 프로젝트의 기존 빌드 구성에서 새 빌드를 수동으로 시작할 수 있습니다.
프로세스
빌드를 수동으로 시작하려면 다음 명령을 입력합니다.
$ oc start-build <buildconfig_name>
2.7.1.1. 빌드 재실행
--from-build
플래그를 사용하여 빌드를 수동으로 다시 실행할 수 있습니다.
프로세스
빌드를 수동으로 다시 실행하려면 다음 명령을 입력합니다.
$ oc start-build --from-build=<build_name>
2.7.1.2. 빌드 로그 스트리밍
--follow
플래그를 지정하여 빌드의 로그를 stdout
에서 스트리밍할 수 있습니다.
프로세스
stdout
에서 빌드 로그를 수동으로 스트리밍하려면 다음 명령을 입력합니다.$ oc start-build <buildconfig_name> --follow
2.7.1.3. 빌드 시작 시 환경 변수 설정
--env
플래그를 지정하여 빌드에 원하는 환경 변수를 설정할 수 있습니다.
프로세스
원하는 환경 변수를 지정하려면 다음 명령을 입력합니다.
$ oc start-build <buildconfig_name> --env=<key>=<value>
2.7.1.4. 소스를 사용하여 빌드 시작
빌드에 Git 소스 가져오기 또는 Dockerfile을 사용하는 대신 소스를 직접 내보내 빌드를 시작할 수 있습니다. 소스는 Git 또는 SVN 작업 디렉터리, 배포하려는 사전 빌드된 바이너리 아티팩트 세트 또는 단일 파일의 콘텐츠일 수 있습니다. 이 작업은 start-build
명령에 다음 옵션 중 하나를 지정하여 수행할 수 있습니다.
옵션 | 설명 |
---|---|
| 보관하여 빌드에 바이너리 입력으로 사용할 디렉터리를 지정합니다. |
| 빌드 소스에서 유일한 파일이 될 단일 파일을 지정합니다. 이 파일은 제공된 원래 파일과 파일 이름이 동일한 빈 디렉터리의 루트에 배치됩니다. |
|
빌드에 바이너리 입력으로 사용할 로컬 리포지토리의 경로를 지정합니다. 빌드에 사용되는 분기, 태그 또는 커밋을 제어하는 |
이러한 옵션을 빌드에 직접 전달하면 해당 콘텐츠가 빌드로 스트리밍되어 현재 빌드 소스 설정을 덮어씁니다.
바이너리 입력에서 트리거된 빌드는 서버의 소스를 유지하지 않으므로 기본 이미지 변경에 의해 트리거된 리빌드는 빌드 구성에 지정된 소스를 사용합니다.
프로세스
다음 명령을 통해 소스에서 빌드를 시작하여 태그
v2
의 아카이브로 로컬 Git 리포지토리의 콘텐츠를 보냅니다.$ oc start-build hello-world --from-repo=../hello-world --commit=v2
2.7.2. 빌드 취소
웹 콘솔을 사용하거나 다음 CLI 명령을 사용하여 빌드를 취소할 수 있습니다.
프로세스
빌드를 수동으로 취소하려면 다음 명령을 입력합니다.
$ oc cancel-build <build_name>
2.7.2.1. 여러 빌드 취소
다음 CLI 명령으로 여러 빌드를 취소할 수 있습니다.
프로세스
여러 빌드를 수동으로 취소하려면 다음 명령을 입력합니다.
$ oc cancel-build <build1_name> <build2_name> <build3_name>
2.7.2.2. 모든 빌드 취소
다음 CLI 명령을 사용하여 빌드 구성에서 모든 빌드를 취소할 수 있습니다.
프로세스
모든 빌드를 취소하려면 다음 명령을 입력합니다.
$ oc cancel-build bc/<buildconfig_name>
2.7.2.3. 지정된 상태의 모든 빌드 취소
지정된 상태(new
또는 pending
등)의 빌드는 모두 취소하고 다른 상태의 빌드는 무시할 수 있습니다.
프로세스
지정된 상태의 빌드를 모두 취소하려면 다음 명령을 입력합니다.
$ oc cancel-build bc/<buildconfig_name>
2.7.3. BuildConfig 편집
빌드 구성을 편집하려면 개발자 화면의 빌드 보기에서 빌드 구성 편집 옵션을 사용합니다.
다음 뷰 중 하나를 사용하여 BuildConfig
를 편집할 수 있습니다.
-
양식 보기를 사용하면 표준 양식 필드 및 확인란을 사용하여
BuildConfig
를 편집할 수 있습니다. -
YAML 보기를 사용하면 작업을 완전히 제어하여
BuildConfig
를 편집할 수 있습니다.
데이터를 손실하지 않고 양식 보기 와 YAML 보기를 전환할 수 있습니다. 양식 보기의 데이터는 YAML 보기로 전송되며 그 반대의 경우도 마찬가지입니다.
절차
-
개발자 화면의 빌드 보기에서
메뉴를 클릭하여 BuildConfig 편집 옵션을 확인합니다.
- BuildConfig 편집 을 클릭하여 양식 보기 옵션을 확인합니다.
Git 섹션에서 애플리케이션을 생성하는 데 사용할 코드베이스의 Git 리포지토리 URL을 입력합니다. 그런 다음 URL을 검증합니다.
선택 사항: 고급 Git 옵션 표시를 클릭하여 다음과 같은 세부 정보를 추가합니다.
- Git 참조: 애플리케이션을 빌드하는 데 사용할 코드가 포함된 분기, 태그 또는 커밋을 지정합니다.
- 컨텍스트 디렉터리: 애플리케이션을 빌드하는 데 사용할 코드가 포함된 하위 디렉터리를 지정합니다.
- 소스 시크릿: 프라이빗 리포지토리에서 소스 코드를 가져올 수 있는 자격 증명이 포함된 시크릿 이름을 생성합니다.
빌드 from 섹션에서 빌드하려는 옵션을 선택합니다. 다음 옵션을 사용할 수 있습니다.
- 이미지 스트림 태그 는 지정된 이미지 스트림 및 태그의 이미지를 참조합니다. 빌드하려는 위치의 프로젝트, 이미지 스트림, 태그를 입력하고.
- 이미지 스트림 이미지는 지정된 이미지 스트림 및 이미지 이름의 이미지를 참조합니다. 빌드하려는 이미지 스트림 이미지를 입력합니다. 또한 프로젝트, 이미지 스트림, 내보낼 태그를 입력합니다.
- Docker 이미지: Docker 이미지 리포지터리를 통해 Docker 이미지를 참조합니다. 또한 프로젝트, 이미지 스트림, 태그를 입력하여 푸시해야 합니다.
- 선택 사항: 환경 변수 섹션에서 Name 및 Value 필드를 사용하여 프로젝트와 관련된 환경 변수를 추가합니다. 환경 변수를 더 추가하려면 Add Value 또는 Add from ConfigMap 및 Secret 을 사용합니다.
선택 사항: 애플리케이션을 추가로 사용자 지정하려면 다음 고급 옵션을 사용합니다.
- Trigger
- 빌더 이미지가 변경되면 새 이미지 빌드를 트리거합니다. 트리거 추가를 클릭하고 유형 및 시크릿 을 선택하여 트리거 를 더 추가합니다.
- 보안
- 애플리케이션에 대한 보안을 추가합니다. 시크릿 추가를 클릭하고 Secret 및 Mount point 를 선택하여 보안을 추가합니다.
- 정책
- 정책 실행 을 클릭하여 빌드 실행 정책을 선택합니다. 선택한 정책은 빌드 구성에서 생성한 빌드를 실행해야 하는 순서를 결정합니다.
- 후크
- 이미지가 빌드된 후 빌드 실행 을 선택하여 빌드 종료 시 명령을 실행하고 이미지를 확인합니다. Hook type,Command, Arguments 를 추가하여 명령에 추가합니다.
-
저장을 클릭하여
BuildConfig
를 저장합니다.
2.7.4. BuildConfig 삭제
다음 명령을 사용하여 BuildConfig
를 삭제할 수 있습니다.
프로세스
BuildConfig
를 삭제하려면 다음 명령을 입력합니다.$ oc delete bc <BuildConfigName>
이 명령은 이
BuildConfig
에서 인스턴스화한 빌드도 모두 삭제합니다.BuildConfig
는 삭제하고BuildConfig
에서 인스턴스화한 빌드는 유지하려면 다음 명령을 입력할 때--cascade=false
플래그를 지정하십시오.$ oc delete --cascade=false bc <BuildConfigName>
2.7.5. 빌드 세부 정보 보기
웹 콘솔을 사용하거나 oc describe
CLI 명령을 사용하여 빌드 세부 정보를 볼 수 있습니다.
다음을 포함한 정보가 표시됩니다.
- 빌드 소스입니다.
- 빌드 전략입니다.
- 출력 대상입니다.
- 대상 레지스트리의 이미지 다이제스트입니다.
- 빌드를 생성한 방법입니다.
빌드에서 Docker
또는 Source
전략을 사용하는 경우 oc describe
출력에 커밋 ID, 작성자, 커밋, 메시지 등 해당 빌드에 사용된 소스 리버전 정보도 포함됩니다.
프로세스
빌드 세부 정보를 보려면 다음 명령을 입력합니다.
$ oc describe build <build_name>
2.7.6. 빌드 로그에 액세스
웹 콘솔 또는 CLI를 사용하여 빌드 로그에 액세스할 수 있습니다.
프로세스
빌드를 직접 사용하여 로그를 스트리밍하려면 다음 명령을 입력합니다.
$ oc describe build <build_name>
2.7.6.1. BuildConfig 로그에 액세스
웹 콘솔 또는 CLI를 사용하여 BuildConfig
로그에 액세스할 수 있습니다.
프로세스
BuildConfig
의 최신 빌드 로그를 스트리밍하려면 다음 명령을 입력합니다.$ oc logs -f bc/<buildconfig_name>
2.7.6.2. 특정 버전 빌드의 BuildConfig 로그에 액세스
웹 콘솔 또는 CLI를 사용하여 특정 버전 빌드의 BuildConfig
로그에 액세스할 수 있습니다.
프로세스
특정 버전 빌드의
BuildConfig
로그를 스트리밍하려면 다음 명령을 입력합니다.$ oc logs --version=<number> bc/<buildconfig_name>
2.7.6.3. 로그 세부 정보 표시 활성화
BuildConfig
에서 sourceStrategy
또는 dockerStrategy
의 일부로 BUILD_LOGLEVEL
환경 변수를 전달하여 더 세부적인 출력을 제공할 수 있습니다.
관리자는 env/BUILD_LOGLEVEL
을 구성하여 전체 OpenShift Container Platform 인스턴스에 대한 기본 빌드 세부 정보 표시 수준을 설정할 수 있습니다. 이 기본값은 지정된 BuildConfig
에 BUILD_LOGLEVEL
을 지정하여 덮어쓸 수 있습니다. 명령줄에서 --build-loglevel
을 oc start-build
로 전달하여 바이너리가 아닌 빌드에 더 높은 우선순위를 지정할 수 있습니다.
소스 빌드에 사용 가능한 로그 수준은 다음과 같습니다.
수준 0 |
|
수준 1 | 실행된 프로세스에 대한 기본 정보를 생성합니다. |
수준 2 | 실행된 프로세스에 대한 매우 자세한 정보를 생성합니다. |
수준 3 | 실행된 프로세스에 대한 자세한 정보와 아카이브 콘텐츠 목록을 생성합니다. |
수준 4 | 현재는 수준 3과 동일한 정보를 제공합니다. |
수준 5 | 위 수준에서 언급한 모든 정보를 생성하고 Docker 내보내기 메시지도 제공합니다. |
프로세스
더 세부적인 출력을 제공하기 위해
BuildConfig
에서sourceStrategy
또는dockerStrategy
의 일부로BUILD_LOGLEVEL
환경 변수를 전달합니다.sourceStrategy: ... env: - name: "BUILD_LOGLEVEL" value: "2" 1
- 1
- 이 값을 원하는 로그 수준으로 조정합니다.
2.8. 빌드 트리거 및 수정
다음 섹션에서는 빌드 후크를 사용하여 빌드를 트리거하고 수정하는 방법을 간략하게 설명합니다.
2.8.1. 빌드 트리거
BuildConfig
를 정의할 때 BuildConfig
를 실행해야 하는 상황을 제어하기 위해 트리거를 정의할 수 있습니다. 다음과 같은 빌드 트리거를 사용할 수 있습니다.
- Webhook
- 이미지 변경
- 구성 변경
2.8.1.1. Webhook 트리거
Webhook 트리거를 사용하면 OpenShift Container Platform API 끝점에 요청을 전송하여 새 빌드를 트리거할 수 있습니다. 이러한 트리거는 GitHub, GitLab, Bitbucket 또는 Generic Webhook를 사용하여 정의할 수 있습니다.
현재는 OpenShift Container Platform Webhook에서 Git 기반 SCM(소스 코드 관리) 시스템 각각에 대해 유사한 버전의 내보내기 이벤트만 지원합니다. 기타 모든 이벤트 유형은 무시됩니다.
내보내기 이벤트가 처리되면 OpenShift Container Platform 컨트롤 플레인 호스트에서 이벤트 내부의 분기 참조가 해당 BuildConfig
의 분기 참조와 일치하는지 확인합니다. 일치하는 경우 OpenShift Container Platform 빌드의 Webhook 이벤트에 언급된 커밋 참조가 정확한지 확인합니다. 일치하지 않는 경우에는 빌드가 트리거되지 않습니다.
oc new-app
및 oc new-build
는 GitHub 및 Generic Webhook 트리거를 자동으로 생성하지만 필요한 다른 Webhook 트리거는 수동으로 추가해야 합니다. 트리거 설정을 통해 트리거를 수동으로 추가할 수 있습니다.
모든 Webhook에 대해 WebHookSecretKey
라는 키와 Webhook를 호출할 때 제공할 값이 되는 값을 사용하여 보안을 정의해야 합니다. 그런 다음 Webhook 정의에서 보안을 참조해야 합니다. 보안을 사용하면 URL의 고유성이 보장되어 다른 사용자가 빌드를 트리거할 수 없습니다. 키 값은 Webhook 호출 중 제공되는 보안과 비교됩니다.
예를 들면 아래 예제에는 mysecret
이라는 보안에 대한 참조가 포함된 GitHub Webhook가 있습니다.
type: "GitHub" github: secretReference: name: "mysecret"
그런 다음 보안이 다음과 같이 정의됩니다. 보안 값은 Secret
오브젝트의 data
필드에 필요하므로 base64로 인코딩됩니다.
- kind: Secret apiVersion: v1 metadata: name: mysecret creationTimestamp: data: WebHookSecretKey: c2VjcmV0dmFsdWUx
2.8.1.1.1. GitHub Webhook 사용
GitHub Webhook는 리포지토리를 업데이트할 때 GitHub에서 생성하는 호출을 처리합니다. 트리거를 정의할 때는 보안을 지정해야 하는데, 보안은 Webhook를 구성할 때 GitHub에 제공하는 URL의 일부입니다.
GitHub Webhook 정의의 예:
type: "GitHub" github: secretReference: name: "mysecret"
Webhook 트리거 구성에 사용되는 보안은 GitHub UI에서 Webhook를 구성할 때 표시되는 secret
필드와 동일하지 않습니다. 전자는 Webhook URL을 고유하고 예측하기 어렵게 만들고, 후자는 X-Hub-Signature
헤더로 전송되는 본문의 HMAC 16진수 다이제스트를 생성하는 데 사용되는 선택적 문자열 필드입니다.
페이로드 URL은 oc describe
명령에 의해 GitHub Webhook URL로 반환되고(Webhook URL 표시 참조) 다음과 같이 구성됩니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
사전 요구 사항
-
GitHub 리포지토리에서
BuildConfig
를 생성합니다.
프로세스
GitHub Webhook를 구성하려면 다음을 수행합니다.
GitHub 리포지토리에서
BuildConfig
를 생성한 후 다음을 실행합니다.$ oc describe bc/<name-of-your-BuildConfig>
그러면 다음과 같은 Webhook GitHub URL이 생성됩니다.
출력 예
<https://api.starter-us-east-1.openshift.com:443/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
- GitHub 웹 콘솔에서 이 URL을 잘라내어 GitHub에 붙여넣습니다.
- GitHub 리포지토리의 설정 → Webhook에서 Webhook 추가를 선택합니다.
- URL 출력을 페이로드 URL 필드에 붙여넣습니다.
-
GitHub의 기본
application/x-www-form-urlencoded
에서 콘텐츠 유형을application/json
으로 변경합니다. Webhook 추가를 클릭합니다.
GitHub에서 Webhook가 성공적으로 구성되었음을 알리는 메시지가 표시됩니다.
이제 GitHub 리포지토리에 변경 사항을 내보내면 새 빌드가 자동으로 시작되고 빌드가 성공하면 새 배포가 시작됩니다.
참고Gogs는 GitHub와 동일한 Webhook 페이로드 형식을 지원합니다. 따라서 Gogs 서버를 사용하는 경우
BuildConfig
에 GitHub Webhook 트리거를 정의하고 Gogs 서버에서도 트리거할 수 있습니다.
payload.json
과 같이 유효한 JSON 페이로드가 포함된 파일의 경우curl
을 사용하여 Webhook를 수동으로 트리거할 수 있습니다.$ curl -H "X-GitHub-Event: push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
-k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.
추가 리소스
2.8.1.1.2. GitLab Webhook 사용
GitLab Webhook는 리포지토리를 업데이트할 때 GitLab에서 생성하는 호출을 처리합니다. GitHub 트리거와 마찬가지로 보안을 지정해야 합니다. 다음 예제는 BuildConfig
내의 트리거 정의 YAML입니다.
type: "GitLab" gitlab: secretReference: name: "mysecret"
페이로드 URL은 oc describe
명령을 통해 GitLab Webhook URL로 반환되고 다음과 같이 구조화됩니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
프로세스
GitLab Webhook를 구성하려면 다음을 수행합니다.
Webhook URL을 가져오도록
BuildConfig
를 지정합니다.$ oc describe bc <name>
-
Webhook URL을 복사하여
<secret>
을 보안 값으로 교체합니다. - GitLab 설정 지침에 따라 Webhook URL을 GitLab 리포지토리 설정에 붙여넣습니다.
payload.json
과 같이 유효한 JSON 페이로드가 포함된 파일의 경우curl
을 사용하여 Webhook를 수동으로 트리거할 수 있습니다.$ curl -H "X-GitLab-Event: Push Hook" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
-k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.
2.8.1.1.3. Bitbucket Webhook 사용
Bitbucket Webhook는 리포지토리가 업데이트될 때 Bitbucket에서 만든 호출을 처리합니다. 이전 트리거와 유사하게 보안을 지정해야 합니다. 다음 예제는 BuildConfig
내의 트리거 정의 YAML입니다.
type: "Bitbucket" bitbucket: secretReference: name: "mysecret"
페이로드 URL은 oc describe
명령을 통해 Bitbucket Webhook URL로 반환되고 다음과 같이 구조화됩니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
프로세스
Bitbucket Webhook를 구성하려면 다음을 수행합니다.
Webhook URL을 가져오도록 'BuildConfig'를 지정합니다.
$ oc describe bc <name>
-
Webhook URL을 복사하여
<secret>
을 보안 값으로 교체합니다. - Bitbucket 설정 지침에 따라 Webhook URL을 Bitbucket 리포지토리 설정에 붙여넣습니다.
payload.json
과 같이 유효한 JSON 페이로드가 포함된 파일의 경우curl
을 사용하여 Webhook를 수동으로 트리거할 수 있습니다.$ curl -H "X-Event-Key: repo:push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
-k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.
2.8.1.1.4. 일반 Webhook 사용
일반 Webhook는 웹 요청을 수행할 수 있는 모든 시스템에서 호출합니다. 다른 Webhook와 마찬가지로 보안을 지정해야 하는데 보안은 호출자가 빌드를 트리거하는 데 사용해야 하는 URL의 일부입니다. 보안을 사용하면 URL의 고유성이 보장되어 다른 사용자가 빌드를 트리거할 수 없습니다. 다음은 BuildConfig
내 트리거 정의 YAML의 예입니다.
type: "Generic"
generic:
secretReference:
name: "mysecret"
allowEnv: true 1
- 1
- 일반 Webhook에서 환경 변수를 전달하도록 허용하려면
true
로 설정합니다.
프로세스
호출자를 설정하기 위해 빌드에 대한 일반 Webhook 끝점의 URL을 호출 시스템에 제공합니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
호출자는 Webhook를
POST
작업으로 호출해야 합니다.Webhook를 수동으로 호출하려면
curl
을 사용하면 됩니다.$ curl -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
HTTP 동사를
POST
로 설정해야 합니다. 비보안-k
플래그는 인증서 검증을 무시하도록 지정됩니다. 클러스터에 올바르게 서명된 인증서가 있는 경우 이 두 번째 플래그는 필요하지 않습니다.끝점은 다음 형식을 사용하여 선택적 페이로드를 허용할 수 있습니다.
git: uri: "<url to git repository>" ref: "<optional git reference>" commit: "<commit hash identifying a specific git commit>" author: name: "<author name>" email: "<author e-mail>" committer: name: "<committer name>" email: "<committer e-mail>" message: "<commit message>" env: 1 - name: "<variable name>" value: "<variable value>"
- 1
BuildConfig
환경 변수와 유사하게 여기에 정의된 환경 변수도 빌드에 사용할 수 있습니다. 이러한 변수가BuildConfig
환경 변수와 충돌하는 경우 해당 변수가 우선합니다. 기본적으로 Webhook에서 전달하는 환경 변수는 무시됩니다. 이 동작을 활성화하려면 Webhook 정의에서allowEnv
필드를true
로 설정합니다.
curl
을 사용하여 이 페이로드를 전달하려면payload_file.yaml
이라는 파일에 페이로드를 정의하고 다음을 실행합니다.$ curl -H "Content-Type: application/yaml" --data-binary @payload_file.yaml -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
인수는 위 예제와 동일하고 헤더와 페이로드가 추가되었습니다.
-H
인수는 페이로드 형식에 따라Content-Type
헤더를application/yaml
또는application/json
으로 설정합니다.--data-binary
인수는POST
요청을 사용하여 온전한 새 줄로 바이너리 페이로드를 보내는 데 사용됩니다.
OpenShift Container Platform에서는 유효하지 않은 요청 페이로드(예: 유효하지 않은 콘텐츠 유형, 구문 분석할 수 없거나 유효하지 않은 콘텐츠 등)가 제공되는 경우에도 일반 Webhook에서 빌드를 트리거할 수 있습니다. 이 동작은 이전 버전과의 호환성을 위해 유지됩니다. 유효하지 않은 요청 페이로드가 제공되면 OpenShift Container Platform에서 HTTP 200 OK
응답의 일부로 JSON 형식의 알림을 반환합니다.
2.8.1.1.5. Webhook URL 표시
다음 명령을 사용하여 빌드 구성과 관련된 Webhook URL을 표시할 수 있습니다. 이 명령에서 Webhook URL을 표시하지 않으면 해당 빌드 구성에 Webhook 트리거가 정의되지 않습니다.
프로세스
-
BuildConfig
와 관련된 Webhook URL을 표시하려면 다음을 실행합니다.
$ oc describe bc <name>
2.8.1.2. 이미지 변경 트리거 사용
개발자는 기본 이미지가 변경될 때마다 자동으로 실행되도록 빌드를 구성할 수 있습니다.
이미지 변경 트리거를 사용하여 업스트림 이미지의 새 버전을 사용할 수 있을 때 빌드를 자동으로 호출할 수 있습니다. 예를 들어 빌드가 RHEL 이미지를 기반으로 하는 경우 해당 빌드를 트리거하여 RHEL 이미지를 변경할 때마다 실행할 수 있습니다. 결과적으로 애플리케이션 이미지는 항상 최신 RHEL 기본 이미지에서 실행됩니다.
v1 컨테이너 레지스트리의 컨테이너 이미지를 가리키는 이미지 스트림은 이미지 스트림 태그를 사용할 수 있을 때 빌드를 한 번만 트리거하고 후속 이미지 업데이트에서는 빌드를 트리거하지 않습니다. 이는 v1 컨테이너 레지스트리에서 고유하게 확인할 수 있는 이미지가 없기 때문입니다.
절차
트리거로 사용하려는 업스트림 이미지를 가리키는
ImageStream
을 정의합니다.kind: "ImageStream" apiVersion: "v1" metadata: name: "ruby-20-centos7"
이는
<system-registry>/<namespace>/ruby-20-centos7
에 있는 컨테이너 이미지 리포지토리에 연결된 이미지 스트림을 정의합니다.<system-registry>
는 OpenShift Container Platform에서 실행 중인docker-registry
라는 이름을 사용하여 서비스로 정의됩니다.이미지 스트림이 빌드의 기본 이미지인 경우 빌드 전략의
from
필드를ImageStream
을 가리키도록 설정합니다.strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "ruby-20-centos7:latest"
이 경우
sourceStrategy
정의에서는 이 네임스페이스 내에 있는ruby-20-centos7
이라는 이미지 스트림의latest
태그를 사용합니다.ImageStreams
를 가리키는 하나 이상의 트리거를 사용하여 빌드를 정의합니다.type: "ImageChange" 1 imageChange: {} type: "ImageChange" 2 imageChange: from: kind: "ImageStreamTag" name: "custom-image:latest"
전략 이미지 스트림에 이미지 변경 트리거를 사용하는 경우 생성된 빌드에 해당 태그와 일치하는 최신 이미지를 가리키는 변경 불가능한 Docker 태그가 제공됩니다. 이 새 이미지 참조는 빌드에 대해 실행할 때 전략에서 사용합니다.
전략 이미지 스트림을 참조하지 않는 다른 이미지 변경 트리거의 경우 새 빌드가 시작되지만 빌드 전략은 고유 이미지 참조로 업데이트되지 않습니다.
이 예제에는 전략에 대한 이미지 변경 트리거가 있으므로 결과 빌드는 다음과 같습니다.
strategy: sourceStrategy: from: kind: "DockerImage" name: "172.30.17.3:5001/mynamespace/ruby-20-centos7:<immutableid>"
그 결과 트리거된 빌드는 리포지토리로 방금 푸시된 새 이미지를 사용하고 동일한 입력을 사용하여 빌드를 다시 실행할 수 있습니다.
이미지 변경 트리거를 일시 정지하여 빌드를 시작하기 전에 참조 이미지 스트림에 대한 다양한 변경 사항을 허용할 수 있습니다. 처음에 ImageChangeTrigger
를 BuildConfig
에 추가할 때 빌드가 즉시 트리거되지 않도록 paused
특성을 true로 설정할 수도 있습니다.
type: "ImageChange" imageChange: from: kind: "ImageStreamTag" name: "custom-image:latest" paused: true
모든 Strategy
유형의 이미지 필드를 설정하는 것 외에 사용자 지정 빌드의 경우 OPENSHIFT_CUSTOM_BUILD_BASE_IMAGE
환경 변수도 확인합니다. 존재하지 않는 경우 변경 불가능한 이미지 참조를 사용하여 생성됩니다. 존재하는 경우 변경 불가능한 이미지 참조를 사용하여 업데이트됩니다.
Webhook 트리거 또는 수동 요청으로 인해 빌드가 트리거되는 경우 생성된 빌드는 Strategy
에서 참조한 ImageStream
의 확인된 <immutableid>
를 사용합니다. 그러면 쉽게 재현할 수 있도록 일관된 이미지 태그를 사용하여 빌드를 수행할 수 있습니다.
추가 리소스
2.8.1.3. 빌드의 이미지 변경 트리거 식별
개발자는 이미지 변경 트리거가 있는 경우 마지막 빌드를 시작한 이미지 변경 사항을 확인할 수 있습니다. 이는 빌드를 디버깅하거나 문제 해결하는 데 유용할 수 있습니다.
BuildConfig
예
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: bc-ict-example namespace: bc-ict-example-namespace spec: # ... triggers: - imageChange: from: kind: ImageStreamTag name: input:latest namespace: bc-ict-example-namespace - imageChange: from: kind: ImageStreamTag name: input2:latest namespace: bc-ict-example-namespace type: ImageChange status: imageChangeTriggers: - from: name: input:latest namespace: bc-ict-example-namespace lastTriggerTime: "2021-06-30T13:47:53Z" lastTriggeredImageID: image-registry.openshift-image-registry.svc:5000/bc-ict-example-namespace/input@sha256:0f88ffbeb9d25525720bfa3524cb1bf0908b7f791057cf1acfae917b11266a69 - from: name: input2:latest namespace: bc-ict-example-namespace lastTriggeredImageID: image-registry.openshift-image-registry.svc:5000/bc-ict-example-namespace/input2@sha256:0f88ffbeb9d25525720bfa3524cb2ce0908b7f791057cf1acfae917b11266a69 lastVersion: 1
이 예제에서는 이미지 변경 트리거와 관련이 없는 요소를 생략합니다.
사전 요구 사항
- 여러 이미지 변경 트리거를 구성했습니다. 이러한 트리거는 하나 이상의 빌드를 트리거했습니다.
절차
buildConfig.status.imageChangeTriggers
에서 최신 타임 스탬프가 있는lastTriggerTime
을 식별합니다.ImageChangeTriggerStatus
Then you use the `name` and `namespace` from that build to find the corresponding image change trigger in `buildConfig.spec.triggers`.
-
imageChangeTriggers에서
타임스탬프를 비교하여 최신 정보를 식별합니다.
이미지 변경 트리거
빌드 구성에서 buildConfig.spec.triggers
는 빌드 트리거 정책인 BuildTriggerPolicy
의 배열입니다.
각 BuildTriggerPolicy
에는 type
필드와 포인터 필드 세트가 있습니다. 각 포인터 필드는 type
필드에 허용된 값 중 하나에 해당합니다. 따라서 BuildTriggerPolicy
를 하나의 포인터 필드로만 설정할 수 있습니다.
이미지 변경 트리거의 경우 type
값은 ImageChange
입니다. 그런 다음 imageChange
필드는 다음 필드가 있는 ImageChangeTrigger
오브젝트의 포인터입니다.
-
lastTriggeredImageID
: 예제에 표시되지 않는 이 필드는 OpenShift Container Platform 4.8에서 더 이상 사용되지 않으며 향후 릴리스에서 무시됩니다. 이BuildConfig
에서 마지막 빌드가 트리거된 경우ImageStreamTag
에 대한 확인된 이미지 참조가 포함됩니다. -
paused
: 예제에 표시되지 않는 이 필드를 사용하여 이 특정 이미지 변경 트리거를 일시적으로 비활성화할 수 있습니다. -
from
: 이 필드를 사용하여 이 이미지 변경 트리거를 구동하는ImageStreamTag
를 참조합니다. 유형은 핵심 Kubernetes 유형인OwnerReference
입니다.
from
필드에는 다음과 같은 참고 필드가 있습니다. kind
: 이미지 변경 트리거의 경우 지원되는 유일한 값은 ImageStreamTag
입니다. namespace
:이 필드를 사용하여 ImageStreamTag
의 네임스페이스를 지정합니다. ** name
:이 필드를 사용하여 ImageStreamTag
를 지정합니다.
이미지 변경 트리거 상태
빌드 구성에서 buildConfig.status.imageChangeTriggers
는 ImageChangeTriggerStatus
요소의 배열입니다. 각 ImageChangeTriggerStatus
요소에는 앞의 예에서 표시된 from
요소가 포함됩니다.
,
lastTriggeredImageID
및 lastTriggerTime
가장 최근의 lastTriggerTime
이 있는 ImageChangeTriggerStatus
가 가장 최근 빌드를 트리거했습니다. 해당 name
및 namespace
를 사용하여 빌드를 트리거한 buildConfig.spec.triggers
에서 이미지 변경 트리거를 식별합니다.
가장 최근 타임스탬프를 사용하는 lastTriggerTime
은 마지막 빌드의 ImageChangeTriggerStatus
를 나타냅니다. 이 ImageChangeTriggerStatus
에는 빌드를 트리거한 buildConfig.spec.triggers
의 이미지 변경 트리거와 동일한 name
과 namespace
가 있습니다.
추가 리소스
2.8.1.4. 구성 변경 트리거
구성 변경 트리거를 사용하면 새 BuildConfig
가 생성되는 즉시 빌드가 자동으로 호출됩니다.
다음은 BuildConfig
내 트리거 정의 YAML의 예입니다.
type: "ConfigChange"
구성 변경 트리거는 현재 새 BuildConfig
를 생성할 때만 작동합니다. 향후 릴리스에서는 BuildConfig
가 업데이트될 때마다 구성 변경 트리거도 빌드를 시작할 수 있습니다.
2.8.1.4.1. 트리거 수동 설정
oc set triggers
를 사용하여 빌드 구성에서 트리거를 추가 및 제거할 수 있습니다.
프로세스
빌드 구성에 GitHub Webhook 트리거를 설정하려면 다음을 사용합니다.
$ oc set triggers bc <name> --from-github
이미지 변경 트리거를 설정하려면 다음을 사용합니다.
$ oc set triggers bc <name> --from-image='<image>'
트리거를 제거하려면
--remove
를 추가합니다.$ oc set triggers bc <name> --from-bitbucket --remove
Webhook 트리거가 이미 있는 경우 해당 트리거를 다시 추가하면 Webhook 보안이 다시 생성됩니다.
자세한 내용은 다음을 실행하여 도움말 문서를 참조하십시오.
$ oc set triggers --help
2.8.2. 빌드 후크
빌드 후크를 사용하면 빌드 프로세스에 동작을 삽입할 수 있습니다.
BuildConfig
오브젝트의 postCommit
필드는 빌드 출력 이미지를 실행하는 임시 컨테이너 내에서 명령을 실행합니다. 후크는 이미지의 마지막 계층을 커밋한 직후 그리고 이미지를 레지스트리로 푸시되기 전에 실행됩니다.
현재 작업 디렉터리는 이미지의 WORKDIR
로 설정되어 있으며 이는 컨테이너 이미지의 기본 작업 디렉터리입니다. 대부분의 이미지에서 이 디렉터리는 소스 코드가 있는 위치입니다.
스크립트 또는 명령에서 0이 아닌 종료 코드를 반환하거나 임시 컨테이너를 시작하지 못하는 경우 후크가 실패합니다. 후크가 실패하면 빌드가 실패로 표시되고 이미지를 레지스트리로 푸쉬하지 않습니다. 실패 이유는 빌드 로그를 확인하여 검사할 수 있습니다.
빌드 후크를 사용하면 빌드를 완료로 표시하고 레지스트리에 이미지를 제공하기 전에 단위 테스트를 실행하여 이미지를 확인할 수 있습니다. 모든 테스트를 통과하고 테스트 실행기에서 종료 코드 0
을 반환하면 빌드가 성공으로 표시됩니다. 실패한 테스트가 있는 경우 빌드가 실패로 표시됩니다. 어떠한 경우든 빌드 로그에는 테스트 실행기의 출력이 포함되므로 실패한 테스트를 확인할 수 있습니다.
postCommit
후크는 테스트 실행뿐만 아니라 다른 명령에도 사용할 수 있습니다. 이 후크는 임시 컨테이너에서 실행되기 때문에 후크에 의한 변경 사항은 지속되지 않습니다. 즉 후크를 실행해도 최종 이미지에는 영향을 미치지 않습니다. 이러한 동작으로 인해 특히 자동으로 삭제되어 최종 이미지에 존재하지 않는 테스트 종속 항목을 설치하고 사용할 수 있습니다.
2.8.2.1. post-commit 빌드 후크 구성
빌드 후 후크를 구성하는 방법은 다양합니다. 다음 예제에서 모든 양식은 동일하고 bundle exec rake test --verbose
를 실행합니다.
프로세스
쉘 스크립트:
postCommit: script: "bundle exec rake test --verbose"
script
값은/bin/sh -ic
를 사용하여 실행할 쉘 스크립트입니다. 쉘 스크립트가 빌드 후크를 실행하는 데 적합한 경우 이 값을 사용합니다. 예를 들면 위와 같이 단위 테스트를 실행하는 경우입니다. 이미지 항목 지점을 제어하려는 경우 또는 이미지에/bin/sh
가 없는 경우command
및/또는args
를 사용합니다.참고추가
-i
플래그는 CentOS 및 RHEL 이미지 작업 환경을 개선하기 위해 도입되었으며 향후 릴리스에서 제거될 수 있습니다.이미지 진입점으로서의 명령:
postCommit: command: ["/bin/bash", "-c", "bundle exec rake test --verbose"]
이 양식에서
command
는 실행할 명령에 해당하며 Dockerfile 참조에 설명된 exec 형식의 이미지 진입점을 덮어씁니다. 이 명령은 이미지에/bin/sh
가 없거나 쉘을 사용하지 않는 경우 필요합니다. 다른 모든 경우에는script
를 사용하는 것이 더 편리할 수 있습니다.인수가 있는 명령:
postCommit: command: ["bundle", "exec", "rake", "test"] args: ["--verbose"]
이 형식은
command
에 인수를 추가하는 것과 동일합니다.
script
와 command
를 동시에 제공하면 유효하지 않은 빌드 후크가 생성됩니다.
2.8.2.2. CLI를 사용하여 post-commit 빌드 후크 설정
oc set build-hook
명령은 빌드 설정에 빌드 후크를 설정하는 데 사용할 수 있습니다.
프로세스
명령을 post-commit 빌드 후크로 설정하려면 다음을 실행합니다.
$ oc set build-hook bc/mybc \ --post-commit \ --command \ -- bundle exec rake test --verbose
스크립트를 post-commit 빌드 후크로 설정하려면 다음을 실행합니다.
$ oc set build-hook bc/mybc --post-commit --script="bundle exec rake test --verbose"
2.9. 고급 빌드 수행
다음 섹션에서는 빌드 리소스 및 최대 기간 설정, 노드에 빌드 할당, 빌드 연결, 빌드 정리, 빌드 실행 정책 등 고급 빌드 작업에 대한 지침을 제공합니다.
2.9.1. 빌드 리소스 설정
기본적으로 빌드는 Pod에서 메모리 및 CPU와 같이 바인딩되지 않은 리소스를 사용하여 완료합니다. 이러한 리소스는 제한될 수 있습니다.
프로세스
다음 두 가지 방법으로 리소스 사용을 제한할 수 있습니다.
- 프로젝트의 기본 컨테이너 제한에 리소스 제한을 지정하여 리소스 사용 제한을 제한합니다.
리소스 제한을 빌드 구성의 일부로 지정하여 리소스 사용을 제한합니다. **다음 예제에서는 각
resources
,cpu
,memory
매개변수가 선택 사항입니다.apiVersion: "v1" kind: "BuildConfig" metadata: name: "sample-build" spec: resources: limits: cpu: "100m" 1 memory: "256Mi" 2
그러나 프로젝트에 할당량을 정의한 경우 다음 두 항목 중 하나가 필요합니다.
requests
가 명시적으로 설정된resources
섹션:resources: requests: 1 cpu: "100m" memory: "256Mi"
- 1
requests
오브젝트에 할당량의 리소스 목록에 해당하는 리소스 목록이 포함되어 있습니다.
프로젝트에 정의된 제한 범위:
LimitRange
오브젝트의 기본값은 빌드 프로세스 중 생성된 Pod에 적용됩니다.그러지 않으면 할당량을 충족하지 못하여 빌드 Pod 생성이 실패합니다.
2.9.2. 최대 기간 설정
BuildConfig
오브젝트를 정의할 때는 completionDeadlineSeconds
필드를 설정하여 최대 기간을 정의할 수 있습니다. 이는 초 단위로 지정되며 기본적으로 설정되어 있지 않습니다. 설정하지 않으면 최대 기간이 적용되지 않습니다.
최대 기간은 시스템에서 빌드 Pod를 예약하는 시점부터 계산되며 빌더 이미지를 가져오는 데 필요한 시간을 포함하여 활성화할 수 있는 기간을 정의합니다. 지정된 타임아웃에 도달하면 OpenShift Container Platform에서 빌드를 종료합니다.
프로세스
최대 기간을 설정하려면
BuildConfig
에서completionDeadlineSeconds
를 지정합니다. 다음 예제에서는completionDeadlineSeconds
필드를 30분으로 지정하는BuildConfig
의 일부를 보여줍니다.spec: completionDeadlineSeconds: 1800
파이프라인 전략 옵션에서는 이 설정이 지원되지 않습니다.
2.9.3. 특정 노드에 빌드 할당
빌드 구성의 nodeSelector
필드에 라벨을 지정하면 빌드가 특정 노드에서 실행되도록 타겟을 지정할 수 있습니다. nodeSelector
값은 빌드 Pod를 예약할 때 Node
라벨과 일치하는 일련의 키-값 쌍입니다.
nodeSelector
값은 클러스터 전체 기본값 및 덮어쓰기 값으로도 제어할 수 있습니다. 기본값은 빌드 구성에서 nodeSelector
에 키-값 쌍을 정의하지 않고 명시적으로 비어 있는 맵 값(nodeSelector:{}
)도 정의하지 않는 경우에만 적용됩니다. 덮어쓰기 값은 키에 따라 빌드 구성의 값을 대체합니다.
지정된 NodeSelector
가 해당 라벨이 있는 노드와 일치하지 않는 경우 빌드는 계속 Pending
상태로 무기한 유지됩니다.
프로세스
BuildConfig
의nodeSelector
필드에 라벨을 할당하여 특정 노드에서 실행할 빌드를 할당합니다. 예를 들면 다음과 같습니다.apiVersion: "v1" kind: "BuildConfig" metadata: name: "sample-build" spec: nodeSelector:1 key1: value1 key2: value2
- 1
- 이 빌드 구성과 관련된 빌드는
key1=value2
및key2=value2
라벨이 있는 노드에서만 실행됩니다.
2.9.4. 연결된 빌드
Go, C, C++, Java와 같이 컴파일된 언어의 경우 애플리케이션 이미지에서 컴파일하는 데 필요한 종속 항목을 포함하면 이미지 크기가 늘어나거나 악용될 수 있는 취약점이 발생할 수 있습니다.
이러한 문제를 방지하기 위해 두 개의 빌드를 함께 연결할 수 있습니다. 하나는 컴파일된 아티팩트를 생성하는 빌드이고 다른 하나는 해당 아티팩트를 실행하는 별도의 이미지에 아티팩트를 배치하는 빌드입니다.
다음 예제에서는 S2I(source-to-image) 빌드가 Docker 빌드와 결합되어 아티팩트를 컴파일하고 해당 아티팩트는 별도의 런타임 이미지에 배치됩니다.
이 예제에서는 S2I 빌드와 Docker 빌드를 연결하지만 첫 번째 빌드에서는 원하는 아티팩트를 포함하는 이미지를 생성하는 모든 전략을 사용할 수 있고, 두 번째 빌드에서는 이미지의 입력 콘텐츠를 소비하는 모든 전략을 사용할 수 있습니다.
첫 번째 빌드에서는 애플리케이션 소스를 가져와서 WAR
파일이 포함된 이미지를 생성합니다. 이미지는 artifact-image
이미지 스트림으로 푸쉬합니다. 출력 아티팩트의 경로는 사용된 S2I 빌더의 assemble
스크립트에 따라 달라집니다. 다음 예제의 경우 /wildfly/standalone/deployments/ROOT.war
로 출력됩니다.
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: artifact-build spec: output: to: kind: ImageStreamTag name: artifact-image:latest source: git: uri: https://github.com/openshift/openshift-jee-sample.git ref: "master" strategy: sourceStrategy: from: kind: ImageStreamTag name: wildfly:10.1 namespace: openshift
두 번째 빌드에서는 이미지 소스와 첫 번째 빌드의 출력 이미지 내부에 있는 WAR 파일에 대한 경로를 사용합니다. 인라인 dockerfile
은 해당 WAR
파일을 런타임 이미지에 복사합니다.
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: image-build spec: output: to: kind: ImageStreamTag name: image-build:latest source: dockerfile: |- FROM jee-runtime:latest COPY ROOT.war /deployments/ROOT.war images: - from: 1 kind: ImageStreamTag name: artifact-image:latest paths: 2 - sourcePath: /wildfly/standalone/deployments/ROOT.war destinationDir: "." strategy: dockerStrategy: from: 3 kind: ImageStreamTag name: jee-runtime:latest triggers: - imageChange: {} type: ImageChange
이 설정으로 인해 두 번째 빌드의 출력 이미지에 WAR
파일을 생성하는 데 필요한 빌드 툴을 포함하지 않아도 됩니다. 또한 두 번째 빌드에는 이미지 변경 트리거가 포함되어 있기 때문에 첫 번째 빌드가 실행되어 바이너리 아티팩트가 포함된 새 이미지를 생성할 때마다 두 번째 빌드가 자동으로 트리거되어 해당 아티팩트가 포함된 런타임 이미지를 생성합니다. 따라서 두 빌드 모두 두 단계가 있는 단일 빌드로 작동합니다.
2.9.5. 빌드 정리
기본적으로 라이프사이클이 완료된 빌드는 무기한 유지됩니다. 유지되는 이전 빌드의 수를 제한할 수 있습니다.
프로세스
BuildConfig
의successfulBuildsHistoryLimit
또는failedBuildsHistoryLimit
에 양의 정수 값을 제공하여 유지되는 이전 빌드의 수를 제한합니다. 예를 들면 다음과 같습니다.apiVersion: "v1" kind: "BuildConfig" metadata: name: "sample-build" spec: successfulBuildsHistoryLimit: 2 1 failedBuildsHistoryLimit: 2 2
다음 작업 중 하나로 빌드 정리를 트리거합니다.
- 빌드 구성 업데이트
- 빌드가 라이프사이클을 완료할 때까지 대기
빌드는 생성 타임스탬프에 따라 정렬되고 가장 오래된 빌드가 가장 먼저 정리됩니다.
관리자는 'oc adm' 오브젝트 정리 명령을 사용하여 수동으로 빌드를 정리할 수 있습니다.
2.9.6. 빌드 정책 실행
빌드 실행 정책은 빌드 구성에서 생성한 빌드를 실행할 순서를 지정합니다. 이 작업은 Build
사양의 spec
섹션에서 runPolicy
필드 값을 변경하여 수행할 수 있습니다.
다음과 같이 기존 빌드 구성의 runPolicy
값을 변경할 수도 있습니다.
-
Parallel
을Serial
또는SerialLatestOnly
로 변경하고 이 구성에서 새 빌드를 트리거하면 직렬 빌드는 단독으로만 실행할 수 있으므로 모든 병렬 빌드가 완료될 때까지 새 빌드가 대기합니다. -
Serial
을SerialLatestOnly
로 변경하고 새 빌드를 트리거하면 현재 실행 중인 빌드와 최근 생성된 빌드를 제외하고 대기열에 있는 기존 빌드가 모두 취소됩니다. 최신 빌드는 다음에 실행됩니다.
2.10. 빌드에서 Red Hat 서브스크립션 사용
OpenShift Container Platform에서 권한이 있는 빌드를 실행하려면 다음 섹션을 사용합니다.
2.10.1. Red Hat Universal Base Image에 대한 이미지 스트림 태그 생성
빌드 내에서 Red Hat 서브스크립션을 사용하려면 UBI(Universal Base Image)를 참조하는 이미지 스트림 태그를 생성합니다.
클러스터의 모든 프로젝트에서 UBI를 사용할 수 있도록 하려면 openshift
네임스페이스에 이미지 스트림 태그를 추가합니다. 또는 UBI를 특정 프로젝트에서 사용할 수 있도록 하려면 해당 프로젝트에 이미지 스트림 태그를 추가합니다.
이미지 스트림 태그를 이러한 방식으로 사용할 때의 이점은 다른 사용자에게 가져오기 보안을 노출하지 않고 설치의 registry.redhat.io
자격 증명에 따라 UBI에 대한 액세스 권한을 부여할 수 있다는 점입니다. 이 방식은 각 개발자에게 각 프로젝트에서 registry.redhat.io
자격 증명을 사용하여 가져오기 보안을 설치하도록 요구하는 방식보다 편리합니다.
프로세스
openshift
네임스페이스에ImageStreamTag
를 생성하려면 모든 프로젝트의 개발자가 다음을 입력하면 됩니다.$ oc tag --source=docker registry.redhat.io/ubi8/ubi:latest ubi:latest -n openshift
작은 정보또는 다음 YAML을 적용하여
openshift
네임스페이스에ImageStreamTag
를 생성할 수 있습니다.apiVersion: image.openshift.io/v1 kind: ImageStream metadata: name: ubi namespace: openshift spec: tags: - from: kind: DockerImage name: registry.redhat.io/ubi8/ubi:latest name: latest referencePolicy: type: Source
단일 프로젝트에서
ImageStreamTag
를 생성하려면 다음을 입력합니다.$ oc tag --source=docker registry.redhat.io/ubi8/ubi:latest ubi:latest
작은 정보다음 YAML을 적용하여 단일 프로젝트에서
ImageStreamTag
를 생성할 수 있습니다.apiVersion: image.openshift.io/v1 kind: ImageStream metadata: name: ubi spec: tags: - from: kind: DockerImage name: registry.redhat.io/ubi8/ubi:latest name: latest referencePolicy: type: Source
2.10.2. 서브스크립션 자격을 빌드 보안으로 추가
Red Hat 서브스크립션을 사용하여 콘텐츠를 설치하는 빌드에는 자격 키가 빌드 보안으로 포함되어야 합니다.
사전 요구 사항
서브스크립션을 통해 Red Hat 인타이틀먼트에 액세스할 수 있어야 합니다. 인타이틀먼트 보안은 Insights Operator에 의해 자동으로 생성됩니다.
RHEL(Red Hat Enterprise Linux) 7을 사용하여 인타이틀먼트 빌드를 수행하는 경우 yum
명령을 실행하기 전에 Dockerfile에 다음 지침이 있어야 합니다.
RUN rm /etc/rhsm-host
절차
빌드 구성의 Docker 전략에 빌드 볼륨으로 etc-pki-entitlement 보안을 추가합니다.
strategy: dockerStrategy: from: kind: ImageStreamTag name: ubi:latest volumes: - name: etc-pki-entitlement mounts: - destinationPath: /etc/pki/entitlement source: type: Secret secret: secretName: etc-pki-entitlement
2.10.3. 서브스크립션 관리자를 사용한 빌드 실행
2.10.3.1. 서브스크립션 관리자를 사용하는 Docker 빌드
Docker 전략 빌드에서는 Subscription Manager를 사용하여 서브스크립션 콘텐츠를 설치할 수 있습니다.
사전 요구 사항
자격 키는 빌드 전략 볼륨으로 추가해야 합니다.
절차
다음을 예제 Dockerfile로 사용하여 서브스크립션 관리자를 통해 콘텐츠를 설치합니다.
FROM registry.redhat.io/ubi8/ubi:latest RUN dnf search kernel-devel --showduplicates && \ dnf install -y kernel-devel
2.10.4. Red Hat Satellite 서브스크립션을 사용하여 빌드 실행
2.10.4.1. 빌드에 Red Hat Satellite 구성 추가
Red Hat Satellite를 사용하여 콘텐츠를 설치하는 빌드에서는 Satellite 리포지토리에서 콘텐츠를 가져오기 위해 적절한 구성을 제공해야 합니다.
사전 요구 사항
Satellite 인스턴스에서 콘텐츠를 다운로드하는
yum
호환 리포지토리 구성 파일을 제공하거나 생성해야 합니다.리포지터리 구성 샘플
[test-<name>] name=test-<number> baseurl = https://satellite.../content/dist/rhel/server/7/7Server/x86_64/os enabled=1 gpgcheck=0 sslverify=0 sslclientkey = /etc/pki/entitlement/...-key.pem sslclientcert = /etc/pki/entitlement/....pem
절차
Satellite 리포지토리 구성 파일이 포함된
ConfigMap
을 생성합니다.$ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
Satellite 리포지토리 구성 및 인타이틀먼트 키를 빌드 볼륨으로 추가합니다.
strategy: dockerStrategy: from: kind: ImageStreamTag name: ubi:latest volumes: - name: yum-repos-d mounts: - destinationPath: /etc/yum.repos.d source: type: ConfigMap configMap: name: yum-repos-d - name: etc-pki-entitlement mounts: - destinationPath: /etc/pki/entitlement source: type: Secret secret: secretName: etc-pki-entitlement
2.10.4.2. Red Hat Satellite 서브스크립션을 사용하는 Docker 빌드
Docker 전략 빌드에서는 Red Hat Satellite 리포지토리를 사용하여 서브스크립션 콘텐츠를 설치할 수 있습니다.
사전 요구 사항
- 인타이틀먼트 키 및 Satellite 리포지토리 구성을 빌드 볼륨으로 추가했습니다.
절차
다음을 예제 Dockerfile로 사용하여 Satellite를 통해 콘텐츠를 설치합니다.
FROM registry.redhat.io/ubi8/ubi:latest RUN dnf search kernel-devel --showduplicates && \ dnf install -y kernel-devel
2.10.5. SharedSecret 오브젝트를 사용하여 권한이 있는 빌드 실행
다른 네임스페이스의 Secret
오브젝트에서 RHEL 인타이틀먼트를 안전하게 사용하는 하나의 네임스페이스에서 빌드를 구성하고 수행할 수 있습니다.
Build
오브젝트와 동일한 네임스페이스에서 서브스크립션 자격 증명으로 Secret
오브젝트를 생성하여 OpenShift 빌드의 RHEL 인타이틀먼트에 계속 액세스할 수 있습니다. 그러나 OpenShift Container Platform 4.10 이상에서는 OpenShift Container Platform 시스템 네임스페이스 중 하나에서 Secret
오브젝트에서 인증 정보 및 인증서에 액세스할 수 있습니다. Secret
오브젝트를 참조하는 SharedSecret
CR(사용자 정의 리소스) 인스턴스의 CSI 볼륨 마운트를 사용하여 권한이 있는 빌드를 실행합니다.
이 절차에서는 OpenShift Container Platform 빌드에서 CSI 볼륨 마운트를 선언하는 데 사용할 수 있는 새로 도입된 Shared Resources CSI Driver 기능을 사용합니다. 또한 OpenShift Container Platform Insights Operator를 사용합니다.
Shared Resources CSI Driver 및 Build CSI Volumes는 두 가지 기술 프리뷰 기능으로, Red Hat 제품 SLA(서비스 수준 계약)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
Shared Resources CSI Driver 및 Build CSI Volumes 기능은 현재 기술 프리뷰 기능의 하위 집합인 TechPreviewNoUpgrade
기능 세트에도 속합니다. 테스트 클러스터에서 TechPreviewNoUpgrade
기능 세트를 활성화하면 프로덕션 클러스터에서 기능을 비활성화한 상태에서 완전히 테스트할 수 있습니다. 이 기능 세트를 활성화하면 실행 취소할 수 없으며 마이너 버전 업데이트를 방지할 수 있습니다. 이 기능 세트는 프로덕션 클러스터에서는 권장되지 않습니다. 다음 "추가 리소스" 섹션의 "기능 게이트를 사용하여 기술 프리뷰 기능 활성화"를 참조하십시오.
사전 요구 사항
-
기능 게이트를 사용하여 설정된
TechPreviewNoUpgrade
기능을 활성화했습니다. -
Insights Operator가 서브스크립션 인증 정보를 저장하는
Secret
오브젝트를 참조하는SharedSecret
CR(사용자 정의 리소스) 인스턴스가 있습니다. 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
- 빌드 구성을 생성하고 빌드를 시작합니다.
-
oc get sharedsecrets
명령을 입력하고 비어 있지 않은 목록을 다시 가져와서 사용할 수 있는SharedSecret
CR 인스턴스를 검색합니다. -
네임스페이스에서 사용할 수 있는
빌더
서비스 계정이 지정된SharedSecret
CR 인스턴스를 사용할 수 있는지 확인합니다. 즉,특정 SharedSecret>을 사용할 수 있는 oc adm policy를 실행하여 네임스페이스의
확인할 수 있습니다.빌더
서비스 계정이 나열되는지
이 목록에 있는 마지막 두 사전 요구 사항이 모두 충족, 설정 또는 설정하도록 사용자에게 필요한 역할 기반 액세스 제어(RBAC)를 요청하여 SharedSecret
CR 인스턴스를 검색하고 서비스 계정이 SharedSecret
CR 인스턴스를 사용할 수 있도록 합니다.
절차
YAML 콘텐츠와 함께
oc apply
를 사용하여SharedSecret
CR 인스턴스를 사용하도록빌더
서비스 계정 RBAC 권한을 부여합니다.참고현재
kubectl
및oc
는 Pod 보안을 중심으로 하는 역할에use
동사를 제한하는 특수 케이스 논리를 하드 코딩했습니다. 따라서oc create role …
을 사용하여SharedSecret
CR 인스턴스를 사용하는 데 필요한 역할을 생성할 수 없습니다.YAML
Role
오브젝트 정의를 사용하는oc apply -f
명령의 예$ oc apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: shared-resource-my-share namespace: my-namespace rules: - apiGroups: - sharedresource.openshift.io resources: - sharedsecrets resourceNames: - my-share verbs: - use EOF
oc
명령을 사용하여 역할과 연결된RoleBinding
을 만듭니다.oc create rolebinding
명령 예$ oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
RHEL 인타이틀먼트에 액세스하는
BuildConfig
오브젝트를 생성합니다.YAML
BuildConfig
오브젝트 정의 예apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: my-csi-bc namespace: my-csi-app-namespace spec: runPolicy: Serial source: dockerfile: | FROM registry.redhat.io/ubi8/ubi:latest RUN ls -la /etc/pki/entitlement RUN rm /etc/rhsm-host RUN yum repolist --disablerepo=* RUN subscription-manager repos --enable rhocp-4.9-for-rhel-8-x86_64-rpms RUN yum -y update RUN yum install -y openshift-clients.x86_64 strategy: type: Docker dockerStrategy: volumes: - mounts: - destinationPath: "/etc/pki/entitlement" name: my-csi-shared-secret source: csi: driver: csi.sharedresource.openshift.io readOnly: true volumeAttributes: sharedSecret: my-share-bc type: CSI
BuildConfig
오브젝트에서 빌드를 시작하고oc
명령으로 로그를 따릅니다.oc start-build 명령 예
$ oc start-build my-csi-bc -F
예 2.1. oc start-build 명령의 출력 예
참고다음 출력의 일부 섹션이
…
로 교체되었습니다.build.build.openshift.io/my-csi-bc-1 started Caching blobs under "/var/cache/blobs". Pulling image registry.redhat.io/ubi8/ubi:latest ... Trying to pull registry.redhat.io/ubi8/ubi:latest... Getting image source signatures Copying blob sha256:5dcbdc60ea6b60326f98e2b49d6ebcb7771df4b70c6297ddf2d7dede6692df6e Copying blob sha256:8671113e1c57d3106acaef2383f9bbfe1c45a26eacb03ec82786a494e15956c3 Copying config sha256:b81e86a2cb9a001916dc4697d7ed4777a60f757f0b8dcc2c4d8df42f2f7edb3a Writing manifest to image destination Storing signatures Adding transient rw bind mount for /run/secrets/rhsm STEP 1/9: FROM registry.redhat.io/ubi8/ubi:latest STEP 2/9: RUN ls -la /etc/pki/entitlement total 360 drwxrwxrwt. 2 root root 80 Feb 3 20:28 . drwxr-xr-x. 10 root root 154 Jan 27 15:53 .. -rw-r--r--. 1 root root 3243 Feb 3 20:28 entitlement-key.pem -rw-r--r--. 1 root root 362540 Feb 3 20:28 entitlement.pem time="2022-02-03T20:28:32Z" level=warning msg="Adding metacopy option, configured globally" --> 1ef7c6d8c1a STEP 3/9: RUN rm /etc/rhsm-host time="2022-02-03T20:28:33Z" level=warning msg="Adding metacopy option, configured globally" --> b1c61f88b39 STEP 4/9: RUN yum repolist --disablerepo=* Updating Subscription Management repositories. ... --> b067f1d63eb STEP 5/9: RUN subscription-manager repos --enable rhocp-4.9-for-rhel-8-x86_64-rpms Repository 'rhocp-4.9-for-rhel-8-x86_64-rpms' is enabled for this system. time="2022-02-03T20:28:40Z" level=warning msg="Adding metacopy option, configured globally" --> 03927607ebd STEP 6/9: RUN yum -y update Updating Subscription Management repositories. ... Upgraded: systemd-239-51.el8_5.3.x86_64 systemd-libs-239-51.el8_5.3.x86_64 systemd-pam-239-51.el8_5.3.x86_64 Installed: diffutils-3.6-6.el8.x86_64 libxkbcommon-0.9.1-1.el8.x86_64 xkeyboard-config-2.28-1.el8.noarch Complete! time="2022-02-03T20:29:05Z" level=warning msg="Adding metacopy option, configured globally" --> db57e92ff63 STEP 7/9: RUN yum install -y openshift-clients.x86_64 Updating Subscription Management repositories. ... Installed: bash-completion-1:2.7-5.el8.noarch libpkgconf-1.4.2-1.el8.x86_64 openshift-clients-4.9.0-202201211735.p0.g3f16530.assembly.stream.el8.x86_64 pkgconf-1.4.2-1.el8.x86_64 pkgconf-m4-1.4.2-1.el8.noarch pkgconf-pkg-config-1.4.2-1.el8.x86_64 Complete! time="2022-02-03T20:29:19Z" level=warning msg="Adding metacopy option, configured globally" --> 609507b059e STEP 8/9: ENV "OPENSHIFT_BUILD_NAME"="my-csi-bc-1" "OPENSHIFT_BUILD_NAMESPACE"="my-csi-app-namespace" --> cab2da3efc4 STEP 9/9: LABEL "io.openshift.build.name"="my-csi-bc-1" "io.openshift.build.namespace"="my-csi-app-namespace" COMMIT temp.builder.openshift.io/my-csi-app-namespace/my-csi-bc-1:edfe12ca --> 821b582320b Successfully tagged temp.builder.openshift.io/my-csi-app-namespace/my-csi-bc-1:edfe12ca 821b582320b41f1d7bab4001395133f86fa9cc99cc0b2b64c5a53f2b6750db91 Build complete, no image push requested
2.10.6. 추가 리소스
2.11. 전략에 따른 빌드 보안
OpenShift Container Platform의 빌드는 권한이 있는 컨테이너에서 실행됩니다. 권한이 있는 경우 사용한 빌드 전략에 따라 빌드를 실행하여 클러스터 및 호스트 노드에 대한 권한을 에스컬레이션할 수 있습니다. 그리고 일종의 보안 조치로 빌드 및 해당 빌드에 사용하는 전략을 실행할 수 있는 사람을 제한합니다. 사용자 정의 빌드는 권한 있는 컨테이너 내의 모든 코드를 실행할 수 있기 때문에 본질적으로 소스 빌드보다 안전하지 않으며, 기본적으로 비활성화되어 있습니다. Dockerfile 처리 논리의 취약성으로 인해 호스트 노드에 권한이 부여될 수 있으므로 Docker 빌드 권한을 주의하여 부여하십시오.
기본적으로 빌드를 생성할 수 있는 모든 사용자에게 Docker 및 S2I(Source-to-image) 빌드 전략을 사용할 수 있는 권한이 부여됩니다. 클러스터 관리자 권한이 있는 사용자는 ‘전역적으로 빌드 전략을 사용자로 제한’ 섹션에 언급된 대로 사용자 정의 빌드 전략을 활성화할 수 있습니다.
권한 부여 정책을 사용하여 빌드할 수 있는 사용자와 이들이 사용할 수 있는 빌드 전략을 제어할 수 있습니다. 각 빌드 전략에는 해당 빌드의 하위 소스가 있습니다. 사용자는 빌드를 생성할 수 있는 권한과 해당 전략을 사용하여 빌드를 생성하기 위해 빌드 전략 하위 리소스에서 생성할 수 있는 권한이 있어야 합니다. 빌드 전략 하위 리소스에 생성 권한을 부여하는 기본 역할이 제공됩니다.
표 2.3. 빌드 전략 하위 리소스 및 역할
전략 | 하위 리소스 | 역할 |
---|---|---|
Docker | 빌드/Docker | system:build-strategy-docker |
S2I(Source-to-Image) | 빌드/소스 | system:build-strategy-source |
사용자 정의 | 빌드/사용자 정의 | system:build-strategy-custom |
JenkinsPipeline | builds/jenkinspipeline | system:build-strategy-jenkinspipeline |
2.11.1. 전역적으로 빌드 전략에 대한 액세스 비활성화
특정 빌드 전략에 대한 액세스를 전역적으로 방지하려면 클러스터 관리자 권한이 있는 사용자로 로그인하여 system:authenticated
그룹에서 해당 역할을 제거한 후 주석 rbac.authorization.kubernetes.io/autoupdate: "false"
를 적용하여 API를 재시작할 때마다 변경되지 않도록 보호하십시오. 다음 예제에서는 Docker 빌드 전략을 비활성화하는 방법을 보여줍니다.
프로세스
rbac.authorization.kubernetes.io/autoupdate
주석을 적용합니다.$ oc edit clusterrolebinding system:build-strategy-docker-binding
출력 예
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "false" 1 creationTimestamp: 2018-08-10T01:24:14Z name: system:build-strategy-docker-binding resourceVersion: "225" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/system%3Abuild-strategy-docker-binding uid: 17b1f3d4-9c3c-11e8-be62-0800277d20bf roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:build-strategy-docker subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated
- 1
rbac.authorization.kubernetes.io/autoupdate
주석 값을"false"
로 변경합니다.
역할을 제거합니다.
$ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
빌드 전략 하위 소스도 이러한 역할에서 제거되었는지 확인합니다.
$ oc edit clusterrole admin
$ oc edit clusterrole edit
각 역할에 대해 비활성화할 전략 리소스에 해당하는 하위 리소스를 지정합니다.
admin에 대한 Docker 빌드 전략을 비활성화합니다.
kind: ClusterRole metadata: name: admin ... - apiGroups: - "" - build.openshift.io resources: - buildconfigs - buildconfigs/webhooks - builds/custom 1 - builds/source verbs: - create - delete - deletecollection - get - list - patch - update - watch ...
- 1
- admin 역할의 사용자에 대해 Docker 빌드를 전역적으로 비활성화하는
builds/custom
및builds/source
를 추가합니다.
2.11.2. 전역적으로 빌드 전략을 사용자로 제한
특정 사용자 집합이 특정 전략을 사용하여 빌드를 생성하도록 허용할 수 있습니다.
사전 요구 사항
- 빌드 전략에 대한 글로벌 액세스 권한을 비활성화합니다.
프로세스
빌드 전략에 해당하는 역할을 특정 사용자에게 할당합니다. 예를 들어
system:build-strategy-docker
클러스터 역할을 사용자devuser
에 추가하려면 다음을 수행합니다.$ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
주의클러스터 수준의 사용자 액세스 권한을
builds/docker
하위 리소스에 부여하면 사용자가 빌드를 생성할 수 있는 모든 프로젝트에서 Docker 전략을 사용하여 빌드를 생성할 수 있습니다.
2.11.3. 프로젝트 내 사용자로 빌드 전략 제한
전역적으로 사용자에게 빌드 전략 역할을 부여하는 것과 유사하게 프로젝트 내의 특정 사용자 집합이 특정 전략을 사용하여 빌드를 생성하도록 허용할 수 있습니다.
사전 요구 사항
- 빌드 전략에 대한 글로벌 액세스 권한을 비활성화합니다.
프로세스
빌드 전략에 해당하는 역할을 특정 프로젝트 내 사용자에게 할당합니다. 예를 들어 프로젝트
devproject
내에서system:build-strategy-docker
역할을 사용자devuser
에 추가하려면 다음을 실행합니다.$ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject
2.12. 빌드 구성 리소스
빌드 설정을 구성하려면 다음 절차를 사용합니다.
2.12.1. 빌드 컨트롤러 구성 매개변수
build.config.openshift.io/cluster
리소스에서는 다음과 같은 구성 매개변수를 제공합니다.
매개변수 | 설명 |
---|---|
|
빌드 처리 방법에 대한 클러스터 전체 정보가 들어 있습니다. 유일하게 유효한 정식 이름은
|
| 빌드의 기본 정보를 제어합니다.
여기에 설정되지 않은 값은 DefaultProxy에서 상속됩니다.
|
|
|
| 빌드에 대한 덮어쓰기 설정을 제어합니다.
|
|
|
2.12.2. 빌드 설정 구성
build.config.openshift.io/cluster
리소스를 편집하여 빌드 설정을 구성할 수 있습니다.
프로세스
build.config.openshift.io/cluster
리소스를 편집합니다.$ oc edit build.config.openshift.io/cluster
다음은
build.config.openshift.io/cluster
리소스의 예입니다.apiVersion: config.openshift.io/v1 kind: Build1 metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: "2019-05-17T13:44:26Z" generation: 2 name: cluster resourceVersion: "107233" selfLink: /apis/config.openshift.io/v1/builds/cluster uid: e2e9cc14-78a9-11e9-b92b-06d6c7da38dc spec: buildDefaults:2 defaultProxy:3 httpProxy: http://proxy.com httpsProxy: https://proxy.com noProxy: internal.com env:4 - name: envkey value: envvalue gitProxy:5 httpProxy: http://gitproxy.com httpsProxy: https://gitproxy.com noProxy: internalgit.com imageLabels:6 - name: labelkey value: labelvalue resources:7 limits: cpu: 100m memory: 50Mi requests: cpu: 10m memory: 10Mi buildOverrides:8 imageLabels:9 - name: labelkey value: labelvalue nodeSelector:10 selectorkey: selectorvalue tolerations:11 - effect: NoSchedule key: node-role.kubernetes.io/builds operator: Exists
- 1
Build
: 빌드 처리 방법에 대한 클러스터 전체 정보가 들어 있습니다. 유일하게 유효한 정식 이름은cluster
입니다.- 2
buildDefaults
: 빌드의 기본 정보를 제어합니다.- 3
defaultProxy
: 이미지 가져오기 또는 내보내기 및 소스 다운로드를 포함하여 모든 빌드 작업에 대한 기본 프록시 설정이 포함됩니다.- 4
env
: 지정된 변수가 빌드에 존재하지 않는 경우 빌드에 적용되는 기본 환경 변수 집합입니다.- 5
gitProxy
: Git 작업에 대한 프록시 설정만 포함됩니다. 설정하는 경우git clone
과 같은 모든 Git 명령의 모든 프록시 설정을 덮어씁니다.- 6
imageLabels
: 결과 이미지에 적용되는 라벨 목록입니다.BuildConfig
에 동일한 이름의 라벨을 제공하여 기본 라벨을 덮어쓸 수 있습니다.- 7
resources
: 빌드를 실행하는 데 필요한 리소스 요구 사항을 정의합니다.- 8
buildOverrides
: 빌드에 대한 덮어쓰기 설정을 제어합니다.- 9
imageLabels
: 결과 이미지에 적용되는 라벨 목록입니다. 이 표에 있는 것과 같은 이름이 있는BuildConfig
에 라벨을 제공한 경우 해당 라벨을 덮어씁니다.- 10
nodeSelector
: 빌드 Pod가 노드에 맞으려면 이 선택기가 true여야 합니다.- 11
tolerations
: 빌드 Pod에 설정된 기존 허용 오차를 덮어쓰는 허용 오차 목록입니다.
2.13. 빌드 문제 해결
다음을 사용하여 빌드 문제를 해결합니다.
2.13.1. 리소스에 대한 액세스 거부 문제 해결
리소스에 대한 액세스 요청이 거부되는 경우:
- 문제
- 다음과 같은 메시지가 표시되고 빌드가 실패합니다.
requested access to the resource is denied
- 해결
- 프로젝트에 설정된 이미지 할당량 중 하나를 초과했습니다. 현재 할당량을 확인하고 적용되는 제한과 사용 중인 스토리지를 확인합니다.
$ oc describe quota
2.13.2. 서비스 인증서 생성 실패
리소스에 대한 액세스 요청이 거부되는 경우:
- 문제
-
(서비스의
service.beta.openshift.io/serving-cert-generation-error
주석과 함께 서비스 인증서 생성이 실패하면 다음이 포함됩니다.
출력 예
secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
- 해결
-
인증서를 생성한 서비스가 더 이상 존재하지 않거나
serviceUID
가 다릅니다. 이전 보안을 제거하고 서비스에서 service.beta.openshift.io/serving-cert-generation-error 및service.beta.openshift.io/serving-cert-generation-error
-num
$ oc delete secret <secret_name>
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-
주석을 제거하는 명령에는 제거할 주석 이름 뒤에 -
가 있습니다.
2.14. 빌드에 대해 신뢰할 수 있는 추가 인증 기관 설정
이미지 레지스트리에서 이미지를 가져올 때 빌드에서 신뢰할 추가 CA(인증 기관)를 설정하려면 다음 섹션을 사용합니다.
이 절차를 수행하려면 클러스터 관리자가 ConfigMap
을 생성하고 ConfigMap
에 추가 CA를 키로 추가해야 합니다.
-
ConfigMap
은openshift-config
네임스페이스에 생성해야 합니다. domain
은ConfigMap
의 키이고value
는 PEM 형식으로 인코딩한 인증서입니다.-
각 CA는 도메인과 연결되어 있어야 합니다. 도메인 형식은
hostname[..port]
입니다.
-
각 CA는 도메인과 연결되어 있어야 합니다. 도메인 형식은
-
ConfigMap
이름은image.config.openshift.io/cluster
클러스터 범위 구성 리소스의spec.additionalTrustedCA
필드에 설정해야 합니다.
2.14.1. 클러스터에 인증 기관 추가
다음 절차에 따라 이미지를 내보내고 가져올 때 사용할 클러스터에 인증서 CA(인증 기관)를 추가할 수 있습니다.
사전 요구 사항
-
레지스트리의 공용 인증서(일반적으로
/etc/docker/certs.d/
디렉터리에 있는hostname/ca.crt
파일)에 액세스할 수 있어야 합니다.
절차
자체 서명 인증서를 사용하는 레지스트리의 경우 신뢰할 수 있는 인증서가 있는
openshift-config
네임스페이스에ConfigMap
을 생성합니다. 각 CA 파일에 대해ConfigMap
의 키가hostname[..port]
형식의 레지스트리 호스트 이름인지 확인하십시오.$ oc create configmap registry-cas -n openshift-config \ --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \ --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
클러스터 이미지 구성을 업데이트합니다.
$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
2.14.2. 추가 리소스
3장. 파이프라인
3.1. Red Hat OpenShift Pipelines 릴리스 정보
Red Hat OpenShift Pipelines는 다음을 제공하는 Tekton 프로젝트를 기반으로 하는 클라우드 네이티브 CI/CD 환경입니다.
- 표준 CRD(Kubernetes 네이티브 Pipeline 정의)
- CI 서버 관리 오버헤드가 없는 서버리스 Pipeline
- S2I, Buildah, JIB 및 Kaniko와 같은 Kubernetes 도구를 사용하여 이미지를 빌드할 수 있는 확장성
- 모든 Kubernetes 배포판에서 이식성
- Pipeline과 상호 작용하기 위한 강력한 CLI
- OpenShift Container Platform 웹 콘솔의 개발자 화면과 통합된 사용자 경험
Red Hat OpenShift Pipelines 개요는 OpenShift Pipelines 이해를 참조하십시오.
3.1.1. 호환성 및 지원 매트릭스
이 릴리스의 일부 기능은 현재 기술 프리뷰 에 있습니다. 이러한 실험적 기능은 프로덕션용이 아닙니다.
아래 표에서 기능은 다음과 같은 상태로 표시되어 있습니다.
TP | 기술 프리뷰 |
GA | 정식 출시일 (GA) |
표 3.1. 호환성 및 지원 매트릭스
Red Hat OpenShift Pipelines Version | 구성 요소 버전 | OpenShift Version | 지원 상태 | ||||||
---|---|---|---|---|---|---|---|---|---|
Operator | 파이프라인 | Trigger | CLI | 카탈로그 | 체인 | hub | 코드로 파이프라인 | ||
1.10 | 0.44.x | 0.23.x | 0.30.x | 해당 없음 | 0.15.x (TP) | 1.12.x (TP) | 0.17.x (GA) | 4.11, 4.12, 4.13 (예정) | GA |
1.9 | 0.41.x | 0.22.x | 0.28.x | 해당 없음 | 0.13.x (TP) | 1.11.x (TP) | 0.15.x (GA) | 4.11, 4.12, 4.13 (예정) | GA |
1.8 | 0.37.x | 0.20.x | 0.24.x | 해당 없음 | 0.9.0 (TP) | 1.8.x (TP) | 0.10.x (TP) | 4.10, 4.11, 4.12 | GA |
1.7 | 0.33.x | 0.19.x | 0.23.x | 0.33 | 0.8.0 (TP) | 1.7.0 (TP) | 0.5.x (TP) | 4.9, 4.10, 4.11 | GA |
1.6 | 0.28.x | 0.16.x | 0.21.x | 0.28 | 해당 없음 | 해당 없음 | 해당 없음 | 4.9 | GA |
1.5 | 0.24.x | 0.14.x (TP) | 0.19.x | 0.24 | 해당 없음 | 해당 없음 | 해당 없음 | 4.8 | GA |
1.4 | 0.22.x | 0.12.x (TP) | 0.17.x | 0.22 | 해당 없음 | 해당 없음 | 해당 없음 | 4.7 | GA |
또한 ARM 하드웨어에서 Red Hat OpenShift Pipelines를 실행하는 지원은 기술 프리뷰 에 있습니다.
질문이나 의견이 있으시면 제품팀에 이메일(pipelines-interest@redhat.com)로 보내주시기 바랍니다.
3.1.2. 보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
3.1.3. Red Hat OpenShift Pipelines General Availability 1.10 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11 이상 버전에서 Red Hat OpenShift Pipelines General Availability (GA) 1.10을 사용할 수 있습니다.
3.1.3.1. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.10의 새로운 기능도 소개합니다.
3.1.3.1.1. 파이프라인
-
이번 업데이트를 통해
PipelineRun
또는TaskRun
Pod 템플릿에서 환경 변수를 지정하여 작업 또는 단계에 구성된 변수를 덮어쓰거나 추가할 수 있습니다. 또한 기본 Pod 템플릿에서 환경 변수를 지정하여 모든PipelineRuns
및TaskRuns
에 전역적으로 해당 변수를 사용할 수 있습니다. 이번 업데이트에서는 포드 템플릿에서 전파하면서 환경 변수를 필터링하기 위해forbidden-envs
라는 새 기본 구성도 추가되었습니다. 이번 업데이트를 통해 파이프라인의 사용자 지정 작업이 기본적으로 활성화됩니다.
참고이 업데이트를 비활성화하려면
feature-flags
구성 사용자 정의 리소스에서enable-custom-tasks
플래그를false
로 설정합니다.-
이번 업데이트에서는 사용자 지정 작업에
v1beta1.CustomRun
API 버전을 지원합니다. 이번 업데이트에서는
PipelineRun
조정기 지원을 추가하여 사용자 정의 실행을 생성합니다. 예를 들어PipelineRuns
에서 생성된 사용자 정의TaskRuns
는 이제 기본 값v1alpha1
이 아닌v1beta1.CustomRun
API 버전을v1alpha1.Run
대신 v1beta-version
기능 플래그가v1beta1
로 설정된 경우 사용할 수 있습니다.참고v1beta1.CustomRun
요청에 응답하기 위해*v1alpha1.Run
대신*v1beta1.CustomRun
API 버전을 수신 대기하도록 사용자 정의 작업 컨트롤러를 업데이트해야 합니다.-
이번 업데이트에서는
v1beta1.TaskRun
및v1.TaskRun
사양에 새재시도
필드가 추가되었습니다.
3.1.3.1.2. Trigger
-
이번 업데이트를 통해 트리거는
v1beta1
API 버전의CustomRun
오브젝트와 함께v1
API 버전의Pipeline
,Task
,PipelineRuns
및TaskRuns
오브젝트 생성을 지원합니다. 이번 업데이트를 통해 GitHub Interceptor는 소유자가 호출하거나 소유자가 구성 가능한 주석으로 호출하지 않는 한 가져오기 요청 트리거가 실행되지 않도록 차단합니다.
참고이 업데이트를 활성화하거나 비활성화하려면 GitHub Interceptor 구성 파일에서
githubOwners
매개변수 값을true
또는false
로 설정합니다.-
이번 업데이트를 통해 GitHub Interceptor는 push 및 pull request 이벤트에 대해 변경된 모든 파일의 쉼표로 구분된 목록을 추가할 수 있습니다. 변경된 파일 목록은 최상위 확장 필드의 이벤트 페이로드의
changed_files
속성에 추가됩니다. -
이번 업데이트에서는 TLS의
MinVersion
을tls.VersionTLS12
로 변경하여 FIPS(Federal Information Processing Standards) 모드가 활성화될 때 OpenShift Container Platform에서 트리거가 실행됩니다.
3.1.3.1.3. CLI
-
이번 업데이트에서는
Task
,ClusterTask
또는Pipeline
을 시작할 때 CSI(Container Storage Interface) 파일을 작업 공간으로 전달하는 지원이 추가되었습니다. -
이번 업데이트에서는 작업, 파이프라인, 파이프라인 실행 및 작업 실행 리소스와 관련된 모든 CLI 명령에
v1
API 지원이 추가되었습니다. Tekton CLI는 이러한 리소스에 대해v1beta1
및v1
API 모두에서 작동합니다. -
이번 업데이트에서는
start
및describe
명령에서 오브젝트 유형 매개변수에 대한 지원이 추가되었습니다.
3.1.3.1.4. Operator
-
이번 업데이트에서는 선택적 파이프라인 속성에
default-forbidden-env
매개변수를 추가합니다. 이 매개변수에는 Pod 템플릿을 통해 제공되는 경우 전파해서는 안 되는 금지된 환경 변수가 포함됩니다. -
이번 업데이트에서는 Tekton Hub UI에서 사용자 정의 로고에 대한 지원이 추가되었습니다. 사용자 지정 로고를 추가하려면
customLogo
매개변수 값을 Tekton Hub CR에서 base64로 인코딩된 로고 URI로 설정합니다. - 이번 업데이트에서는 git-clone 작업의 버전 번호가 0.9로 증가합니다.
3.1.3.1.5. Tekton Chains
-
이번 업데이트에서는
PipelineRun
및TaskRun
관찰에 주석 및 라벨이 추가되었습니다. -
이번 업데이트에서는
in-to-to
형식으로 요청할 때 생성된 것과 동일한 검증 기능을 생성하는slsa/v1
이라는 새 형식을 추가합니다. - 이번 업데이트를 통해 Sigstore 기능은 실험적 기능에서 벗어났습니다.
-
이번 업데이트를 통해
predicate.materials
기능에는TaskRun
오브젝트의 모든 단계 및 사이드카의 이미지 URI 및 다이제스트 정보가 포함됩니다.
3.1.3.1.6. Tekton Hub
-
이번 업데이트에서는 클러스터에서
v1
API 버전의 Tekton 리소스 설치, 업그레이드 또는 다운그레이드를 지원합니다. - 이번 업데이트에서는 UI에서 Tekton Hub 로고 대신 사용자 정의 로고 추가를 지원합니다.
-
이번 업데이트에서는 Artifact Hub에서 리소스를 가져와서 클러스터에 설치하는
--type artifact
플래그를 추가하여tkn hub install
명령 기능을 확장합니다. - 이번 업데이트에서는 지원 계층, 카탈로그 및 org 정보를 Artifact Hub에서 클러스터에 설치하는 리소스에 레이블로 추가합니다.
3.1.3.1.7. 코드로 파이프라인
-
이번 업데이트에서는 수신 웹 후크 지원이 향상되었습니다. OpenShift Container Platform 클러스터에 설치된 GitHub 애플리케이션의 경우 들어오는 Webhook에 대한
git_provider
사양을 제공할 필요가 없습니다. 대신 Code로 Pipeline은 시크릿을 감지하고 들어오는 Webhook에 사용합니다. - 이번 업데이트를 통해 동일한 토큰을 사용하여 기본값이 아닌 분기가 있는 GitHub의 동일한 호스트에서 원격 작업을 가져올 수 있습니다.
-
이번 업데이트를 통해 Code로 Pipeline은 Tekton
v1
템플릿을 지원합니다. TRI(Code)가 OPEN 생성을 위해 읽는v1
및v1beta1
템플릿이 있을 수 있습니다. ScanSetting은 클러스터에서v1
로 생성됩니다. -
이번 업데이트 이전에는 OpenShift 네임스페이스에 런타임 템플릿이 없는 경우 OpenShift 콘솔 UI에서 하드 코딩된 파이프라인 실행 템플릿을 폴백 템플릿으로 사용했습니다.
pipelines-as-code
구성 맵에서 이 업데이트에서는 콘솔에서 사용할pipelines-as-code-template-default
라는 새로운 기본 파이프라인 실행 템플릿을 제공합니다. - 이번 업데이트를 통해 Code로 Pipeline은 Tekton Pipelines 0.44.0 최소 상태를 지원합니다.
-
이번 업데이트를 통해 Code로 Pipeline은 Tekton
v1
API를 지원합니다. 즉 Code로서의 Pipelines는 Tekton v0.44 이상과 호환됩니다. - 이번 업데이트를 통해 k8s의 OpenShift 및 Tekton 대시보드 콘솔을 구성하는 것 외에도 사용자 정의 콘솔 대시보드를 구성할 수 있습니다.
-
이번 업데이트를 통해 Code로 Pipeline이
tkn pac create repo
명령을 사용하여 시작된 GitHub 애플리케이션의 설치를 감지하고 이를 전역에 설치한 경우 GitHub Webhook가 필요하지 않습니다. -
이번 업데이트 이전에는
PipelineRun
실행에 오류가 있고PipelineRun
에 연결된 작업에 오류가 있는 경우 Code에서 오류를 올바르게 보고하지 않았습니다. 이번 업데이트를 통해 파이프라인은PipelineRun
을 생성할 수 없는 경우 GitHub 검사에서 오류를 올바르게 보고합니다. -
이번 업데이트를 통해 Code로 Pipeline에는
PipelineRun
이 실행되는 현재 실행 중인 네임스페이스로 확장되는target_namespace
변수가 포함되어 있습니다. - 이번 업데이트를 통해 코드로 Pipeline을 사용하면 CLI 부트스트랩 GitHub 애플리케이션에서 GitHub 엔터프라이즈 질문을 바이패스할 수 있습니다.
- 이번 업데이트를 통해 Code로 Pipeline은 리포지토리 CR을 찾을 수 없는 경우 오류를 보고하지 않습니다.
- 이번 업데이트를 통해 동일한 이름으로 여러 파이프라인이 실행되는 경우 Code로 Pipeline에서 오류를 보고합니다.
3.1.3.2. 변경 사항 중단
-
이번 업데이트에서는 이전 버전의
tkn
명령이 Red Hat OpenShift Pipelines 1.10과 호환되지 않습니다. -
이번 업데이트에서는 Tekton CLI에서
Cluster
및CloudEvent
파이프라인 리소스를 지원하지 않습니다.tkn pipelineresource create
명령을 사용하여 파이프라인 리소스를 생성할 수 없습니다. 또한 작업, 클러스터 작업 또는 파이프라인의start
명령에서 파이프라인 리소스가 더 이상 지원되지 않습니다. -
이번 업데이트에서는 Tekton Chains에서
tekton
을 검증 형식으로 제거합니다.
3.1.3.3. 사용되지 않거나 삭제된 기능
-
Red Hat OpenShift Pipelines 1.10에서는
ClusterTask
명령이 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 업데이트에서는tkn task create
명령도 더 이상 사용되지 않습니다. -
Red Hat OpenShift Pipelines 1.10에서는
v1
API에서 파이프라인 리소스를 지원하지 않기 때문에tkn task start
명령과 함께 사용된 플래그-i
및-o
가 더 이상 사용되지 않습니다. -
Red Hat OpenShift Pipelines 1.10에서는
v1
API가 파이프라인 리소스를 지원하지 않기 때문에tkn pipeline start
명령과 함께 사용된-r
플래그가 더 이상 사용되지 않습니다. -
Red Hat OpenShift Pipelines 1.10 업데이트는
openshiftDefaultEmbeddedStatus
매개변수를전체
및최소
포함 상태로 설정합니다.기본 포함 상태를 변경하는 플래그도 더 이상 사용되지 않으며 제거됩니다. 또한 파이프라인 기본 포함 상태는 향후 릴리스에서
최소로
변경됩니다.
3.1.3.4. 확인된 문제
이번 업데이트에는 다음과 같은 이전 버전과 호환되지 않는 변경 사항이 포함됩니다.
-
PipelineResources
클러스터 제거 -
PipelineResources
클라우드 이벤트 제거
-
클러스터 업그레이드 후 파이프라인 메트릭 기능이 작동하지 않는 경우 해결 방법으로 다음 명령을 실행합니다.
$ oc get tektoninstallersets.operator.tekton.dev | awk '/pipeline-main-static/ {print $1}' | xargs oc delete tektoninstallersets
- 이번 업데이트를 통해 Crunchy PostgreSQL과 같은 외부 데이터베이스 사용은 IBM Power, IBM zSystems, IBM® LinuxONE에서 지원되지 않습니다. 대신 기본 Tekton Hub 데이터베이스를 사용합니다.
3.1.3.5. 해결된 문제
-
이번 업데이트 이전에는
opc pac
명령에서 도움말을 표시하는 대신 런타임 오류를 생성했습니다. 이번 업데이트에서는 도움말 메시지를 표시하도록opc pac
명령이 수정되었습니다. -
이번 업데이트 이전에는
tkn pac create repo
명령을 실행하려면 리포지토리를 생성하기 위한 Webhook 세부 정보가 필요했습니다. 이번 업데이트를 통해 GitHub 애플리케이션을 설치할 때tkn-pac create repo
명령으로 Webhook를 설정하지 않습니다. -
이번 업데이트 이전에는 Tekton Pipelines에서
PipelineRun
리소스 생성에 문제가 있을 때 Code로 파이프라인 실행 생성 오류가 보고되지 않았습니다. 예를 들어 파이프라인 실행에 존재하지 않는 작업은 상태가 표시되지 않습니다. 이번 업데이트를 통해 Code로 파이프라인에 누락된 작업과 함께 Tekton Pipelines에서 발생하는 적절한 오류 메시지가 표시됩니다. - 이번 업데이트에서는 인증에 성공한 후 UI 페이지 리디렉션이 수정되었습니다. 이제 Tekton Hub에 로그인하려고 했던 동일한 페이지로 리디렉션됩니다.
-
이번 업데이트에서는 클러스터 작업, 개별 작업 및 파이프라인의 경우 이러한 플래그
--all-namespaces
및--output=yaml
플래그를 사용하여list
명령을 수정합니다. -
이번 업데이트에서는
repo.spec.url
URL 끝에 슬래시를 제거하여 GitHub의 URL과 일치시킵니다. -
이번 업데이트 이전에는
marshalJSON
함수가 오브젝트 목록을 마샬링하지 않았습니다. 이번 업데이트를 통해marshalJSON
함수는 오브젝트 목록을 마샬링합니다. - 이번 업데이트를 통해 코드로 Pipeline을 사용하면 CLI 부트스트랩 GitHub 애플리케이션에서 GitHub 엔터프라이즈 질문을 바이패스할 수 있습니다.
- 이번 업데이트에서는 리포지토리에 사용자가 100개 이상인 경우 GitHub 협력자 검사가 수정되었습니다.
-
이번 업데이트를 통해 작업 또는 파이프라인에 대한
서명
및확인
명령이 kubernetes 구성 파일 없이 작동합니다. - 이번 업데이트를 통해 네임스페이스에서 pruner를 건너뛰는 경우 Tekton Operator에서 남은 정리기 cron 작업을 정리합니다.
-
이번 업데이트 이전에는 API
ConfigMap
오브젝트가 카탈로그 새로 고침 간격에 대해 사용자가 구성한 값으로 업데이트되지 않았습니다. 이번 업데이트에서는 Tekon Hub CR에서CATALOG_REFRESH_INTERVAL
API가 수정되었습니다. 이번 업데이트에서는 iPXEStatus 기능 플래그를 변경할 때
PipelineRunStatus
-
status.runs
및status.taskruns
매개변수는최소 iPXEStatus
를 사용하여nil
에 대한 매개변수입니다. -
status.childReferences
전체Status
를 사용하여nil
에 대한 매개변수
-
-
이번 업데이트에서는
ResolutionRequest
CRD에 변환 구성이 추가되었습니다. 이번 업데이트에서는v1alpha1.ResolutionRequest
요청에서v1beta1.ResolutionRequest
요청으로의 변환을 올바르게 구성합니다. - 이번 업데이트에서는 파이프라인 작업과 연결된 중복된 작업 공간을 확인합니다.
- 이번 업데이트에서는 코드에서 해결자 활성화의 기본값이 수정되었습니다.
-
이번 업데이트에서는 확인 프로그램을 사용하여
TaskRef
및PipelineRef
이름 변환이 수정되었습니다.
3.1.3.6. Red Hat OpenShift Pipelines General Availability 1.10.1 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11 이상 버전에서 Red Hat OpenShift Pipelines General Availability (GA) 1.10.1을 사용할 수 있습니다.
3.1.3.6.1. 코드로 Pipeline의 수정된 문제
-
이번 업데이트 이전에는 페이로드에서 제공하는 소스 분기 정보에
refs/heads/
가 포함되어 있지만 사용자가 구성된 대상 분기에 CEL 표현식의기본
분기만 포함된 경우 푸시 요청이 실패합니다. 이번 업데이트를 통해 Code로 파이프라인이 내보내기 요청을 전달하고 페이로드에 기본 분기 또는 대상 분기 중 하나가 있는 경우 파이프라인을 트리거합니다. -
이번 업데이트 이전에는
PipelineRun
오브젝트를 생성할 수 없는 경우 Tekton 컨트롤러에서 수신한 오류가 사용자에게 보고되지 않았습니다. 이번 업데이트를 통해 Code로 파이프라인에서 오류 메시지를 GitHub 인터페이스에 보고하여 사용자가 오류 문제를 해결할 수 있습니다. Code로 파이프라인은 파이프라인 실행 중에 발생한 오류도 보고합니다. - 이번 업데이트를 통해 인프라 문제로 인해 OpenShift Container Platform 클러스터에 시크릿을 생성하지 못하는 경우 Code로 파이프라인이 GitHub 검사 인터페이스에 보안을 설정하지 않습니다.
- 이번 업데이트에서는 Red Hat OpenShift Pipelines에서 더 이상 사용되지 않는 API를 제거합니다.
3.1.3.7. Red Hat OpenShift Pipelines General Availability 1.10.2 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11 이상 버전에서 Red Hat OpenShift Pipelines General Availability (GA) 1.10.2를 사용할 수 있습니다.
3.1.3.7.1. 해결된 문제
이번 업데이트 이전에는 Tekton Operator의 문제로 인해 사용자가 enable-api-fields
플래그의 값을 beta
로 설정하지 못했습니다. 이번 업데이트에서는 이 문제가 해결되었습니다. 이제 TektonConfig
CR에서 enable-api-fields
플래그 값을 beta
로 설정할 수 있습니다.
3.1.3.8. Red Hat OpenShift Pipelines General Availability 1.10.3 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11, 4.12 및 4.13에서 Red Hat OpenShift Pipelines General Availability (GA) 1.10.3을 사용할 수 있습니다.
3.1.3.8.1. 해결된 문제
이번 업데이트 이전에는 Tekton Operator에서 사용자 정의에 대한 성능 구성 필드를 노출하지 않았습니다. 이번 업데이트를 통해 클러스터 관리자는 요구 사항에 따라 TektonConfig
CR에서 다음 성능 구성 필드를 사용자 지정할 수 있습니다.
-
disable-ha
-
버킷
-
kube-api-qps
-
kube-api-burst
-
threads-per-controller
3.1.4. Red Hat OpenShift Pipelines General Availability 1.9 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11 이상 버전에서 Red Hat OpenShift Pipelines General Availability (GA) 1.9를 사용할 수 있습니다.
3.1.4.1. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.9의 새로운 기능도 소개합니다.
3.1.4.1.1. 파이프라인
- 이번 업데이트를 통해 파이프라인 매개변수를 지정하고 배열 및 오브젝트 사전 양식을 생성할 수 있습니다.
- 이번 업데이트에서는 작업 공간에 대한 CSI(Container Storage Interface) 및 예상 볼륨을 지원합니다.
-
이번 업데이트를 통해 파이프라인 단계를 정의할 때
stdoutConfig
및stderrConfig
매개변수를 지정할 수 있습니다. 이러한 매개변수를 정의하면 단계와 관련된 표준 출력 및 표준 오류를 로컬 파일에 캡처하는 데 도움이 됩니다. -
이번 업데이트를 통해
steps[].onError
이벤트 처리기에 변수를 추가할 수 있습니다(예:$(params.CONTINUE)
). -
이번 업데이트를 통해
PipelineResults
정의의finally
작업의 출력을 사용할 수 있습니다. 예를 들어$(finally.<pipelinetask-name>.result.<result-name>)
. 여기서 <pipelinetask-name
>은 파이프라인 작업 이름을 나타내며 <result-name
>은 결과 이름을 나타냅니다. - 이번 업데이트에서는 작업 실행에 대한 작업 수준 리소스 요구 사항을 지원합니다.
- 이번 업데이트를 통해 파이프라인과 정의된 작업 간에 이름을 기반으로 공유되는 매개변수를 다시 생성할 필요가 없습니다. 이 업데이트는 개발자 프리뷰 기능의 일부입니다.
- 이번 업데이트에서는 기본 제공 git, cluster, bundle, hub resolvers와 같은 원격 해결에 대한 지원이 추가되었습니다.
3.1.4.1.2. Trigger
-
이번 업데이트에서는
Interceptor
CRD를 추가하여NamespacedInterceptor
를 정의합니다. 트리거 또는EventListener
사양에서 interceptors 참조의kind
섹션에서NamespacedInterceptor
를 사용할 수 있습니다. -
이번 업데이트에서는
CloudEvents
를 활성화합니다. - 이번 업데이트를 통해 트리거를 정의할 때 Webhook 포트 번호를 구성할 수 있습니다.
-
이번 업데이트에서는 trigger
eventID
를TriggerBinding
에 대한 입력으로 사용할 수 있습니다. 이번 업데이트에서는
ClusterInterceptor
서버의 인증서 검증 및 교체를 지원합니다.-
트리거는 코어 인터셉터에 대한 인증서 검증을 수행하고 인증서가 만료되면 새 인증서를
ClusterInterceptor
로 바꿉니다.
-
트리거는 코어 인터셉터에 대한 인증서 검증을 수행하고 인증서가 만료되면 새 인증서를
3.1.4.1.3. CLI
-
이번 업데이트에서는
describe
명령에 주석을 표시하는 기능을 지원합니다. -
이번 업데이트에서는
pr describe
명령에 파이프라인, 작업 및 시간 초과를 표시할 수 있습니다. -
이번 업데이트에서는
pipeline start
명령에서 파이프라인, 작업 및 타임아웃을 제공하는 플래그가 추가되었습니다. -
이번 업데이트에서는 작업 및 파이프라인의
describe
명령에 작업 공간(선택 사항 또는 필수)을 표시할 수 있습니다. -
이번 업데이트에서는
타임 스탬프
와 함께 로그를 표시하는 타임 스탬프 플래그가 추가되었습니다. -
이번 업데이트에서는
PipelineRun
과 연결된TaskRun
삭제를 무시하는 새로운 플래그--ignore-running-pipelinerun
이 추가되었습니다. -
이번 업데이트에서는 실험적 명령에 대한 지원이 추가되었습니다. 이번 업데이트에서는
tkn
CLI 툴에 실험 하위 명령,서명
및검증
도 추가되었습니다. - 이번 업데이트에서는 파일을 생성하지 않고 Z 쉘(Zsh) 완료 기능을 사용할 수 있습니다.
이번 업데이트에서는
opc
라는 새로운 CLI 툴이 도입되었습니다. 향후 릴리스에서tkn
CLI 툴을opc
로 교체할 것으로 예상됩니다.중요-
새로운 CLI 툴
opc
는 기술 프리뷰 기능입니다. -
OPC
는tkn
에 적합하지 않은 추가 Red Hat OpenShift Pipelines 특정 기능이 포함된tkn
을 대체합니다.
-
새로운 CLI 툴
3.1.4.1.4. Operator
이번 업데이트를 통해 Pipeline as Code가 기본적으로 설치됩니다.
-p
플래그를 사용하여 Pipeline을 코드로 비활성화할 수 있습니다.$ oc patch tektonconfig config --type="merge" -p '{"spec": {"platforms": {"openshift":{"pipelinesAsCode": {"enable": false}}}}}'
-
이번 업데이트를 통해
TektonConfig
CRD에서 Pipeline을 코드 구성으로 수정할 수도 있습니다. - 이번 업데이트를 통해 개발자 화면을 비활성화하면 Operator에서 개발자 콘솔 관련 사용자 정의 리소스를 설치하지 않습니다.
-
이번 업데이트에는 Bitbucket Server 및 Bitbucket Cloud에 대한
ClusterTriggerBinding
지원이 포함되며 전체 클러스터에서TriggerBinding
을 재사용할 수 있습니다.
3.1.4.1.5. 해결 방법
해결자는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
이번 업데이트를 통해
TektonConfig
CRD에서 파이프라인 확인자를 구성할 수 있습니다. 이러한 pipeline resolvers:enable-bundles-resolver
,enable-cluster-resolver
,enable-git-resolver
,enable-hub-resolver
.apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: pipeline: enable-bundles-resolver: true enable-cluster-resolver: true enable-git-resolver: true enable-hub-resolver: true ...
TektonConfig
에서 확인자 특정 구성을 제공할 수도 있습니다. 예를 들어map[string]string
형식으로 다음 필드를 정의하여 개별 확인자에 대한 구성을 설정할 수 있습니다.apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: pipeline: bundles-resolver-config: default-service-account: pipelines cluster-resolver-config: default-namespace: test git-resolver-config: server-url: localhost.com hub-resolver-config: default-tekton-hub-catalog: tekton ...
3.1.4.1.6. Tekton Chains
Tekton Chains는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
-
이번 업데이트 이전에는 내부 에이전트에서
TaskRun
의 출력으로 OCI(Open Container Initiative) 이미지만 지원되었습니다. 이번 업데이트에서는 이러한 접미사,ARTIFACT_URI
및ARTIFACT_DIGEST
가 있는 출력으로 in-to provenance 메타데이터를 추가합니다. -
이번 업데이트 이전에는
TaskRun
attestations만 지원됩니다. 이번 업데이트에서는PipelineRun
인증도 지원합니다. -
이번 업데이트에서는 pod 템플릿에서
imgPullSecret
매개변수를 가져오기 위해 Tekton Chains에 대한 지원이 추가되었습니다. 이번 업데이트를 통해 서비스 계정을 수정하지 않고 각 파이프라인 실행 또는 작업 실행에 따라 리포지토리 인증을 구성할 수 있습니다.
3.1.4.1.7. Tekton Hub
Tekton Hub는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
이번 업데이트를 통해 관리자는 기본 Tekton Hub 데이터베이스를 사용하는 대신 Crunchy PostgreSQL with Tekton Hub와 같은 외부 데이터베이스를 사용할 수 있습니다. 이번 업데이트를 통해 다음 작업을 수행할 수 있습니다.
- Tekton Hub에서 사용할 외부 데이터베이스의 좌표 지정
- Operator에서 배포한 기본 Tekton Hub 데이터베이스 비활성화
이번 업데이트에서는 외부 Git 리포지토리에서
config.yaml
의 종속성을 제거하고 전체 구성 데이터를 APIConfigMap
으로 이동합니다. 이번 업데이트를 통해 관리자는 다음 작업을 수행할 수 있습니다.- Tekton Hub 사용자 정의 리소스에 카테고리, 카탈로그, 범위 및 defaultScope와 같은 구성 데이터를 추가합니다.
- 클러스터에서 Tekton Hub 구성 데이터를 수정합니다. 모든 수정 사항은 Operator 업그레이드 시 유지됩니다.
- Tekton Hub의 카탈로그 목록을 업데이트
Tekton Hub의 카테고리 변경
참고구성 데이터를 추가하지 않으면 Tekton Hub 구성의 API
ConfigMap
에서 기본 데이터를 사용할 수 있습니다.
3.1.4.1.8. 코드로 파이프라인
-
이번 업데이트에서는
Repository
CRD에 동시성 제한에 대한 지원을 추가하여 한 번에 리포지토리에 대해 실행 중인 최대PipelineRun
수를 정의합니다. 가져오기 요청 또는 내보내기 이벤트의 PipelineRun
이 알파벳순으로 큐에 추가됩니다. -
이번 업데이트에서는 리포지토리에 대한 최신 파이프라인 실행 로그를 표시하는 새 명령
tkn pac logs
가 추가되었습니다. 이번 업데이트에서는 GitHub 및 GitLab에 대한 푸시 및 가져오기 요청을 위해 파일 경로에서 고급 이벤트 일치를 지원합니다. 예를 들어, CEL(Common Expression Language)을 사용하여
docs
디렉터리의 모든 마크다운 파일에 대한 경로가 변경된 경우에만 파이프라인을 실행할 수 있습니다.... annotations: pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && "docs/*.md".pathChanged()
-
이번 업데이트를 통해 주석을 사용하여
pipelineRef:
오브젝트의 원격 파이프라인을 참조할 수 있습니다. -
이번 업데이트를 통해 Pipeline을 사용하여 새 GitHub 리포지토리를 Code로 자동 구성하여 네임스페이스를 설정하고 GitHub 리포지토리에 대한
Repository
CRD를 생성할 수 있습니다. -
이번 업데이트를 통해 Pipeline이 공급자 정보를 사용하여
PipelineRuns
에 대한 지표를 생성합니다. 이번 업데이트에서는
tkn-pac
플러그인에 다음과 같은 향상된 기능을 제공합니다.- 실행 중인 파이프라인을 올바르게 탐지
- 실패 완료 시간이 없는 경우 기간을 표시하는 수정
-
오류 스니펫을 표시하고
tkn-pac describe
명령에서 오류 정규식 패턴을 강조 표시합니다. -
tkn-pac ls
및tkn-pac describe
명령에use-real-time
스위치 추가 -
tkn-pac
로그 문서 가져오기 -
tkn-pac ls
및tkn-pac describe
명령에서pipelineruntimeout
을 실패로 표시합니다. -
--target-pipelinerun
옵션을 사용하여 특정 파이프라인 실행 실패를 표시합니다.
- 이번 업데이트를 통해 GitHub 검사의 버전 제어 시스템(VCS) 주석 또는 작은 스니펫으로 파이프라인 실행 오류를 볼 수 있습니다.
- 이번 업데이트를 통해 Pipeline as Code는 선택적으로 간단한 형식인 경우 작업 내에서 오류를 감지하고 GitHub에서 해당 작업을 주석으로 추가할 수 있습니다. 이 업데이트는 개발자 프리뷰 기능의 일부입니다.
이번 업데이트에서는 다음과 같은 새 명령이 추가되었습니다.
-
tkn-pac webhook add
: 리포지토리 설정에 Webhook를 추가하고 리포지토리를 업데이트하지 않고 기존k8s Secret
오브젝트에서webhook.secret
키를 업데이트합니다. -
tkn-pac webhook update-token
: 리포지토리를 업데이트하지 않고 기존k8s Secret
오브젝트에 대한 업데이트 공급자 토큰입니다.
-
-
이번 업데이트에서는 리포지토리 생성과 함께 GitHub, GitLab, BitbucketCloud에 대한 Webhook를 생성하고 구성하는
tkn-pac create repo
명령의 기능을 개선합니다. -
이번 업데이트를 통해
tkn-pac describe
명령은 최신 50개의 이벤트를 정렬된 순서로 표시합니다. -
이번 업데이트에서는
tkn-pac logs
명령에--last
옵션이 추가되었습니다. -
이번 업데이트를 통해
tkn-pac resolve
명령으로 파일 템플릿에서git_auth_secret
을 감지할 때 토큰을 입력하라는 메시지가 표시됩니다. - 이번 업데이트를 통해 Pipelines as Code hides secret from log snippets to avoid exposing secret in the GitHub interface.
-
이번 업데이트를 통해
git_auth_secret
에 대해 자동으로 생성된 보안은PipelineRun
이 있는 소유자 참조입니다. 파이프라인 실행 실행 후가 아닌PipelineRun
을 사용하여 보안을 정리합니다. -
이번 업데이트에서는
/cancel
주석을 사용하여 파이프라인 실행을 취소하는 지원이 추가되었습니다. 이번 업데이트 이전에는 GitHub 앱 토큰 범위 지정이 정의되지 않았으며 모든 리포지토리 설치에서 토큰이 사용됩니다. 이번 업데이트를 통해 다음 매개변수를 사용하여 GitHub 앱 토큰의 범위를 대상 리포지토리로 지정할 수 있습니다.
-
secret-github-app-token-scoped
: 앱 설치에 액세스할 수 있는 모든 리포지토리가 아닌 대상 리포지토리에 앱 토큰을 범위를 지정합니다. -
secret-github-app-scope-extra-repos
: 추가 소유자 또는 리포지터리로 앱 토큰의 범위를 사용자 지정합니다.
-
- 이번 업데이트를 통해 GitLab에서 호스팅되는 자체 Git 리포지토리가 있는 코드로 Pipeline을 사용할 수 있습니다.
- 이번 업데이트를 통해 네임스페이스의 kubernetes 이벤트 형식으로 파이프라인 실행 세부 정보에 액세스할 수 있습니다. 이러한 세부 정보를 사용하면 관리자 네임스페이스에 액세스할 필요 없이 파이프라인 오류 문제를 해결할 수 있습니다.
- 이번 업데이트에서는 Git 공급자를 사용하여 Pipeline에서 Code resolver로 URL 인증을 지원합니다.
-
이번 업데이트를 통해
pipelines-as-code
구성 맵의 설정을 사용하여 hub 카탈로그의 이름을 설정할 수 있습니다. -
이번 업데이트를 통해
max-keep-run
매개변수의 최대 및 기본 제한을 설정할 수 있습니다. - 이번 업데이트에서는 Pipeline에 사용자 정의 SSL(Secure Sockets Layer) 인증서를 삽입하는 방법에 대한 문서가 추가되어 사용자 정의 인증서로 공급자 인스턴스에 연결할 수 있습니다.
-
이번 업데이트를 통해
PipelineRun
리소스 정의에는 주석으로 포함된 로그 URL이 있습니다. 예를 들어tkn-pac describe
명령은PipelineRun
을 설명할 때 로그 링크를 표시합니다. -
이번 업데이트를 통해
tkn-pac
logs에는PipelineRun
이름이 아니라 리포지토리 이름이 표시됩니다.
3.1.4.2. 변경 사항 중단
-
이번 업데이트를 통해
Conditions
CRD(사용자 정의 리소스 정의) 유형이 제거되었습니다. 대신WhenExpressions
를 사용하십시오. -
이번 업데이트를 통해 Pipeline, PipelineRun, Task, Clustertask 및 TaskRun과 같은
tekton.dev/v1alpha1
API 파이프라인 리소스가 제거되었습니다. -
이번 업데이트를 통해
tkn-pac setup
명령이 제거되었습니다. 대신tkn-pac webhook add
명령을 사용하여 기존 Git 리포지토리에 웹 후크를 다시 추가합니다. 또한tkn-pac webhook update-token
명령을 사용하여 Git 리포지토리의 기존 Secret 오브젝트에 대한 개인 공급자 액세스 토큰을 업데이트합니다. -
이번 업데이트를 통해 기본 설정으로 파이프라인을 실행하는 네임스페이스는
pod-security.kubernetes.io/enforce: privileged
라벨을 워크로드에 적용하지 않습니다.
3.1.4.3. 사용되지 않거나 삭제된 기능
-
Red Hat OpenShift Pipelines 1.9.0 릴리스에서
ClusterTasks
는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 또는Cluster Resolver
를 사용할 수 있습니다. -
Red Hat OpenShift Pipelines 1.9.0 릴리스에서는 단일
EventListener
사양의트리거
사용 및namespaceSelector
필드가 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 다른EventListener
사양에서 이러한 필드를 성공적으로 사용할 수 있습니다. -
Red Hat OpenShift Pipelines 1.9.0 릴리스에서
tkn pipelinerun describe
명령은PipelineRun
리소스에 대한 타임아웃을 표시하지 않습니다. -
Red Hat OpenShift Pipelines 1.9.0 릴리스에서는 PipelineResource' CR(사용자 정의 리소스)이 더 이상 사용되지 않습니다.
PipelineResource
CR은 기술 프리뷰 기능이며tekton.dev/v1alpha1
API의 일부입니다. - Red Hat OpenShift Pipelines 1.9.0 릴리스에서는 클러스터 작업의 사용자 정의 이미지 매개변수가 더 이상 사용되지 않습니다. 또는 클러스터 작업을 복사하고 사용자 정의 이미지를 사용할 수 있습니다.
3.1.4.4. 확인된 문제
-
chain-secret
및chain-config
구성 맵은 Red Hat OpenShift Pipelines Operator를 제거한 후 제거됩니다. 여기에는 사용자 데이터가 포함되어 있으므로 보존해야 하며 삭제되지 않습니다.
Windows에서
tkn pac
set of commands를 실행할 때 다음 오류 메시지가 표시될 수 있습니다. 명령이Windows에서 지원되지 않는 오류 메시지가 표시될 수 있습니다.
해결방법:
NO_COLOR
환경 변수를true
로 설정합니다.tkn pac resolve -f <filename> | oc create -f
명령을 실행하면tkn pac resolve
명령에서 templated 매개변수 값을 함수에 사용하는 경우 예상 결과를 제공하지 않을 수 있습니다.해결방법: 이 문제를 완화하려면
tkn pac resolve
-f <filename> -o tempfile.yaml 명령을 실행하여 임시 파일에 tkn pac resolve
의 출력을 저장한 다음oc create -f tempfile.yaml
명령을 실행합니다. 예를 들어tkn pac resolve -f <filename> -o /tmp/pull-request-resolved.yaml && oc create -f /tmp/pull-request-resolved.yaml
.
3.1.4.5. 해결된 문제
- 이번 업데이트 이전에는 빈 배열을 교체한 후 원래 배열에서 paramaters 내부의 매개 변수가 유효하지 않은 빈 문자열을 반환했습니다. 이번 업데이트를 통해 이 문제가 해결되고 원래 배열이 빈 상태로 돌아갑니다.
- 이번 업데이트 이전에는 파이프라인 실행을 위해 서비스 계정에 중복된 보안이 있는 경우 이로 인해 작업 Pod 생성이 실패했습니다. 이번 업데이트를 통해 이 문제가 해결되고 서비스 계정에 중복된 보안이 있더라도 작업 Pod가 성공적으로 생성됩니다.
-
이번 업데이트 이전에는 TaskRun의
spec.StatusMessage
필드를 확인하여 사용자가TaskRun
을 취소했는지 아니면 그 일부PipelineRun
에 의해 취소되었는지 여부를 구분할 수 없었습니다. 이번 업데이트를 통해 이 문제가 해결되어 사용자는TaskRun
의spec.StatusMessage
필드를 확인하여 TaskRun의 상태를 구분할 수 있습니다. - 이번 업데이트 이전에는 이전 버전의 유효하지 않은 오브젝트를 삭제할 때 Webhook 검증이 제거되었습니다. 이번 업데이트를 통해 이 문제가 해결되었습니다.
이번 업데이트 이전에는
timeouts.pipeline
매개변수를0
으로 설정하면timeouts.tasks
매개변수 또는timeouts.finally
매개변수를 설정할 수 없었습니다. 이번 업데이트에서는 이러한 문제가 해결되었습니다. 이제timeouts.pipeline
매개변수 값을 설정하면'timeouts.tasks' 매개변수 또는timeouts.finally
매개변수 값을 설정할 수 있습니다. 예를 들면 다음과 같습니다.yaml kind: PipelineRun spec: timeouts: pipeline: "0" # No timeout tasks: "0h3m0s"
- 이번 업데이트 이전에는 PipelineRun 또는 TaskRun에서 다른 툴에서 레이블 또는 주석을 업데이트한 경우 경쟁 조건이 발생할 수 있었습니다. 이번 업데이트를 통해 이 문제가 해결되어 라벨 또는 주석을 병합할 수 있습니다.
- 이번 업데이트 이전에는 로그 키에 파이프라인 컨트롤러와 동일한 키가 없었습니다. 이번 업데이트를 통해 이 문제가 해결되었으며 파이프라인 컨트롤러의 로그 스트림과 일치하도록 로그 키가 업데이트되었습니다. 로그의 키가 "ts"에서 "timestamp", "level"에서 "severity"로 변경되었으며, "message"에서 "msg"로 변경되었습니다.
- 이번 업데이트 이전에는 PipelineRun이 알 수 없는 상태로 삭제된 경우 오류 메시지가 생성되지 않았습니다. 이번 업데이트를 통해 이 문제가 해결되어 오류 메시지가 생성됩니다.
-
이번 업데이트 이전에는
list
및push
와 같은 번들 명령에 액세스하려면kubeconfig
파일을 사용해야 했습니다. 이번 업데이트를 통해 이 문제가 해결되어kubeconfig
파일이 번들 명령에 액세스할 필요가 없습니다. - 이번 업데이트 이전에는 TaskRuns를 삭제하는 동안 상위 PipelineRun이 실행 중이면 TaskRuns가 삭제됩니다. 이번 업데이트에서는 이 문제가 해결되어 상위 PipelineRun이 실행 중인 경우 TaskRuns가 삭제되지 않습니다.
- 이번 업데이트 이전에는 사용자가 허용된 파이프라인 컨트롤러보다 더 많은 오브젝트가 있는 번들을 빌드하려고 하면 Tekton CLI에 오류 메시지가 표시되지 않았습니다. 이번 업데이트를 통해 이 문제가 해결되고 Tekton CLI에 사용자가 파이프라인 컨트롤러에 허용된 제한보다 더 많은 오브젝트가 있는 번들을 빌드하려고 하면 오류 메시지가 표시됩니다.
-
이번 업데이트 이전에는 클러스터에서 네임스페이스가 제거된 경우 Operator에서
ClusterInterceptor ClusterRoleBinding
제목에서 네임스페이스를 제거하지 않았습니다. 이번 업데이트를 통해 이 문제가 해결되었으며 Operator는ClusterInterceptor ClusterRoleBinding
제목에서 네임스페이스를 제거합니다. -
이번 업데이트 이전에는 Red Hat OpenShift Pipelines Operator의 기본 설치로 인해 클러스터에 남아 있는
pipelines-scc-rolebinding security context constraint
(SCC) 역할 바인딩 리소스가 생성되었습니다. 이번 업데이트를 통해 Red Hat OpenShift Pipelines Operator의 기본 설치로pipelines-scc-rolebinding security context constraint
(SCC) 역할 바인딩 리소스 리소스가 클러스터에서 제거됩니다.
-
이번 업데이트 이전에는 Code로 Pipeline이 Code
ConfigMap
오브젝트로 Pipeline을 업데이트하지 않았습니다. 이번 업데이트를 통해 이 문제가 수정되었으며 CodeConfigMap
오브젝트로서 Pipeline에서 새로운 변경 사항을 찾습니다. -
이번 업데이트 이전에는 Code 컨트롤러로서 Pipeline이
tekton.dev/pipeline
레이블이 업데이트될 때까지 기다리지 않고checkrun id
레이블을 추가하여 경쟁 조건이 발생했습니다. 이번 업데이트를 통해 Pipelines as Code 컨트롤러에서tekton.dev/pipeline
레이블이 업데이트될 때까지 기다린 다음, 경쟁 조건을 방지하는 데 도움이 되는checkrun id
레이블을 추가합니다. -
이번 업데이트 이전에는
tkn-pac create repo
명령이 git 리포지토리에 이미 존재하는 경우PipelineRun
을 재정의하지 않았습니다. 이번 업데이트를 통해tkn-pac create
명령이 git 리포지토리에 있는 경우PipelineRun
을 재정의하도록 수정되어 문제가 성공적으로 해결됩니다. -
이번 업데이트 이전에는
tkn pac describe
명령이 모든 메시지에 대한 이유를 표시하지 않았습니다. 이번 업데이트에서는 이 문제가 해결되어tkn pac describe
명령을 실행하면 모든 메시지에 대한 이유가 표시됩니다. -
이번 업데이트 이전에는 주석의 사용자가 regex 양식을 사용하여 값을 제공한 경우(예:
refs/head/rel-*
) 가져오기 요청이 실패했습니다. 기본 분기에refs/heads
가 누락되어 가져오기 요청이 실패했습니다. 이번 업데이트를 통해 접두사가 추가되고 일치하는지 확인합니다. 이렇게 하면 문제가 해결되고 가져오기 요청이 성공적으로 수행됩니다.
3.1.4.6. Red Hat OpenShift Pipelines General Availability 1.9.1 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11 이상에서 Red Hat OpenShift Pipelines General Availability (GA) 1.9.1을 사용할 수 있습니다.
3.1.4.7. 해결된 문제
-
이번 업데이트 이전에는
tkn pac repo list
명령이 Microsoft Windows에서 실행되지 않았습니다. 이번 업데이트에서는 이 문제가 해결되어 이제 Microsoft Windows에서tkn pac repo list
명령을 실행할 수 있습니다. - 이번 업데이트 이전에는 Code watcher로 Pipeline이 모든 구성 변경 이벤트를 수신하지 못했습니다. 이번 업데이트를 통해 Code watcher가 업데이트될 때 Pipeline이 업데이트되고 이제 Code watcher가 구성 변경 이벤트를 누락하지 않습니다.
-
이번 업데이트 이전에는
TaskRuns
또는PipelineRuns
와 같이 Pipeline에서 생성한 Pod가 클러스터의 사용자가 노출한 사용자 정의 인증서에 액세스할 수 없었습니다. 이번 업데이트에서는 문제가 해결되어 클러스터의TaskRuns
또는PipelineRuns
Pod에서 사용자 정의 인증서에 액세스할 수 있습니다. -
이번 업데이트 이전에는 FIPS를 사용하여 활성화된 클러스터에서
Trigger
리소스에 사용된tekton-triggers-core-interceptors
코어 인터셉터가 Pipelines Operator가 버전 1.9로 업그레이드된 후 작동하지 않았습니다. 이번 업데이트에서는 이러한 문제가 해결되었습니다. 이제 OpenShift는 모든 구성 요소에 MInTLS 1.2를 사용합니다. 결과적으로tekton-triggers-core-interceptors
코어 인터셉터가 TLS 버전 1.2로 업데이트되고 해당 기능이 정확하게 실행됩니다. 이번 업데이트 이전에는 내부 OpenShift 이미지 레지스트리와 함께 파이프라인 실행을 사용할 때 파이프라인 실행 정의에서 이미지의 URL을 하드 코딩해야 했습니다. 예를 들면 다음과 같습니다.
... - name: IMAGE_NAME value: 'image-registry.openshift-image-registry.svc:5000/<test_namespace>/<test_pipelinerun>' ...
파이프라인의 컨텍스트에서 Code로 파이프라인 실행을 사용하는 경우 이러한 하드 코딩된 값을 사용하면 파이프라인 실행 정의가 다른 클러스터 및 네임스페이스에서 사용되지 않습니다.
이번 업데이트를 통해 네임스페이스 및 파이프라인 실행 이름을 하드 코딩하여 파이프라인 실행 정의를 일반화하는 대신 동적 템플릿 변수를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
... - name: IMAGE_NAME value: 'image-registry.openshift-image-registry.svc:5000/{{ target_namespace }}/$(context.pipelineRun.name)' ...
- 이번 업데이트 이전에는 Code로 동일한 GitHub 토큰을 사용하여 기본 GitHub 분기에서만 동일한 호스트에서 사용 가능한 원격 작업을 가져옵니다. 이번 업데이트에서는 이러한 문제가 해결되었습니다. 이제 Code로 Pipeline은 동일한 GitHub 토큰을 사용하여 GitHub 분기에서 원격 작업을 가져옵니다.
3.1.4.8. 확인된 문제
Tekton Hub CR에 사용된 Hub API
ConfigMap
오브젝트의 필드인CATALOG_REFRESH_INTERVAL
값은 사용자가 제공하는 사용자 지정 값으로 업데이트되지 않습니다.해결방법: 없음. SRVKP-2854 문제를 추적할 수 있습니다.
3.1.4.9. 변경 사항 중단
- 이번 업데이트를 통해 OLM 잘못된 구성 문제가 도입되어 OpenShift Container Platform 업그레이드가 수행되지 않습니다. 이 문제는 향후 릴리스에서 해결될 예정입니다.
3.1.4.10. Red Hat OpenShift Pipelines General Availability 1.9.2 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.11 이상에서 Red Hat OpenShift Pipelines General Availability (GA) 1.9.2를 사용할 수 있습니다.
3.1.4.11. 해결된 문제
- 이번 업데이트 이전에는 이전 버전의 릴리스에서 OLM의 잘못된 구성 문제가 도입되어 OpenShift Container Platform이 업그레이드할 수 없었습니다. 이번 업데이트를 통해 이 잘못된 구성 문제가 수정되었습니다.
3.1.5. Red Hat OpenShift Pipelines General Availability 1.8 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.10, 4.11, 4.12에서 Red Hat OpenShift Pipelines General Availability (GA) 1.8을 사용할 수 있습니다.
3.1.5.1. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.8의 새로운 기능도 소개합니다.
3.1.5.1.1. 파이프라인
-
이번 업데이트를 통해 ARM 하드웨어에서 실행 중인 OpenShift Container Platform 클러스터에서 Red Hat OpenShift Pipelines GA 1.8 이상을 실행할 수 있습니다. 여기에는
ClusterTask
리소스 및tkn
CLI 툴에 대한 지원이 포함됩니다.
ARM 하드웨어에서 Red Hat OpenShift Pipelines를 실행하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
-
이번 업데이트에서는
TaskRun
리소스에 대한Step
및Sidecar
재정의를 구현합니다. 이번 업데이트에서는
PipelineRun
상태에 최소TaskRun
및Run
상태가 추가되었습니다.이 기능을 활성화하려면
TektonConfig
사용자 지정 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정해야 합니다.이번 업데이트를 통해 파이프라인 실행 기능의 정상 종료가 알파 기능에서 안정적인 기능으로 승격됩니다. 결과적으로 이전에 더 이상 사용되지 않는
PipelineRunCancelled
상태는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.이 기능은 기본적으로 사용 가능하므로 더 이상
TektonConfig
사용자 정의 리소스 정의에서pipeline.enable-api-fields
필드를alpha
로 설정할 필요가 없습니다.이번 업데이트를 통해 작업 공간 이름을 사용하여 파이프라인 작업의 작업 공간을 지정할 수 있습니다. 이러한 변경으로 인해 일련의
Pipeline
및PipelineTask
리소스에 대한 공유 작업 공간을 더 쉽게 지정할 수 있습니다. 작업 공간을 명시적으로 매핑할 수도 있습니다.이 기능을 활성화하려면
TektonConfig
사용자 지정 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정해야 합니다.- 이번 업데이트를 통해 임베디드 사양의 매개 변수가 변경없이 전파됩니다.
-
이번 업데이트를 통해 주석 및 라벨을 사용하여
PipelineRun
리소스에서 참조하는Task
리소스의 필수 메타데이터를 지정할 수 있습니다. 이렇게 하면 실행 컨텍스트에 따라 달라지는Task
메타데이터를 파이프라인 실행 중에 사용할 수 있습니다. -
이번 업데이트에서는
params
및results
값에 개체 또는 사전 유형에 대한 지원이 추가되었습니다. 이러한 변경 사항은 이전 버전과의 호환성에 영향을 미치며, 이후 Red Hat OpenShift Pipelines 버전에서 이전 클라이언트 사용과 같은 정방향 호환성을 중단하는 경우가 있습니다. 이번 업데이트에서는 Go 언어 API를 라이브러리로 사용하는 프로젝트에 영향을 주는ArrayOrStruct
구조를 변경합니다. -
이번 업데이트에서는
PipelineRun
status 필드의SkippedTasks
필드에SkippingReason
값이 추가되어 사용자가 지정된 PipelineTask를 건너뛰는 이유를 알 수 있습니다. 이번 업데이트에서는
Task
오브젝트에서 결과를 내보내는 데배열
유형을 사용할 수 있는 알파 기능을 지원합니다. 결과 형식이문자열에서
ArrayOrString
으로 변경되었습니다. 예를 들어, 작업은 유형을 지정하여 배열 결과를 생성할 수 있습니다.kind: Task apiVersion: tekton.dev/v1beta1 metadata: name: write-array annotations: description: | A simple task that writes array spec: results: - name: array-results type: array description: The array results ...
또한 작업 스크립트를 실행하여 결과를 배열로 채울 수 있습니다.
$ echo -n "[\"hello\",\"world\"]" | tee $(results.array-results.path)
이 기능을 활성화하려면
TektonConfig
사용자 지정 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정해야 합니다.이 기능은 진행 중이며 TEP-0076의 일부입니다.
3.1.5.1.2. Trigger
이번 업데이트에서는
EventListener
사양의TriggerGroups
필드를 알파 기능의 안정적인 기능으로 전환합니다. 이 필드를 사용하면 트리거 그룹을 선택하고 실행하기 전에 인터셉터 세트를 지정할 수 있습니다.이 기능은 기본적으로 사용 가능하므로 더 이상
TektonConfig
사용자 정의 리소스 정의에서pipeline.enable-api-fields
필드를alpha
로 설정할 필요가 없습니다.-
이번 업데이트를 통해
Trigger
리소스는 HTTPS를 사용하여ClusterInterceptor
서버를 실행하여 엔드 투 엔드 보안 연결을 지원합니다.
3.1.5.1.3. CLI
-
이번 업데이트를 통해
tkn taskrun export
명령을 사용하여 클러스터에서 라이브 작업 실행을 다른 클러스터로 가져올 수 있는 YAML 파일로 내보낼 수 있습니다. -
이번 업데이트를 통해
tkn pipeline start
명령에-o name
플래그를 추가하여 시작 직후 파이프라인 실행 이름을 출력할 수 있습니다. -
이번 업데이트에서는
tkn --help
명령의 출력에 사용 가능한 플러그인 목록이 추가되었습니다. -
이번 업데이트를 통해 파이프라인 실행 또는 작업 실행을 삭제하는 동안
--keep
및--keep-since
플래그를 함께 사용할 수 있습니다. -
이번 업데이트를 통해 더 이상 사용되지 않는
PipelineRunCancelled
값이 아닌spec.status
필드 값으로Cancelled
를 사용할 수 있습니다.
3.1.5.1.4. Operator
- 이번 업데이트를 통해 관리자는 기본 데이터베이스가 아닌 사용자 지정 데이터베이스를 사용하도록 로컬 Tekton Hub 인스턴스를 구성할 수 있습니다.
이번 업데이트를 통해 클러스터 관리자가 로컬 Tekton Hub 인스턴스를 활성화하면 카탈로그의 변경 사항이 Tekton Hub 웹 콘솔에 표시되도록 정기적으로 데이터베이스를 새로 고칩니다. 새로 고침 간격을 조정할 수 있습니다.
이전 버전에서는 카탈로그의 작업 및 파이프라인을 데이터베이스에 추가하려면 해당 작업을 수동으로 수행했거나 cron 작업을 설정하여 작업을 수행할 수 있었습니다.
- 이번 업데이트를 통해 최소한의 구성으로 Tekton Hub 인스턴스를 설치 및 실행할 수 있습니다. 이렇게 하면 팀과 협력하여 원하는 추가 사용자 정의를 결정할 수 있습니다.
-
이번 업데이트에서는 안전한 리포지토리를 복제할 수 있도록
GIT_SSL_CAINFO
를git-clone
작업에 추가합니다.
3.1.5.1.5. Tekton Chains
Tekton Chains는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
- 이번 업데이트를 통해 정적 토큰이 아닌 OIDC를 사용하여 자격 증명 모음에 로그인할 수 있습니다. 이러한 변경으로 인해 Spire는 신뢰할 수 있는 워크로드만 자격 증명 모음에 로그인할 수 있도록 OIDC 자격 증명을 생성할 수 있습니다. 또한 환경 변수로 삽입하지 않고 자격 증명 모음 주소를 구성 값으로 전달할 수 있습니다.
-
Red Hat OpenShift Pipelines Operator를 사용하여 설치할 때 구성 맵을 직접 업데이트할 수 없기 때문에
openshift-pipelines
네임스페이스의 Tekton Chains에 대한chain
-config 구성 맵은 Red Hat OpenShift Pipelines Operator를 업그레이드한 후 자동으로 기본값으로 재설정됩니다. 그러나 이번 업데이트를 통해TektonChain
사용자 정의 리소스를 사용하여 Tekton Chains를 구성할 수 있습니다. 이 기능을 사용하면 업그레이드 중에 덮어쓸 수 있는chain-config 구성
맵과 달리 업그레이드 후 구성이 유지됩니다.
3.1.5.1.6. Tekton Hub
Tekton Hub는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
이번 업데이트를 통해 Operator를 사용하여 Tekton Hub의 새 인스턴스를 설치하면 기본적으로 Tekton Hub 로그인이 비활성화됩니다. 로그인 및 평가 기능을 활성화하려면 Tekton Hub를 설치하는 동안 Hub API 시크릿을 생성해야 합니다.
참고Red Hat OpenShift Pipelines 1.7에서 Tekton Hub 로그인이 기본적으로 활성화되었으므로 Operator를 업그레이드하는 경우 Red Hat OpenShift Pipelines 1.8에서 로그인이 기본적으로 활성화됩니다. 이 로그인 을 비활성화하려면 OpenShift Pipelines 1.7.x -tekton 1.8.x에서 업그레이드한 후 Tekton Hub 로그인 비활성화를 참조하십시오.
이번 업데이트를 통해 관리자는 기본 데이터베이스가 아닌 사용자 지정 PostgreSQL 13 데이터베이스를 사용하도록 로컬 Tekton Hub 인스턴스를 구성할 수 있습니다. 이렇게 하려면
tekton-hub-db
라는Secret
리소스를 생성합니다. 예를 들면 다음과 같습니다.apiVersion: v1 kind: Secret metadata: name: tekton-hub-db labels: app: tekton-hub-db type: Opaque stringData: POSTGRES_HOST: <hostname> POSTGRES_DB: <database_name> POSTGRES_USER: <user_name> POSTGRES_PASSWORD: <user_password> POSTGRES_PORT: <listening_port_number>
- 이번 업데이트를 통해 더 이상 Tekton Hub 웹 콘솔에 로그인하여 카탈로그의 리소스를 데이터베이스에 추가할 필요가 없습니다. 이제 Tekton Hub API가 처음 실행을 시작할 때 이러한 리소스가 자동으로 추가됩니다.
- 이 업데이트는 카탈로그 새로 고침 API 작업을 호출하여 30분마다 카탈로그를 자동으로 새로 고칩니다. 이 간격은 user-configurable입니다.
3.1.5.1.7. 코드로 파이프라인
PAC( Pipeline as Code)는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
-
이번 업데이트를 통해 개발자는 코드 실행으로 파이프라인에 중복 리포지토리를 추가하려고 하면
tkn-pac
CLI 툴에서 알림을 받습니다.tkn pac create repository
를 입력하면 각 리포지토리에 고유한 URL이 있어야 합니다. 이 알림은 또한 hijacking exploits를 방지하는 데 도움이 됩니다. -
이번 업데이트를 통해 개발자는 새로운
tkn-pac setup cli
명령을 사용하여 웹 후크 메커니즘을 사용하여 Git 리포지토리를 코드로 Pipeline에 추가할 수 있습니다. 이렇게 하면 GitHub 앱을 사용할 수 없는 경우에도 Pipeline을 코드로 사용할 수 있습니다. 이 기능에는 GitHub, GitLab, BitBucket의 리포지토리 지원이 포함됩니다. 이번 업데이트를 통해 Code로 Pipeline은 다음과 같은 기능과 GitLab 통합을 지원합니다.
- 프로젝트 또는 그룹의 ACL(액세스 제어 목록)
-
/OK-to-test
지원 -
/retest
지원
이번 업데이트를 통해 CEL(Common Expression Language)을 사용하여 고급 파이프라인 필터링을 수행할 수 있습니다. CEL을 사용하면
PipelineRun
리소스의 주석을 사용하여 파이프라인이 다양한 Git 공급자 이벤트와 일치시킬 수 있습니다. 예를 들면 다음과 같습니다.... annotations: pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch == "main" && source_branch == "wip"
-
이전에는 개발자는 가져오기 요청과 같은 각 Git 이벤트
마다
하나의 파이프라인만 실행할 수 있었습니다. 이번 업데이트를 통해.tekton
디렉터리에 여러 파이프라인 실행이 있을 수 있습니다. 웹 콘솔에 실행 상태 및 보고서가 표시됩니다. 파이프라인 실행은 병렬로 작동하고 Git 공급자 인터페이스에 다시 보고합니다. -
이번 업데이트를 통해 가져오기 요청에서
/test
또는/retest
를 주석 처리하여 파이프라인 실행을 테스트하거나 다시 테스트할 수 있습니다. 이름별로 파이프라인 실행을 지정할 수도 있습니다. 예를 들어/test <pipelinerun_name
> 또는/retest <pipelinerun-name>을 입력합니다
. -
이번 업데이트를 통해 새로운
tkn-pac delete repository
명령을 사용하여 리포지토리 사용자 정의 리소스 및 관련 보안을 삭제할 수 있습니다.
3.1.5.2. 변경 사항 중단
이번 업데이트에서는
TaskRun
및PipelineRun
리소스의 기본 지표 수준을 다음 값으로 변경합니다.apiVersion: v1 kind: ConfigMap metadata: name: config-observability namespace: tekton-pipelines labels: app.kubernetes.io/instance: default app.kubernetes.io/part-of: tekton-pipelines data: _example: | ... metrics.taskrun.level: "task" metrics.taskrun.duration-type: "histogram" metrics.pipelinerun.level: "pipeline" metrics.pipelinerun.duration-type: "histogram"
-
이번 업데이트를 통해
Pipeline
및PipelineRun
리소스에 주석 또는 라벨이 모두 있는 경우Run
유형의 값이 우선합니다. 주석 또는 레이블이Task
및TaskRun
리소스에 있는 경우도 마찬가지입니다. -
Red Hat OpenShift Pipelines 1.8에서 이전에 더 이상 사용되지 않는
PipelineRun.Spec.ServiceAccountNames
필드가 제거되었습니다. 대신PipelineRun.Spec.TaskRunSpecs
필드를 사용합니다. -
Red Hat OpenShift Pipelines 1.8에서 이전에 더 이상 사용되지 않는
TaskRun.Status.ResourceResults.ResourceRef
필드가 제거되었습니다. 대신TaskRun.Status.ResourceResults.ResourceName
필드를 사용합니다. -
Red Hat OpenShift Pipelines 1.8에서 이전에 더 이상 사용되지 않는
Conditions
리소스 유형이 제거되었습니다. 이를 포함하는Pipeline
리소스 정의에서Conditions
리소스를 제거합니다. 대신PipelineRun
정의에서when
표현식을 사용합니다.
-
Tekton Chains의 경우 이 릴리스에서
tekton-provenance
형식이 제거되었습니다. 대신TektonChain
사용자 정의 리소스에서"artifacts.taskrun.format": "in-to"를
설정하여in-toto
형식을 사용합니다.
Red Hat OpenShift Pipelines 1.7.x는 Code 0.5.x로 Pipeline과 함께 제공됩니다. 현재 업데이트는 Pipeline과 Code 0.10.x와 함께 제공됩니다. 이 변경으로 인해 새 컨트롤러의
openshift-pipelines
네임스페이스에 새 경로가 생성됩니다. Pipeline을 코드로 사용하는 GitHub 앱 또는 Webhook에서 이 경로를 업데이트해야 합니다. 경로를 가져오려면 다음 명령을 사용합니다.$ oc get route -n openshift-pipelines pipelines-as-code-controller \ --template='https://{{ .spec.host }}'
-
이번 업데이트를 통해 Code로 Pipelines는
Repository
CRD(사용자 정의 리소스 정의)의 기본 보안 키 이름을 변경합니다. CRD에서 토큰을provider.
로 교체하고 secret을token
webhook.
로 바꿉니다.secret
-
이번 업데이트를 통해 Code로 Pipelines는 프라이빗 리포지토리에 대해 여러 파이프라인 실행을 지원하는 특수 템플릿 변수로 대체됩니다. 파이프라인 실행에서
secret: pac-git-basic-auth-{{repo_owner}}-{{repo_name}}
-{{repo_name}}을secret: {{ git_auth_secret }}
로 교체합니다. 이번 업데이트를 통해 Pipeline은
tkn-pac
CLI 툴에서 다음 명령을 업데이트합니다.-
tkn pac repository create
를tkn pac create repository
로 바꿉니다. -
tkn pac repository delete
를tkn pac delete repository
로 바꿉니다. -
tkn pac 리포지토리 목록을
로 교체합니다.tkn pac list
-
3.1.5.3. 사용되지 않거나 삭제된 기능
OpenShift Container Platform 4.11부터 Red Hat OpenShift Pipelines Operator 설치 및 업그레이드를 위한
프리뷰
및안정적인
채널이 제거됩니다. Operator를 설치하고 업그레이드하려면 적절한pipelines-<version
> 채널을 사용하거나 안정적인최신
버전의 최신 채널을 사용합니다. 예를 들어 OpenShift Pipelines Operator 버전1.8.x
를 설치하려면pipelines-1.8
채널을 사용합니다.참고OpenShift Container Platform 4.10 및 이전 버전에서는 Operator를 설치 및 업그레이드하기 위해
프리뷰
및안정적인
채널을 사용할 수 있습니다.Red Hat OpenShift Pipelines GA 1.6에서 더 이상 사용되지 않는
tekton.dev/v1alpha1
API 버전에 대한 지원은 Red Hat OpenShift Pipelines GA 1.9 릴리스에서 제거될 예정입니다.이 변경 사항은
TaskRun
,PipelineRun
,Task
,Pipeline
및 유사한tekton.dev/v1alpha1
리소스를 포함하는 pipeline 구성 요소에 영향을 미칩니다. 또는 Tekton v1alpha1 에서 Tekton v1alpha1로 마이그레이션에 설명된 대로apiVersion: tekton.dev/v1beta1
을 사용하도록 기존 리소스를 업데이트합니다.tekton.dev/v1alpha1
API 버전에 대한 버그 수정 및 지원은 현재 GA 1.8 라이프사이클이 종료될 때만 제공됩니다.중요Tekton Operator 의 경우
operator.tekton.dev/v1alpha1
API 버전은 더 이상 사용되지 않습니다. 이 값을 변경할 필요가 없습니다.-
Red Hat OpenShift Pipelines 1.8에서
PipelineResource
CR(사용자 정의 리소스)을 사용할 수 있지만 더 이상 지원되지 않습니다.PipelineResource
CR은 기술 프리뷰 기능이며tekton.dev/v1alpha1
API의 일부로, 향후 Red Hat OpenShift Pipelines GA 1.9 릴리스에서 제거될 예정입니다. -
Red Hat OpenShift Pipelines 1.8에서
Condition
사용자 정의 리소스(CR)가 제거되었습니다.Condition
CR은tekton.dev/v1alpha1
API의 일부였습니다. 이 API는 더 이상 사용되지 않으며 향후 Red Hat OpenShift Pipelines GA 1.9 릴리스에서 제거될 예정입니다. -
Red Hat OpenShift Pipelines 1.8에서
gsutil
의gcr.io
이미지가 제거되었습니다. 이러한 제거로 인해 이 이미지에 종속된Pipeline
리소스가 있는 클러스터가 중단될 수 있습니다. 버그 수정 및 지원은 Red Hat OpenShift Pipelines 1.7 라이프 사이클 종료 시에만 제공됩니다.
-
Red Hat OpenShift Pipelines 1.8에서
PipelineRun.Status.TaskRuns
및PipelineRun.Status.Runs
필드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. PipelineRuns의 TEP-0100: optimized TaskRuns 및 Runs Status 를 참조하십시오. Red Hat OpenShift Pipelines 1.8에서
pipelineRunCancelled
상태가 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이제PipelineRun
오브젝트의 정상적인 종료가 알파 기능에서 안정적인 기능으로 승격되었습니다. ( TEP-0058: Graceful Pipeline Run Termination 를 참조하십시오.) 또는pipelineRunCancelled
상태를 대체하는취소된
상태를 사용할 수 있습니다.Pipeline
및Task
리소스를 변경할 필요가 없습니다. 파이프라인 실행을 취소하는 도구가 있는 경우 다음 릴리스에서 툴을 업데이트해야 합니다. 이 변경 사항은 CLI, IDE 확장 등과 같은 툴에도 영향을 미치므로 새로운PipelineRun
상태를 지원합니다.이 기능은 기본적으로 사용 가능하므로 더 이상
TektonConfig
사용자 정의 리소스 정의에서pipeline.enable-api-fields
필드를alpha
로 설정할 필요가 없습니다.Red Hat OpenShift Pipelines 1.8에서
PipelineRun
의timeout
필드가 더 이상 사용되지 않습니다. 대신PipelineRun.Timeouts
필드를 사용합니다. 이제 알파 기능에서 안정적인 기능으로 승격됩니다.이 기능은 기본적으로 사용 가능하므로 더 이상
TektonConfig
사용자 정의 리소스 정의에서pipeline.enable-api-fields
필드를alpha
로 설정할 필요가 없습니다.-
Red Hat OpenShift Pipelines 1.8에서
init
컨테이너는LimitRange
오브젝트의 기본 요청 계산에서 생략됩니다.
3.1.5.4. 확인된 문제
s2i-nodejs
파이프라인은nodejs:14-ubi8-minimal
이미지 스트림을 사용하여 S2I(Source-to-Image) 빌드를 수행할 수 없습니다. 해당 이미지 스트림을 사용하면STEP "RUN /usr/libexec/s2i/assemble": exit status 127 메시지에서 오류 빌드
가 생성됩니다.해결방법:
nodejs:14-ubi8
대신nodejs:14-ubi8-minimal
이미지 스트림을 사용합니다.
Maven 및 Jib-Maven 클러스터 작업을 실행할 때 기본 컨테이너 이미지는 Intel (x86) 아키텍처에서만 지원됩니다. 따라서 ARM, IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x) 클러스터에서 작업이 실패합니다.
해결방법:
MAVEN_IMAGE
매개변수 값을maven:3.6.3-adoptopenjdk-11
로 설정하여 사용자 지정 이미지를 지정합니다.작은 정보tkn hub
를 사용하여 ARM, IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x)의 Tekton Catalog를 기반으로 하는 작업을 설치하기 전에 이러한 플랫폼에서 작업을 실행할 수 있는지 확인합니다. 작업 정보의 "Platforms" 섹션에ppc64le
및s390x
가 나열되어 있는지 확인하려면 다음 명령을 실행합니다.tkn hub info task <name>
-
ARM, IBM Power Systems, IBM Z 및 LinuxONE에서
s2i-dotnet
클러스터 작업은 지원되지 않습니다.
-
암시적 매개변수 매핑은 최상위
파이프라인
또는PipelineRun
정의에서taskRef
작업으로 매개변수를 잘못 전달합니다. 매핑은 고급 리소스에서 인라인taskSpec
사양이 있는 작업으로만 발생해야 합니다. 이 문제는TektonConfig
사용자 정의 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정하여 이 기능이 활성화된 클러스터에만 영향을 미칩니다.
3.1.5.5. 해결된 문제
- 이번 업데이트 이전에는 웹 콘솔의 개발자 보기에서 파이프라인 실행에 대한 메트릭이 불완전하고 오래되었습니다. 이번 업데이트에서는 메트릭이 정확하도록 문제가 수정되었습니다.
-
이번 업데이트 이전에는 파이프라인에 실패한 두 개의 병렬 작업이 있고 그 중 하나가
retries=2
인 경우 최종 작업이 실행되지 않고 파이프라인 시간 초과 및 실행되지 못했습니다. 예를 들어pipelines-operator-subscription
작업이 다음 오류 메시지와 함께 간헐적으로 실패했습니다.서버에 연결할 수 없습니다: EOF
. 이번 업데이트에서는 최종 작업이 항상 실행되도록 문제가 수정되었습니다. -
이번 업데이트 이전에는 작업 실행에 실패하여 파이프라인 실행이 중지된 경우 다른 작업 실행이 재시도를 완료하지 못할 수 있습니다. 그 결과
finally
작업이 예약되지 않아 파이프라인이 중단되었습니다. 이번 업데이트에서는 이러한 문제가 해결되었습니다.TaskRuns
및Run
오브젝트는 정상 중지로 인해 파이프라인 실행이 완료될 수 있도록 파이프라인 실행이 중지되었을 때 재시도할 수 있습니다. -
이번 업데이트에서는
TaskRun
오브젝트가 존재하는 네임스페이스에 하나 이상의LimitRange
오브젝트가 있는 경우 리소스 요구 사항을 계산하는 방법을 변경합니다. 스케줄러는 이제단계
컨테이너를 고려하고LimitRange
오브젝트에서 요청을 인수할 때 사이드카 컨테이너와 같은 다른 모든 앱 컨테이너를 제외합니다. -
이번 업데이트 이전에는 특정 조건에서 플래그 패키지가 이중 대시 플래그 종료기 바로 뒤에 하위 명령을 잘못 구문 분석할 수 있었습니다.
--
. 이 경우 실제 명령이 아닌 entrypoint 하위 명령을 실행했습니다. 이번 업데이트에서는 진입점이 올바른 명령을 실행하도록 이 플래그 분리 문제를 해결합니다. -
이번 업데이트 이전에는 이미지를 가져오는 경우 컨트롤러가 여러 패닉을 생성할 수 있거나 가져오기 상태가 불완전했습니다. 이번 업데이트에서는
status.TaskSpec
값이 아닌step.ImageID
값을 확인하여 문제를 해결합니다. -
이번 업데이트 이전에는 예약되지 않은 사용자 정의 작업이 포함된 파이프라인 실행을 취소하면
PipelineRunCouldntCancel
오류가 발생했습니다. 이번 업데이트에서는 이 문제가 해결되었습니다. 예약되지 않은 사용자 정의 작업이 포함된 파이프라인 실행을 취소할 수 있습니다. 이번 업데이트 이전에는 $params["<
NAME
>" 또는
<NAME>에 점 문자($params[
'<NAME>']의.
)가 포함된 경우 점 문자(. )의 이름이 추출되지 않았습니다. 예를 들어$params["org.ipsum.lorem"]
에서org
만 추출되었습니다.이번 업데이트에서는
$params
가 전체 값을 가져오도록 이 문제를 해결했습니다. 예를 들어$params["org.ipsum.lorem"]
및$params['org.ipsum.lorem']
은 유효하고 전체 값이 <NAME
> ,org.ipsum.lorem
, 추출됩니다.또한 <
NAME
>이 작은따옴표나 큰따옴표로 묶지 않은 경우에도 오류가 발생합니다. 예를 들어$params.org.ipsum.lorem
은 유효하지 않으며 검증 오류를 생성합니다.
-
이번 업데이트를 통해
Trigger
리소스는 사용자 정의 인터셉터를 지원하고 사용자 정의 인터셉터 서비스의 포트가ClusterInterceptor
정의 파일의 포트와 동일한지 확인합니다.
-
이번 업데이트 이전에는 Tekton Chains 및 Operator 구성 요소에 대한
tkn version
명령이 제대로 작동하지 않았습니다. 이번 업데이트에서는 명령이 올바르게 작동하고 해당 구성 요소에 대한 버전 정보를 반환하도록 이 문제가 해결되었습니다. -
이번 업데이트 이전에는
tkn pr delete --ignore-running
명령을 실행했으며 파이프라인 실행에status.condition
값이 없으면tkn
CLI 툴에서 null 포인터 오류(NPE)가 생성되었습니다. 이번 업데이트에서는 CLI 툴이 오류를 생성하고 아직 실행 중인 파이프라인 실행을 올바르게 무시하도록 이 문제를 해결합니다. -
이번 업데이트 이전에는
tkn pr delete --keep <value
> 또는tkn tr delete --keep <value
> 명령을 사용하고 파이프라인 실행 또는 작업 실행 수가 값보다 작으면 명령에서 오류를 예상대로 반환하지 않았습니다. 이번 업데이트에서는 명령이 이러한 조건에서 오류를 올바르게 반환하도록 문제를 해결합니다. -
이번 업데이트 이전에는
--ignore-running
플래그와 함께-p
또는-t
플래그와 함께tkn pr delete
또는tkn tr delete
명령을 사용하면 명령이 실행 중이거나 보류 중인 리소스가 잘못 삭제되었습니다. 이번 업데이트에서는 이러한 명령이 실행 중이거나 보류 중인 리소스를 올바르게 무시하도록 문제를 해결합니다.
-
이번 업데이트를 통해
TektonChain
사용자 정의 리소스를 사용하여 Tekton Chains를 구성할 수 있습니다. 이 기능을 사용하면 업그레이드 중에 덮어쓸 수 있는chain-config 구성
맵과 달리 업그레이드 후 구성이 유지됩니다. -
이번 업데이트를 통해
ClusterTask
리소스는buildah
및s2i
클러스터 작업을 제외하고 기본적으로 root로 실행되지 않습니다. -
이번 업데이트 이전에는
init
을 첫 번째 인수로 사용하고 두 개 이상의 인수를 사용할 때 Red Hat OpenShift Pipelines 1.7.1의 작업이 실패했습니다. 이번 업데이트를 통해 플래그가 올바르게 구문 분석되고 작업이 성공적으로 실행됩니다. 이번 업데이트 이전에는 OpenShift Container Platform 4.9에 Red Hat OpenShift Pipelines Operator를 설치하고 invalid 역할 바인딩으로 인해 다음 오류 메시지가 표시되었습니다.
error updating rolebinding openshift-operators-prometheus-k8s-read-binding: RoleBinding.rbac.authorization.k8s.io "openshift-operators-prometheus-k8s-read-binding" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"Role", Name:"openshift-operator-read"}: cannot change roleRef
이번 업데이트에서는 문제가 해결되어 오류가 더 이상 발생하지 않습니다.
-
이전 버전에서는 Red Hat OpenShift Pipelines Operator를 업그레이드하면
파이프라인
서비스 계정이 다시 생성되므로 서비스 계정에 연결된 시크릿이 손실되었습니다. 이번 업데이트에서는 이 문제가 해결되었습니다. 업그레이드 중에 Operator는 더 이상pipeline
서비스 계정을 다시 생성하지 않습니다. 결과적으로 업그레이드 후파이프라인
서비스 계정에 연결된 시크릿은 업그레이드 후에도 유지되며 리소스(tasks 및 파이프라인)는 계속 올바르게 작동합니다. -
이번 업데이트를 통해 인프라 노드 설정이
TektonConfig
CR(사용자 정의 리소스)에 구성된 경우 Code Pod로 Pipeline을 실행합니다. 이전에는 리소스 정리기를 사용하여 각 네임스페이스 Operator가 별도의 컨테이너에서 실행된 명령을 생성했습니다. 이 설계에서는 네임스페이스가 많은 클러스터에서 너무 많은 리소스를 소비합니다. 예를 들어 단일 명령을 실행하려면 네임스페이스 1000개가 있는 클러스터에서 Pod에 1000개의 컨테이너를 생성합니다.
이번 업데이트에서는 이 문제가 해결되었습니다. 반복문의 한 컨테이너에서 모든 명령이 실행되도록 네임스페이스 기반 구성을 작업에 전달합니다.
-
Tekton Chains에서 작업 및 이미지에 사용되는 키를 유지하기 위해
signing-secrets
라는 시크릿을 정의해야 합니다. 그러나 이번 업데이트 이전에는 Red Hat OpenShift Pipelines Operator가 재설정되거나 이 시크릿을 과도하게 업데이트하고 키가 손실되었습니다. 이번 업데이트에서는 이 문제가 해결되었습니다. 이제 Operator를 통해 Tekton Chains를 설치한 후 시크릿을 구성한 경우 보안이 유지되고 업그레이드에 의해 덮어쓰지 않습니다. 이번 업데이트 이전에는 모든 S2I 빌드 작업이 다음 메시지와 유사한 오류로 실패했습니다.
Error: error writing "0 0 4294967295\n" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted time="2022-03-04T09:47:57Z" level=error msg="error writing \"0 0 4294967295\\n\" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted" time="2022-03-04T09:47:57Z" level=error msg="(unable to determine exit status)"
이번 업데이트를 통해
pipelines-scc
SCC(보안 컨텍스트 제약 조건)는Buildah
및S2I
클러스터 작업에 필요한SETFCAP
기능과 호환됩니다. 결과적으로Buildah
및S2I
빌드 작업이 성공적으로 실행될 수 있습니다.다양한 언어 및 프레임워크로 작성된 애플리케이션에 대해
Buildah
클러스터 작업 및S2I
빌드 작업을 성공적으로 실행하려면build
및push
와 같은 적절한단계
오브젝트에 대해 다음 스니펫을 추가합니다.securityContext: capabilities: add: ["SETFCAP"]
- 이번 업데이트 이전에는 Red Hat OpenShift Pipelines Operator를 설치하는 데 예상보다 오래 걸렸습니다. 이번 업데이트에서는 설치 프로세스의 속도를 높이기 위해 일부 설정을 최적화합니다.
-
이번 업데이트를 통해 Buildah 및 S2I 클러스터 작업은 이전 버전보다 적은 단계가 있습니다. 일부 단계는
ResourceQuota
및LimitRange
오브젝트와 더 잘 작동하도록 단일 단계로 결합되었으며 필요한 것보다 더 많은 리소스가 필요하지 않습니다. -
이번 업데이트에서는 클러스터 작업에서 Buildah,
tkn
CLI 툴 및skopeo
CLI 툴 버전을 업그레이드합니다. -
이번 업데이트 이전에는 네임스페이스가
Terminating
상태인 경우 RBAC 리소스를 생성할 때 Operator에 실패했습니다. 이번 업데이트를 통해 Operator는종료
상태의 네임스페이스를 무시하고 RBAC 리소스를 생성합니다. -
이번 업데이트 이전에는 정리 cronjobs의 Pod가 인프라 노드에 예약되지 않았습니다. 대신 작업자 노드에 예약되었거나 전혀 예약되지 않았습니다. 이번 업데이트를 통해
TektonConfig
CR(사용자 정의 리소스)에 구성된 경우 이러한 유형의 Pod를 인프라 노드에 예약할 수 있습니다.
3.1.5.6. Red Hat OpenShift Pipelines General Availability 1.8.1 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.10, 4.11, 4.12에서 Red Hat OpenShift Pipelines General Availability (GA) 1.8.1을 사용할 수 있습니다.
3.1.5.6.1. 확인된 문제
기본적으로 컨테이너는 보안을 강화하기 위해 권한을 제한합니다. 제한된 권한은 Red Hat OpenShift Pipelines Operator의 모든 컨트롤러 Pod 및 일부 클러스터 작업에 적용됩니다. 제한된 권한으로 인해 특정 구성에서
git-clone
클러스터 작업이 실패합니다.해결방법: 없음. SRVKP-2634 문제를 추적할 수 있습니다.
설치 프로그램 세트가 failed 상태인 경우
TektonConfig
사용자 지정 리소스의 상태가False
대신True
로 잘못 표시됩니다.예: 실패한 설치 프로그램 세트
$ oc get tektoninstallerset NAME READY REASON addon-clustertasks-nx5xz False Error addon-communityclustertasks-cfb2p True addon-consolecli-ftrb8 True addon-openshift-67dj2 True addon-pac-cf7pz True addon-pipelines-fvllm True addon-triggers-b2wtt True addon-versioned-clustertasks-1-8-hqhnw False Error pipeline-w75ww True postpipeline-lrs22 True prepipeline-ldlhw True rhosp-rbac-4dmgb True trigger-hfg64 True validating-mutating-webhoook-28rf7 True
예: In incorrect
TektonConfig
status$ oc get tektonconfig config NAME VERSION READY REASON config 1.8.1 True
3.1.5.6.2. 해결된 문제
-
이번 업데이트 이전에는 실행 중인 파이프라인의 정리 작업 실행 작업이 다음 경고를
표시했습니다. 일부 작업은 완료되지 않고 완료된 것으로 표시되었습니다
. 이번 업데이트를 통해 정리기에서 파이프라인 실행의 일부인 작업을 유지합니다. -
이번 업데이트 이전에는
pipeline-1.8
이 Red Hat OpenShift Pipelines Operator 1.8.x를 설치하기 위한 기본 채널이었습니다. 이번 업데이트를 통해latest
가 기본 채널입니다. - 이번 업데이트 이전에는 Pipeline as Code 컨트롤러 Pod가 사용자가 노출한 인증서에 액세스할 수 없었습니다. 이번 업데이트를 통해 Pipeline as Code는 자체 서명된 또는 사용자 정의 인증서로 보호되는 경로 및 Git 리포지토리에 액세스할 수 있습니다.
- 이번 업데이트 이전에는 Red Hat OpenShift Pipelines 1.7.2에서 1.8.0으로 업그레이드한 후 RBAC 오류로 인해 작업이 실패했습니다. 이번 업데이트를 통해 RBAC 오류 없이 작업이 성공적으로 실행됩니다.
-
이번 업데이트 이전에는
tkn
CLI 툴을 사용하여 유형이 배열된결과
오브젝트가 포함된 작업 실행 및 파이프라인 실행을 제거할 수없었습니다
. 이번 업데이트를 통해tkn
CLI 툴을 사용하여 유형이 배열된결과
오브젝트가 포함된 작업 실행 및 파이프라인 실행을 제거할 수있습니다
. -
이번 업데이트 이전에는 파이프라인 사양에
배열
유형의ENV_VARS
매개변수가 있는 작업이 포함된 경우, pipeline run failed with the following error:invalid input params for task func-buildpacks: param types do not match the user-specified type: [ENV_VARS]
. 이번 업데이트를 통해 이러한 파이프라인 및 작업 사양을 사용하여 파이프라인 실행이 실패하지 않습니다. -
이번 업데이트 이전에는 클러스터 관리자가 컨테이너 레지스트리에 액세스하기 위한
Buildah
클러스터 작업에config.json
파일을 제공할 수 없었습니다. 이번 업데이트를 통해 클러스터 관리자는dockerconfig
작업 공간을 사용하여Buildah
클러스터 작업을config.json
파일로 제공할 수 있습니다.
3.1.5.7. Red Hat OpenShift Pipelines General Availability 1.8.2 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.10, 4.11, 4.12에서 Red Hat OpenShift Pipelines General Availability (GA) 1.8.2를 사용할 수 있습니다.
3.1.5.7.1. 해결된 문제
-
이번 업데이트 이전에는 SSH 키를 사용하여 리포지토리를 복제할 때
git-clone
작업이 실패했습니다. 이번 업데이트를 통해git-init
작업에서 root가 아닌 사용자의 역할이 제거되고 SSH 프로그램은$HOME/.ssh/
디렉터리에서 올바른 키를 찾습니다.
3.1.6. Red Hat OpenShift Pipelines General Availability 1.7 릴리스 정보
이번 업데이트를 통해 Red Hat OpenShift Pipelines General Availability (GA) 1.7은 OpenShift Container Platform 4.9, 4.10 및 4.11에서 사용할 수 있습니다.
3.1.6.1. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.7의 새로운 기능도 소개합니다.
3.1.6.1.1. 파이프라인
이번 업데이트를 통해
pipelines-<version
>은 Red Hat OpenShift Pipelines Operator를 설치할 기본 채널입니다. 예를 들어 OpenShift Pipelines Operator 버전1.7
을 설치할 기본 채널은pipelines-1.7
입니다. 클러스터 관리자는최신
채널을 사용하여 Operator의 최신 안정된 버전을 설치할 수도 있습니다.참고preview
및stable
채널은 향후 릴리스에서 더 이상 사용되지 않고 제거됩니다.사용자 네임스페이스에서 명령을 실행하면 컨테이너가
root
(사용자 ID0
)로 실행되지만 호스트에 대한 사용자 권한이 있습니다. 이번 업데이트를 통해 사용자 네임스페이스에서 Pod를 실행하려면 CRI-O 에 필요한 주석을 전달해야 합니다.-
모든 사용자에 대해 이러한 주석을 추가하려면
oc edit clustertask buildah
명령을 실행하고buildah
클러스터 작업을 편집합니다. - 특정 네임스페이스에 주석을 추가하려면 클러스터 작업을 작업을 해당 네임스페이스로 내보냅니다.
-
모든 사용자에 대해 이러한 주석을 추가하려면
이번 업데이트 이전에는 특정 조건이 충족되지 않은 경우
when
표현식에서Task
오브젝트 및 해당 종속 작업을 건너뜁니다. 이번 업데이트를 통해 종속 작업이 아닌Task
오브젝트만 보호하도록when
표현식의 범위를 지정할 수 있습니다. 이 업데이트를 활성화하려면TektonConfig
CRD에서scope-when-expressions-to-task
플래그를true
로 설정합니다.참고scope-when-expressions-to-task
플래그는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다. OpenShift Pipelines의 모범 사례로,when
표현식 범위가 보호된Task
로만 사용됩니다.-
이번 업데이트를 통해 작업 영역의
subPath
필드에서 변수 대체를 사용할 수 있습니다. 이번 업데이트를 통해 작은따옴표 또는 작은따옴표로 대괄호 표기법을 사용하여 매개변수 및 결과를 참조할 수 있습니다. 이번 업데이트 이전에는 점 표기법만 사용할 수 있었습니다. 예를 들어 다음은 다음과 같습니다.
$(param.myparam)
,$(param['myparam'])
, and$(param["myparam"])
.작은따옴표 또는 double quotes를 사용하여 문제가 있는 문자가 포함된 매개 변수 이름을 묶을 수 있습니다(예:
"."
예를 들면$(param['my.param'])
및$(param["my.param"])
입니다.
-
이번 업데이트를 통해
enable-api-fields
플래그를 활성화하지 않고 작업 정의에 단계의onError
매개변수를 포함할 수 있습니다.
3.1.6.1.2. Trigger
-
이번 업데이트를 통해
feature-flag-triggers
구성 맵에 새 필드labels-exclusion-pattern
이 있습니다. 이 필드의 값을 정규 표현식(regex) 패턴으로 설정할 수 있습니다. 컨트롤러는 이벤트 리스너에서 이벤트 리스너에 대해 생성된 리소스로의 전파에서 regex 패턴과 일치하는 레이블을 필터링합니다. -
이번 업데이트를 통해
TriggerGroups
필드가EventListener
사양에 추가됩니다. 이 필드를 사용하면 트리거 그룹을 선택하고 실행하기 전에 실행할 인터셉터 세트를 지정할 수 있습니다. 이 기능을 활성화하려면TektonConfig
사용자 지정 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정해야 합니다. -
이번 업데이트를 통해
Trigger
리소스는TriggerTemplate
템플릿에 정의된 사용자 정의 실행을 지원합니다. -
이번 업데이트를 통해 Triggers는
EventListener
Pod에서 Kubernetes 이벤트 내보내기를 지원합니다. -
이번 업데이트를 통해
ClusterInteceptor
,EventListener
,TriggerTemplate
,ClusterTriggerBinding
,TriggerBinding
등 다음과 같은 오브젝트에 대한 수 메트릭을 사용할 수 있습니다. -
이번 업데이트에서는
ServicePort
사양을 Kubernetes 리소스에 추가합니다. 이 사양을 사용하여 이벤트 리스너 서비스를 노출하는 포트를 수정할 수 있습니다. 기본 포트는8080
입니다. -
이번 업데이트를 통해
EventListener
사양의targetURI
필드를 사용하여 트리거 처리 중에 클라우드 이벤트를 보낼 수 있습니다. 이 기능을 활성화하려면TektonConfig
사용자 지정 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정해야 합니다. -
이번 업데이트를 통해
tekton-triggers-eventlistener-roles
오브젝트에 이미 존재하는create
동사 외에도patch
동사가 있습니다. -
이번 업데이트를 통해
securityContext.runAsUser
매개변수가 이벤트 리스너 배포에서 제거됩니다.
3.1.6.1.3. CLI
이번 업데이트를 통해
tkn [pipeline | pipelinerun] export
명령에서 파이프라인 또는 파이프라인 실행을 YAML 파일로 내보냅니다. 예를 들면 다음과 같습니다.openshift-pipelines
네임스페이스에서test_pipeline
s라는 파이프라인을 내보냅니다.$ tkn pipeline export test_pipeline -n openshift-pipelines
openshift-pipelines
네임스페이스에서test_pipeline_run
이라는 파이프라인 실행을 내보냅니다.$ tkn pipelinerun export test_pipeline_run -n openshift-pipelines
-
이번 업데이트를 통해
tkn pipelinerun cancel
에--grace
옵션이 추가됩니다. 종료를 강제 적용하는 대신--grace
옵션을 사용하여 파이프라인 실행을 정상적으로 종료합니다. 이 기능을 활성화하려면TektonConfig
사용자 지정 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정해야 합니다. 이번 업데이트에서는
tkn version
명령의 출력에 Operator 및 Chains 버전이 추가되었습니다.중요Tekton Chains는 기술 프리뷰 기능입니다.
-
이번 업데이트를 통해 파이프라인 실행을 취소할 때
tkn pipelinerun describe
명령이 모두 취소된 작업 실행을 표시합니다. 이번 수정 이전에는 하나의 작업 실행만 표시되었습니다. -
이번 업데이트를 통해
tkn [t | p | ct] start
명령을--skip-optional-workspace
플래그로 건너뛸 때 선택적 작업 공간에 대한 요청 사양을 건너뛸 수 있습니다. 대화형 모드에서 실행할 때 건너뛸 수도 있습니다. 이번 업데이트를 통해
tkn chain
명령을 사용하여 Tekton Chains를 관리할 수 있습니다.--chains-namespace
옵션을 사용하여 Tekton Chains를 설치할 네임스페이스를 지정할 수도 있습니다.중요Tekton Chains는 기술 프리뷰 기능입니다.
3.1.6.1.4. Operator
이번 업데이트를 통해 Red Hat OpenShift Pipelines Operator를 사용하여 Tekton Hub 및 Tekton 체인을 설치하고 배포할 수 있습니다.
중요Tekton Chains 및 클러스터에서 Tekton Hub의 배포는 기술 프리뷰 기능입니다.
이번 업데이트를 통해 Pipelines asPAC (PAC)를 애드온 옵션으로 찾아 사용할 수 있습니다.
중요코드의 파이프라인은 기술 프리뷰 기능입니다.
이번 업데이트를 통해 community 클러스터 작업 설치를 비활성화할 수 있습니다.
communityClusterTasks
매개변수를false
로 설정합니다. 예를 들면 다음과 같습니다.... spec: profile: all targetNamespace: openshift-pipelines addon: params: - name: clusterTasks value: "true" - name: pipelineTemplates value: "true" - name: communityClusterTasks value: "false" ...
이번 업데이트를 통해
TektonConfig
사용자 정의 리소스에서enable-devconsole-integration
플래그를false
로 설정하여 Tekton Hub와 개발자 화면의 통합을 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.... hub: params: - name: enable-devconsole-integration value: "true" ...
-
이번 업데이트를 통해
operator-config.yaml
구성 맵을 사용하면tkn version
명령의 출력이 Operator 버전을 표시할 수 있습니다. -
이번 업데이트를 통해
argocd-task-sync-and-wait
작업의 버전이v0.2
로 수정됩니다. -
이번 업데이트를 통해
TektonConfig
CRD로 업데이트하면oc get tektonconfig
명령으로 OPerator 버전이 표시됩니다. - 이번 업데이트를 통해 서비스 모니터가 트리거 메트릭에 추가됩니다.
3.1.6.1.5. hub
클러스터에 Tekton Hub를 배포하는 것은 기술 프리뷰 기능입니다.
Tekton Hub를 사용하면 CI/CD 워크플로를 위한 재사용 가능한 작업 및 파이프라인을 검색, 검색 및 공유할 수 있습니다. Tekton Hub의 공용 인스턴스는 hub.tekton.dev 에서 사용할 수 있습니다.
Red Hat OpenShift Pipelines 1.7에서 클러스터 관리자는 엔터프라이즈 클러스터에 Tekton Hub의 사용자 정의 인스턴스를 설치하고 배포할 수도 있습니다. 조직과 관련된 재사용 가능한 작업 및 파이프라인으로 카탈로그를 큐레이팅할 수 있습니다.
3.1.6.1.6. 체인
Tekton Chains는 기술 프리뷰 기능입니다.
Tekton Chains는 Kubernetes CRD(Custom Resource Definition) 컨트롤러입니다. 이를 사용하여 Red Hat OpenShift Pipelines를 사용하여 생성된 작업 및 파이프라인의 공급망 보안을 관리할 수 있습니다.
기본적으로 Tekton Chains는 OpenShift Container Platform 클러스터에서 작업이 실행되는 것을 모니터링합니다. 체인에는 완료된 작업 실행의 스냅샷을 가져와서 하나 이상의 표준 페이로드 형식으로 변환하고 모든 아티팩트를 서명하고 저장합니다.
Tekton Chains는 다음 기능을 지원합니다.
-
cosign
과 같은 암호화 키 유형 및 서비스를 사용하여 작업 실행, 작업 실행 결과 및 OCI 레지스트리 이미지에 서명할 수 있습니다. -
in-to-to
와 같은 테스트 형식을 사용할 수 있습니다. - OCI 리포지토리를 스토리지 백엔드로 사용하여 서명 및 서명된 아티팩트를 안전하게 저장할 수 있습니다.
3.1.6.1.7. 모델 번호 (PAC)
코드의 파이프라인은 기술 프리뷰 기능입니다.
Pipeline을 코드로 사용하면 클러스터 관리자 및 필요한 권한이 있는 사용자는 소스 코드 Git 리포지토리의 일부로 파이프라인 템플릿을 정의할 수 있습니다. 소스 코드 푸시 또는 구성된 Git 리포지토리의 가져오기 요청에 의해 트리거되면 해당 기능은 파이프라인 및 보고서 상태를 실행합니다.
코드 파이프라인은 다음 기능을 지원합니다.
- 가져오기 요청 상태. 가져오기 요청을 덮어쓸 때 가져오기 요청의 상태 및 제어는 Git 리포지토리를 호스팅하는 플랫폼에서 수행됩니다.
- GitHub에서 API를 확인하여 재확인을 포함하여 파이프라인 실행 상태를 설정합니다.
- GitHub 가져오기 요청 및 커밋 이벤트
-
/retest
와 같은 주석에서 요청 작업을 가져옵니다. - Git 이벤트 필터링 및 각 이벤트에 대한 별도의 파이프라인.
- 로컬 작업, Tekton Hub 및 원격 URL을 위한 OpenShift Pipelines의 자동 작업 확인
- 구성을 검색하는 데 GitHub Blob 및 오브젝트 API를 사용합니다.
-
GitHub 조직의 ACL(액세스 목록) 또는 Prow 스타일
OWNER
파일을 사용합니다. -
tkn
CLI 툴용tkn pac
플러그인은 파이프라인을 코드 리포지토리로 관리하고 부트스트랩하는 데 사용할 수 있습니다. - GitHub Application, GitHub Webhook, Bitbucket Server 및 Bitbucket Cloud에 대한 지원
3.1.6.2. 더 이상 사용되지 않는 기능
-
변경 사항 중단: 이 업데이트는
TektonConfig
사용자 정의 리소스(CR)에서disable-working-directory-overwrite
및disable-home-env-overwrite
필드를 제거합니다. 결과적으로TektonConfig
CR에서 더 이상$HOME
환경 변수 및 workingDir 매개변수를 자동으로설정하지
않습니다. CRD(작업
사용자 정의 리소스 정의)의env
및workingDir
필드를 사용하여$HOME
환경 변수 및workingDir
매개변수를 설정할 수 있습니다.
-
Conditions
CRD(사용자 정의 리소스 정의) 유형은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 권장되는When
표현식을 사용하십시오.
-
변경 중단:
Triggers
리소스는 템플릿을 검증하고EventListener
및TriggerBinding
값을 지정하지 않으면 오류를 생성합니다.
3.1.6.3. 확인된 문제
Maven 및 Jib-Maven 클러스터 작업을 실행할 때 기본 컨테이너 이미지는 Intel (x86) 아키텍처에서만 지원됩니다. 따라서 ARM, IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x) 클러스터에서 작업이 실패합니다. 이 문제를 해결하려면
MAVEN_IMAGE
매개변수 값을maven:3.6.3-adoptopenjdk-11
로 설정하여 사용자 정의 이미지를 지정할 수 있습니다.작은 정보tkn hub
를 사용하여 ARM, IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x)의 Tekton Catalog를 기반으로 하는 작업을 설치하기 전에 이러한 플랫폼에서 작업을 실행할 수 있는지 확인합니다. 작업 정보의 "Platforms" 섹션에ppc64le
및s390x
가 나열되어 있는지 확인하려면 다음 명령을 실행합니다.tkn hub info task <name>
-
IBM Power Systems, IBM Z 및 LinuxONE에서
s2i-dotnet
클러스터 작업은 지원되지 않습니다. 다음 오류가 생성되므로
nodejs:14-ubi8-minimal
이미지 스트림을 사용할 수 없습니다.STEP 7: RUN /usr/libexec/s2i/assemble /bin/sh: /usr/libexec/s2i/assemble: No such file or directory subprocess exited with status 127 subprocess exited with status 127 error building at STEP "RUN /usr/libexec/s2i/assemble": exit status 127 time="2021-11-04T13:05:26Z" level=error msg="exit status 127"
-
암시적 매개변수 매핑은 최상위
파이프라인
또는PipelineRun
정의에서taskRef
작업으로 매개변수를 잘못 전달합니다. 매핑은 고급 리소스에서 인라인taskSpec
사양이 있는 작업으로만 발생해야 합니다. 이 문제는TektonConfig
사용자 정의 리소스 정의의pipeline
섹션에서enable-api-fields
필드를alpha
로 설정하여 이 기능이 활성화된 클러스터에만 영향을 미칩니다.
3.1.6.4. 해결된 문제
-
이번 업데이트를 통해
Pipeline
및PipelineRun
오브젝트 정의 둘 다에라벨
및주석
과 같은 메타데이터가 있는 경우PipelineRun
유형의 값이 우선합니다.Task
및TaskRun
오브젝트에 대한 유사한 동작을 확인할 수 있습니다. -
이번 업데이트를 통해
timeouts.tasks
필드 또는timeouts.finally
필드가0
으로 설정된 경우timeouts.pipeline
도0
으로 설정됩니다. -
이번 업데이트를 통해 shebang을 사용하지 않는 스크립트에서
-x
set 플래그가 제거됩니다. 수정을 통해 스크립트 실행에서 발생할 수 있는 데이터 누수가 줄어듭니다. -
이번 업데이트를 통해 Git 자격 증명의 사용자 이름에 있는 백슬래시 문자가
.gitconfig
파일에서 추가 백슬래시로 이스케이프됩니다.
-
이번 업데이트를 통해 로깅 및 구성 맵을 정리하는 데
EventListener
오브젝트의종료
속성이 필요하지 않습니다. - 이번 업데이트를 통해 이벤트 리스너 서버와 연결된 기본 HTTP 클라이언트가 제거되고 사용자 지정 HTTP 클라이언트가 추가되었습니다. 결과적으로 시간 제한이 개선되었습니다.
- 이번 업데이트를 통해 Triggers 클러스터 역할이 소유자 참조와 함께 작동합니다.
- 이번 업데이트를 통해 여러 인터셉터에서 확장을 반환하는 경우 이벤트 리스너의 경쟁 조건이 발생하지 않습니다.
-
이번 업데이트를 통해
tkn pr delete
명령에서ignore-running
플래그를 사용하여 파이프라인 실행을 삭제하지 않습니다.
- 이번 업데이트를 통해 애드온 매개변수를 수정할 때 Operator Pod가 계속 재시작되지 않습니다.
-
이번 업데이트를 통해 서브스크립션 및 config 사용자 정의 리소스에 구성되지 않은 경우
tkn service
CLI Pod가 인프라 노드에 예약됩니다. - 이번 업데이트를 통해 지정된 버전의 클러스터 작업은 업그레이드 중에 삭제되지 않습니다.
3.1.6.5. Red Hat OpenShift Pipelines General Availability 1.7.1 릴리스 정보
이번 업데이트를 통해 Red Hat OpenShift Pipelines General Availability (GA) 1.7.1은 OpenShift Container Platform 4.9, 4.10 및 4.11에서 사용할 수 있습니다.
3.1.6.5.1. 해결된 문제
- 이번 업데이트 이전에는 Red Hat OpenShift Pipelines Operator가 Tekton Hub와 연결된 데이터베이스에서 데이터를 삭제한 후 새 데이터베이스를 설치했습니다. 이번 업데이트를 통해 Operator 업그레이드에서 데이터를 유지합니다.
- 이번 업데이트 이전에는 클러스터 관리자만 OpenShift Container Platform 콘솔의 파이프라인 메트릭에 액세스할 수 있었습니다. 이번 업데이트를 통해 다른 클러스터 역할을 가진 사용자도 파이프라인 메트릭에 액세스할 수 있습니다.
-
이번 업데이트 이전에는 대규모 종료 메시지를 내보내는 작업이 포함된 파이프라인에 대해 파이프라인이 실패했습니다. Pod의 모든 컨테이너의 종료 메시지의 총 크기는 12KB를 초과할 수 없기 때문에 파이프라인이 실패합니다. 이번 업데이트를 통해 동일한 이미지를 사용하는
place-tools
및step-init
초기화 컨테이너가 병합되어 각 작업의 Pod에서 실행되는 컨테이너 수를 줄입니다. 이 솔루션을 사용하면 작업 Pod에서 실행 중인 컨테이너 수를 최소화하여 파이프라인 실행 실패 가능성을 줄일 수 있습니다. 그러나 종료 메시지의 허용되는 최대 크기 제한은 제거되지 않습니다. -
이번 업데이트 이전에는 Tekton Hub 웹 콘솔에서 직접 리소스 URL에 액세스하려고 하면 Nginx
404
오류가 발생했습니다. 이번 업데이트를 통해 Tekton Hub 웹 콘솔 이미지가 Tekton Hub 웹 콘솔에서 직접 리소스 URL에 액세스할 수 있도록 수정되었습니다. - 이번 업데이트 이전에는 리소스 pruner 작업에서 리소스를 정리하기 위해 별도의 컨테이너를 생성했습니다. 이번 업데이트를 통해 리소스 정리 작업에서는 모든 네임스페이스에 대한 명령을 하나의 컨테이너에서 반복문으로 실행합니다.
3.1.6.6. Red Hat OpenShift Pipelines General Availability 1.7.2 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.9, 4.10 및 향후 버전에서 Red Hat OpenShift Pipelines General Availability (GA) 1.7.2를 사용할 수 있습니다.
3.1.6.6.1. 확인된 문제
-
openshift
구성 맵은 Red Hat OpenShift Pipelines Operator를 업그레이드한 후 자동으로 기본값으로 재설정됩니다. 현재는 이 문제에 대한 해결방법이 없습니다.-pipelines
네임스페이스의 Tekton Chains에 대한 chain-config
3.1.6.6.2. 해결된 문제
-
이번 업데이트 이전에는 OpenShift Pipelines 1.7.1의 작업이 첫 번째 인수로
init
를 사용한 다음 두 개 이상의 인수를 사용하지 못했습니다. 이번 업데이트를 통해 플래그가 올바르게 구문 분석되고 작업이 성공적으로 실행됩니다. 이번 업데이트 이전에는 OpenShift Container Platform 4.9에 Red Hat OpenShift Pipelines Operator를 설치하고 invalid 역할 바인딩으로 인해 다음 오류 메시지가 표시되었습니다.
error updating rolebinding openshift-operators-prometheus-k8s-read-binding: RoleBinding.rbac.authorization.k8s.io "openshift-operators-prometheus-k8s-read-binding" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"Role", Name:"openshift-operator-read"}: cannot change roleRef
이번 업데이트를 통해 Red Hat OpenShift Pipelines Operator는 다른 Operator 설치와 충돌하지 않도록 별도의 역할 바인딩 네임스페이스와 함께 설치됩니다.
이번 업데이트 이전에는 Operator를 업그레이드하면 Tekton Chains의
signing-secrets
시크릿 키 재설정이 기본값으로 트리거되었습니다. 이번 업데이트를 통해 Operator를 업그레이드한 후 사용자 정의 보안 키가 유지됩니다.참고Red Hat OpenShift Pipelines 1.7.2로 업그레이드하면 키가 재설정됩니다. 그러나 향후 릴리스로 업그레이드할 때는 키가 유지되어야 합니다.
이번 업데이트 이전에는 모든 S2I 빌드 작업이 다음 메시지와 유사한 오류로 실패했습니다.
Error: error writing "0 0 4294967295\n" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted time="2022-03-04T09:47:57Z" level=error msg="error writing \"0 0 4294967295\\n\" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted" time="2022-03-04T09:47:57Z" level=error msg="(unable to determine exit status)"
이번 업데이트를 통해
pipelines-scc
SCC(보안 컨텍스트 제약 조건)는Buildah
및S2I
클러스터 작업에 필요한SETFCAP
기능과 호환됩니다. 결과적으로Buildah
및S2I
빌드 작업이 성공적으로 실행될 수 있습니다.다양한 언어 및 프레임워크로 작성된 애플리케이션에 대해
Buildah
클러스터 작업 및S2I
빌드 작업을 성공적으로 실행하려면build
및push
와 같은 적절한단계
오브젝트에 대해 다음 스니펫을 추가합니다.securityContext: capabilities: add: ["SETFCAP"]
3.1.6.7. Red Hat OpenShift Pipelines General Availability 1.7.3 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.9, 4.10 및 4.11에서 Red Hat OpenShift Pipelines General Availability(GA) 1.7.3을 사용할 수 있습니다.
3.1.6.7.1. 해결된 문제
-
이번 업데이트 이전에는 네임스페이스가
Terminating
상태인 경우 RBAC 리소스를 생성할 때 Operator에 실패했습니다. 이번 업데이트를 통해 Operator는종료
상태의 네임스페이스를 무시하고 RBAC 리소스를 생성합니다. -
이전 버전에서는 Red Hat OpenShift Pipelines Operator를 업그레이드하면
파이프라인
서비스 계정이 다시 생성되므로 서비스 계정에 연결된 시크릿이 손실되었습니다. 이번 업데이트에서는 이 문제가 해결되었습니다. 업그레이드 중에 Operator는 더 이상pipeline
서비스 계정을 다시 생성하지 않습니다. 결과적으로 업그레이드 후파이프라인
서비스 계정에 연결된 시크릿은 업그레이드 후에도 유지되며 리소스(tasks 및 파이프라인)는 계속 올바르게 작동합니다.
3.1.7. Red Hat OpenShift Pipelines General Availability 1.6 릴리스 정보
이번 업데이트를 통해 OpenShift Container Platform 4.9에서 Red Hat OpenShift Pipelines General Availability(GA) 1.6을 사용할 수 있습니다.
3.1.7.1. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.6의 새로운 기능도 소개합니다.
-
이번 업데이트를 통해
--output <string> , 여기서 <string>은
을 반환하도록 pipeline 또는 taskyaml
또는json
을 사용하여 YAML 또는 JSON 형식의 문자열start
명령을 구성할 수 있습니다.그렇지 않으면
--output
옵션이 없으면start
명령은 다른 프로그램에서 구문 분석하기 어려운 사람 친화적인 메시지를 반환합니다. YAML 또는 JSON 형식의 문자열을 반환하는 것은 CI(Continuous Integration) 환경에 유용합니다. 예를 들어, 리소스가 생성되면yq
또는jq
를 사용하여 리소스에 대한 YAML 또는 JSON 형식의 메시지를 구문 분석하고showlog
옵션을 사용하지 않고 해당 리소스가 종료될 때까지 기다릴 수 있습니다. -
이번 업데이트를 통해 Podman의
auth.json
인증 파일을 사용하여 레지스트리에 인증할 수 있습니다. 예를 들어,tkn bundle push
를 사용하여 Docker CLI 대신 Podman을 사용하여 원격 레지스트리로 내보낼 수 있습니다. -
이번 업데이트를 통해
tkn [taskrun | pipelinerun] delete --all
명령을 사용하는 경우 새 --keep-sincetkn [taskrun | pipelinerun] delete -all --keep-since 5
를 입력합니다. -
이번 업데이트를 통해 작업 실행 또는 파이프라인 실행을 삭제할 때
--parent-resource
및--keep-since
옵션을 함께 사용할 수 있습니다. 예를 들어tkn pipelinerun delete --pipeline pipelinename --keep-since 5
명령은 상위 리소스가pipelinename
이라는 이름과 기간이 5분 미만인 파이프라인 실행을 유지합니다.tkn tr delete -t <taskname> --keep-since 5
및tkn tr delete --clustertask <taskname> --keep-since 5
명령이 작업 실행에 대해 유사하게 작동합니다. -
이번 업데이트에서는
v1beta1
리소스와 함께 작동하도록 트리거 리소스에 대한 지원이 추가되었습니다.
-
이번 업데이트에서는
tkn pipelinerun delete
및tkn taskrun delete
명령에ignore-running
옵션이 추가되었습니다. -
이번 업데이트에서는
tkn task
및tkn clustertask
명령에create
하위 명령이 추가되었습니다. -
이번 업데이트를 통해
tkn pipelinerun delete --all
명령을 사용할 때 새 --label <string=
및==
를 같음 연산자 또는!=
과 함께--label
옵션을 inequality 연산자로 사용할 수 있습니다. 예를 들어tkn pipelinerun delete --all --label delete --df
및tkn pipelinerun delete --all --label==asdf
명령은asdf
레이블이 있는 모든 파이프라인 실행을 삭제합니다. - 이번 업데이트를 통해 설치된 Tekton 구성 요소 버전을 구성 맵에서 가져오거나 구성 맵이 없으면 배포 컨트롤러에서 설치할 수 있습니다.
-
이번 업데이트를 통해 트리거는
feature-flags
및config-defaults
구성 맵을 지원하여 기능 플래그를 구성하고 각각 기본값을 설정합니다. -
이번 업데이트에서는
EventListener
리소스에서 수신한 이벤트를 계산하는 데 사용할 수 있는 새 메트릭eventlistener_event_count
가 추가되었습니다. 이번 업데이트에서는
v1beta1
Go API 유형이 추가되었습니다. 이번 업데이트를 통해 트리거는 이제v1beta1
API 버전을 지원합니다.현재 릴리스에서는
v1alpha1
기능이 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다. 대신v1beta1
기능을 사용합니다.
현재 릴리스에서는 리소스의 자동 실행이 기본적으로 활성화되어 있습니다. 또한 다음 새 주석을 사용하여 각 네임스페이스에 대해 작업 실행 및 파이프라인 실행 자동 실행을 구성할 수 있습니다.
-
operator.tekton.dev/prune.schedule
: 이 주석의 값이TektonConfig
사용자 지정 리소스 정의에 지정된 값과 다른 경우 해당 네임스페이스의 새 cron 작업이 생성됩니다. -
operator.tekton.dev/prune.skip
:true
로 설정하면 구성된 네임스페이스가 표시되지 않습니다. -
operator.tekton.dev/prune.resources
: 이 주석은 쉼표로 구분된 리소스 목록을 허용합니다. 파이프라인 실행과 같은 단일 리소스를 정리하려면 이 주석을"pipelinerun"
으로 설정합니다. 작업 실행 및 파이프라인 실행과 같은 여러 리소스를 정리하려면 이 주석을"taskrun, pipelinerun"
로 설정합니다. -
operator.tekton.dev/prune.keep
: 이 주석을 사용하여 prunning 없이 리소스를 유지합니다. operator.tekton.dev/prune.keep-since
:이 주석을 사용하여 수명에 따라 리소스를 유지합니다. 이 주석의 값은 리소스 사용 기간(분)과 같아야 합니다. 예를 들어 5일 전에 생성된 리소스를 유지하려면keep-since
를7200
으로 설정합니다.참고keep
및keep-since
주석은 상호 배타적입니다. 모든 리소스의 경우 해당 리소스 중 하나만 구성해야 합니다.-
operator.tekton.dev/prune.strategy
: 이 주석의 값을 유지하거나keep
-since
-
-
관리자는 전체 클러스터에 대한
파이프라인
서비스 계정 생성을 비활성화하고 관련 SCC를 잘못 사용하여 권한 에스컬레이션을 방지할 수 있습니다. 이 SCC는anyuid
와 매우 유사합니다. -
이제
TektonConfig
CR(사용자 정의 리소스)과TektonPipeline
및TektonTriggers
와 같은 개별 구성 요소에 대한 CR을 사용하여 기능 플래그 및 구성 요소를 구성할 수 있습니다. 이 세분성 수준은 개별 구성 요소에 대한 Tekton OCI 번들과 같은 알파 기능을 사용자 지정하고 테스트하는 데 도움이 됩니다. -
PipelineRun
리소스에 대한 선택적Timeouts
필드를 구성할 수 있습니다. 예를 들어 파이프라인 실행, 각 작업 실행 및finally
작업에 대해 시간 제한을 별도로 구성할 수 있습니다. -
TaskRun
리소스에서 생성한 Pod는 이제 Pod의activeDeadlineSeconds
필드를 설정합니다. 이를 통해 OpenShift는 이를 종료로 간주할 수 있으며 pod에 대해 특별히 범위가 지정된ResourceQuota
오브젝트를 사용할 수 있습니다. - configmaps를 사용하여 작업 실행, 파이프라인 실행, 작업 및 파이프라인에서 메트릭 태그 또는 레이블 유형을 제거할 수 있습니다. 또한 히스토그램, 게이지 또는 마지막 값과 같은 기간 측정을 위해 다양한 유형의 메트릭을 구성할 수 있습니다.
-
Tekton이 이제
Min
,Max
, Default ,
필드를 고려하여Default
RequestLimitRange
오브젝트를 완전히 지원하므로 Pod에서 요청 및 제한을 일관되게 정의할 수 있습니다. 다음 알파 기능이 도입되었습니다.
이제 파이프라인 실행이 모든 작업 실행의 실행을 직접 중지한 이전 동작이 아닌
finally
작업을 실행한 후 중지할 수 있습니다. 이번 업데이트에서는 다음spec.status
값을 추가합니다.-
StoppedRunFinally
는 완료된 후 현재 실행 중인 작업을 중지한 다음finally
작업을 실행합니다. -
CancelledRun
finally는 실행 중인 작업을 즉시 취소하고finally
작업을 실행합니다. 취소
하면PipelineRunCancelled
상태에서 제공하는 이전 동작이 유지됩니다.참고취소된
상태는v1
버전에서 제거될 더 이상 사용되지 않는PipelineRunCancelled
상태를 대체합니다.
-
-
이제
oc debug
명령을 사용하여 작업을 디버그 모드로 설정하여 실행을 일시 중지하고 Pod의 특정 단계를 검사할 수 있습니다. -
계속할
단계의onError
필드를 설정하면 단계 종료 코드가 기록되어 후속 단계로 전달됩니다. 그러나 작업 실행은 실패하지 않으며 작업의 나머지 단계를 계속 실행합니다. 기존 동작을 유지하려면onError
필드 값을stopAndFail
로 설정할 수 있습니다. - 작업에서 실제로 사용되는 것보다 더 많은 매개변수를 허용할 수 있습니다. 알파 기능 플래그를 활성화하면 매개 변수가 인라인 사양으로 암시적으로 전파될 수 있습니다. 예를 들어 인라인 작업은 작업에 대한 각 매개변수를 명시적으로 정의하지 않고도 상위 파이프라인 실행의 매개변수에 액세스할 수 있습니다.
-
알파 기능에 대한 플래그를 활성화하면
When
표현식의 조건이 직접 연결된 작업에만 적용되며 작업의 종속 항목은 적용되지 않습니다. 식을 연결된 작업 및 해당 종속 항목에 적용하려면 식을 종속된 각 작업과 별도로 연결해야 합니다.앞으로 이 동작은 Tekton의 새 API 버전에서
When
표현식의 기본 동작입니다. 이 업데이트 대신 기존 기본 동작이 더 이상 사용되지 않습니다.
현재 릴리스에서는
TektonConfig
CR(사용자 정의 리소스)에서nodeSelector
및허용 오차
값을 지정하여 노드 선택을 구성할 수 있습니다. Operator는 이러한 값을 생성하는 모든 배포에 추가합니다.-
Operator의 컨트롤러 및 웹 후크 배포에 대한 노드 선택을 구성하려면 Operator를 설치한 후
Subscription
CR 사양에서config.nodeSelector
및config.tolerations
필드를 편집합니다. -
인프라 노드에 OpenShift Pipelines의 나머지 컨트롤 플레인 Pod를 배포하려면
nodeSelector
및tolerations
필드를 사용하여TektonConfig
CR을 업데이트합니다. 그런 다음 수정 사항이 Operator에서 생성한 모든 Pod에 적용됩니다.
-
Operator의 컨트롤러 및 웹 후크 배포에 대한 노드 선택을 구성하려면 Operator를 설치한 후
3.1.7.2. 더 이상 사용되지 않는 기능
-
CLI 0.21.0에서
clustertask
, task ,
,task
runpipelinerun
명령에 대한 모든v1alpha1
리소스를 지원하지 않습니다.이러한 리소스는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다.
Tekton Triggers v0.16.0에서는
EventListener
리소스에 대한 지표에서 중복상태
레이블이 제거됩니다.중요변경 중단:
eventlistener_http_duration_seconds_*
메트릭에서상태
레이블이 제거되었습니다.상태
레이블을 기반으로 하는 쿼리를 제거합니다.-
현재 릴리스에서는
v1alpha1
기능이 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다. 이번 업데이트를 통해 대신v1beta1
Go API 유형을 사용할 수 있습니다. Trigger가 이제v1beta1
API 버전을 지원합니다. 현재 릴리스에서는
EventListener
리소스에서 트리거가 처리를 완료하기 전에 응답을 보냅니다.중요변경 사항 중단: 이 변경으로 인해 리소스를 생성할 때
EventListener
리소스가201 Created
상태 코드로 응답하지 않습니다. 대신202 Accepted
응답 코드로 응답합니다.현재 릴리스에서는
EventListener
리소스에서podTemplate
필드를 제거합니다.중요변경 중단: #1100 의 일부로 더 이상 사용되지 않는
podTemplate
필드가 제거되었습니다.현재 릴리스에서는
EventListener
리소스의 사양에서 더 이상 사용되지 않는복제본
필드를 제거합니다.중요변경 사항 중단: 더 이상 사용되지 않는
복제본
필드가 제거되었습니다.
Red Hat OpenShift Pipelines 1.6에서
HOME="/tekton/home"
및workingDir="/workspace"
의 값은Step
오브젝트의 사양에서 제거됩니다.대신 Red Hat OpenShift Pipelines는
Step
오브젝트를 실행하는 컨테이너에서 정의한 값으로HOME
및workingDir
을 설정합니다.Step
오브젝트의 사양에 따라 이러한 값을 재정의할 수 있습니다.이전 동작을 사용하려면
TektonConfig
CR의disable-working-directory-overwrite
및disable-home-env-overwrite
필드를false
로 변경할 수 있습니다.apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: pipeline: disable-working-directory-overwrite: false disable-home-env-overwrite: false ...
중요TektonConfig
CR의disable-working-directory-overwrite
및disable-home-env-overwrite
필드는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다.
3.1.7.3. 확인된 문제
-
Maven 및 Jib-Maven 클러스터 작업을 실행할 때 기본 컨테이너 이미지는 Intel (x86) 아키텍처에서만 지원됩니다. 따라서 IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x) 클러스터에서 작업이 실패합니다. 이 문제를 해결하려면
MAVEN_IMAGE
매개변수 값을maven:3.6.3-adoptopenjdk-11
로 설정하여 사용자 정의 이미지를 지정할 수 있습니다. -
IBM Power Systems, IBM Z 및 LinuxONE에서
s2i-dotnet
클러스터 작업은 지원되지 않습니다. -
tkn hub
를 사용하여 IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x)의 Tekton Catalog를 기반으로 작업을 설치하기 전에 이러한 플랫폼에서 작업을 실행할 수 있는지 확인합니다. 작업 정보의 "Platforms" 섹션에ppc64le
및s390x
가 나열되어 있는지 확인하려면 다음 명령을 실행합니다.tkn hub info task <name>
다음 오류가 생성되므로
nodejs:14-ubi8-minimal
이미지 스트림을 사용할 수 없습니다.STEP 7: RUN /usr/libexec/s2i/assemble /bin/sh: /usr/libexec/s2i/assemble: No such file or directory subprocess exited with status 127 subprocess exited with status 127 error building at STEP "RUN /usr/libexec/s2i/assemble": exit status 127 time="2021-11-04T13:05:26Z" level=error msg="exit status 127"
3.1.7.4. 해결된 문제
-
tkn hub
명령이 IBM Power Systems, IBM Z 및 LinuxONE에서 지원됩니다.
-
이번 업데이트 이전에는 사용자가
tkn
명령을 실행한 후 터미널을 사용할 수 없어재시도 횟수
가 지정된 경우에도 파이프라인 실행이 수행되었습니다. 작업 실행 또는 파이프라인 실행에 시간 초과를 지정할 수 없었습니다. 이번 업데이트에서는 명령을 실행한 후 터미널을 사용할 수 있도록 문제를 해결합니다. -
이번 업데이트 이전에는
tkn pipelinerun delete --all
을 실행하면 모든 리소스가 삭제됩니다. 이번 업데이트에서는 running 상태의 리소스가 삭제되지 않습니다. -
이번 업데이트 이전에는
tkn 버전 --component=<component> 명령을 사용하여 구성
요소 버전을 반환하지 않았습니다. 이번 업데이트에서는 이 명령이 구성 요소 버전을 반환하도록 문제를 해결합니다. -
이번 업데이트 이전에는
tkn pr logs
명령을 사용할 때 파이프라인 출력 로그가 잘못된 작업 순서로 표시되었습니다. 이번 업데이트에서는 완료된PipelineRun
로그가 적절한TaskRun
실행 순서에 나열되도록 문제를 해결합니다.
-
이번 업데이트 이전에는 실행 중인 파이프라인의 사양을 편집하면 파이프라인 실행이 완료될 때 중지되지 않을 수 있습니다. 이번 업데이트에서는 정의를 한 번만 가져온 다음 확인을 위해 상태에 저장된 사양을 사용하여 문제를 해결합니다. 이 변경으로
PipelineRun
또는TaskRun
이 실행되는 동안 변경되는Pipeline
또는Task
를 참조할 때 경쟁 조건의 확률을 줄입니다. -
이제
식
값에[$(params.arrayParam[*])]와 같은 배열
매개 변수 참조가 있을 수 있습니다.
3.1.7.5. Red Hat OpenShift Pipelines General Availability 1.6.1 릴리스 정보
3.1.7.5.1. 확인된 문제
이전 버전에서 Red Hat OpenShift Pipelines 1.6.1로 업그레이드한 후 OpenShift Pipelines는 Tekton 리소스(tasks 및 Pipeline)에서 작업(create/delete/apply)을 수행할 수 없는 일관성 없는 상태가 될 수 있습니다. 예를 들어 리소스를 삭제하는 동안 다음 오류가 발생할 수 있습니다.
Error from server (InternalError): Internal error occurred: failed calling webhook "validation.webhook.pipeline.tekton.dev": Post "https://tekton-pipelines-webhook.openshift-pipelines.svc:443/resource-validation?timeout=10s": service "tekton-pipelines-webhook" not found.
3.1.7.5.2. 해결된 문제
Red Hat OpenShift Pipelines에서 설정한
SSL_CERT_DIR
환경 변수(/tekton-custom-certs
)는 다음과 같은 기본 시스템 디렉터리를 인증서 파일로 재정의하지 않습니다.-
/etc/pki/tls/certs
-
/etc/ssl/certs
-
/system/etc/security/cacerts
-
- Horizontal Pod Autoscaler는 Red Hat OpenShift Pipelines Operator가 제어하는 배포의 복제본 수를 관리할 수 있습니다. 이번 릴리스에서는 최종 사용자 또는 클러스터의 에이전트에서 개수를 변경하면 Red Hat OpenShift Pipelines Operator에서 관리하는 배포의 복제본 수를 재설정하지 않습니다. 그러나 Red Hat OpenShift Pipelines Operator를 업그레이드할 때 복제본이 재설정됩니다.
-
이제
tkn
CLI를 제공하는 Pod가TektonConfig
사용자 정의 리소스에 지정된 노드 선택기 및 허용 오차 제한에 따라 노드에 예약됩니다.
3.1.7.6. Red Hat OpenShift Pipelines General Availability 1.6.2 릴리스 정보
3.1.7.6.1. 확인된 문제
-
새 프로젝트를 생성하면
파이프라인
서비스 계정 생성이 지연되며 기존 클러스터 작업 및 파이프라인 템플릿이 제거되는 데 10분 이상 걸립니다.
3.1.7.6.2. 해결된 문제
-
이번 업데이트 이전에는 이전 버전에서 Red Hat OpenShift Pipelines 1.6.1로 업그레이드한 후 파이프라인에 대해 Tekton 설치 프로그램 세트의 여러 인스턴스가 생성되었습니다. 이번 업데이트를 통해 Operator는 업그레이드 후 각 유형의
TektonInstallerSet
의 인스턴스 하나만 존재하게 합니다. - 이번 업데이트 이전에는 Operator의 모든 조정기에서 구성 요소 버전을 사용하여 이전 버전의 Red Hat OpenShift Pipelines 1.6.1로 업그레이드하는 동안 리소스 재조정을 결정했습니다. 결과적으로 해당 리소스는 구성 요소 버전이 업그레이드를 변경하지 않은 다시 생성되지 않았습니다. 이번 업데이트를 통해 Operator는 구성 요소 버전 대신 Operator 버전을 사용하여 업그레이드하는 동안 리소스 재조정을 결정합니다.
- 이번 업데이트 이전에는 업그레이드 후 클러스터에서 파이프라인 웹 후크 서비스가 누락되었습니다. 이는 구성 맵의 업그레이드 교착 상태 때문이었습니다. 이번 업데이트를 통해 클러스터에 구성 맵이 없는 경우 웹 후크 검증을 비활성화하는 메커니즘이 추가됩니다. 결과적으로 파이프라인 웹 후크 서비스가 업그레이드 후 클러스터에 유지됩니다.
- 이번 업데이트 이전에는 네임스페이스를 구성한 후 자동 실행을 위한 cron 작업이 다시 생성되었습니다. 이번 업데이트를 통해 네임스페이스에 관련 주석이 변경된 경우에만 자동 실행을 위한 cron 작업이 다시 생성됩니다.
Tekton Pipelines의 업스트림 버전은 다음 수정 사항이 있는
v0.28.3
로 수정되었습니다.-
라벨 또는 주석 전파를 허용하도록
PipelineRun
또는TaskRun
오브젝트를 수정합니다. 암시적 매개 변수의 경우:
-
TaskRefs
오브젝트에PipelineSpec
매개변수를 적용하지 마십시오. -
Pipeline
오브젝트에 대한 암시적 매개 변수 동작을 비활성화합니다.
-
-
라벨 또는 주석 전파를 허용하도록
3.1.7.7. Red Hat OpenShift Pipelines General Availability 1.6.3 릴리스 정보
3.1.7.7.1. 해결된 문제
이번 업데이트 이전에는 Red Hat OpenShift Pipelines Operator가 Pipeline 및 Trigger와 같은 구성 요소에서 Pod 보안 정책을 설치했습니다. 그러나 구성 요소의 일부로 제공되는 Pod 보안 정책은 이전 릴리스에서 더 이상 사용되지 않았습니다. 이번 업데이트를 통해 Operator는 구성 요소에서 Pod 보안 정책 설치를 중지합니다. 결과적으로 다음과 같은 업그레이드 경로가 영향을 받습니다.
- OpenShift Pipelines 1.6.1 또는 1.6.2에서 OpenShift Pipelines 1.6.3으로 업그레이드하면 Pipeline 및 Trigger 구성 요소의 Pod 보안 정책이 삭제됩니다.
OpenShift Pipelines 1.5.x에서 1.6.3으로 업그레이드하면 구성 요소에서 설치된 Pod 보안 정책이 유지됩니다. 클러스터 관리자는 수동으로 삭제할 수 있습니다.
참고향후 릴리스로 업그레이드할 때 Red Hat OpenShift Pipelines Operator는 더 이상 사용되지 않는 모든 Pod 보안 정책을 자동으로 삭제합니다.
- 이번 업데이트 이전에는 클러스터 관리자만 OpenShift Container Platform 콘솔의 파이프라인 메트릭에 액세스할 수 있었습니다. 이번 업데이트를 통해 다른 클러스터 역할을 가진 사용자도 파이프라인 메트릭에 액세스할 수 있습니다.
- 이번 업데이트 이전에는 OpenShift Pipelines Operator의 RBAC(역할 기반 액세스 제어) 문제로 인해 구성 요소를 업그레이드하거나 설치하는 데 문제가 발생했습니다. 이번 업데이트에서는 다양한 Red Hat OpenShift Pipelines 구성 요소 설치의 안정성과 일관성을 향상시킵니다.
-
이번 업데이트 이전에는
TektonConfig
CR에서clusterTasks
및pipelineTemplates
필드를false
로 설정하면 클러스터 작업 및 파이프라인 템플릿이 제거되는 속도가 느려졌습니다. 이번 업데이트에서는 클러스터 작업 및 파이프라인 템플릿과 같은 Tekton 리소스의 라이프사이클 관리 속도를 향상시킵니다.
3.1.7.8. Red Hat OpenShift Pipelines General Availability 1.6.4 릴리스 노트
3.1.7.8.1. 확인된 문제
Red Hat OpenShift Pipelines 1.5.2에서 1.6.4로 업그레이드한 후 이벤트 리스너 경로에 액세스하면
503
오류가 반환됩니다.해결방법: 이벤트 리스너의 경로에 대해 YAML 파일의 대상 포트를 수정합니다.
관련 네임스페이스의 경로 이름을 추출합니다.
$ oc get route -n <namespace>
경로를 편집하여 targetPort 필드의 값
을
수정합니다.$ oc edit route -n <namespace> <el-route_name>
예: 기존 이벤트 리스너 경로
... spec: host: el-event-listener-q8c3w5-test-upgrade1.apps.ve49aws.aws.ospqa.com port: targetPort: 8000 to: kind: Service name: el-event-listener-q8c3w5 weight: 100 wildcardPolicy: None ...
예: 수정된 이벤트 리스너 경로
... spec: host: el-event-listener-q8c3w5-test-upgrade1.apps.ve49aws.aws.ospqa.com port: targetPort: http-listener to: kind: Service name: el-event-listener-q8c3w5 weight: 100 wildcardPolicy: None ...
3.1.7.8.2. 해결된 문제
-
이번 업데이트 이전에는 네임스페이스가
Terminating
상태인 경우 RBAC 리소스를 생성할 때 Operator에 실패했습니다. 이번 업데이트를 통해 Operator는종료
상태의 네임스페이스를 무시하고 RBAC 리소스를 생성합니다. - 이번 업데이트 이전에는 연결된 Tekton 컨트롤러의 릴리스 버전을 지정하는 주석이 없기 때문에 작업이 실패하거나 다시 시작됩니다. 이번 업데이트를 통해 적절한 주석이 포함되어 있으며 작업이 실패 또는 재시작 없이 실행됩니다.
3.1.8. Red Hat OpenShift Pipelines General Availability 1.5 릴리스 정보
Red Hat OpenShift Pipelines General Availability (GA) 1.5는 이제 OpenShift Container Platform 4.8에서 사용할 수 있습니다.
3.1.8.1. 호환성 및 지원 매트릭스
이 릴리스의 일부 기능은 현재 기술 프리뷰 에 있습니다. 이러한 실험적 기능은 프로덕션용이 아닙니다.
아래 표에서 기능은 다음과 같은 상태로 표시되어 있습니다.
TP | 기술 프리뷰 |
GA | 정식 출시일 (GA) |
해당 기능은 Red Hat Customer Portal의 지원 범위를 참조하십시오.
표 3.2. 호환성 및 지원 매트릭스
기능 | 버전 | 지원 상태 |
---|---|---|
Pipeline | 0.24 | GA |
CLI | 0.19 | GA |
카탈로그 | 0.24 | GA |
Trigger | 0.14 | TP |
파이프 라인 리소스 | - | TP |
질문이나 의견이 있으시면 제품팀에 이메일(pipelines-interest@redhat.com)로 보내주시기 바랍니다.
3.1.8.2. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.5의 새로운 기능도 소개합니다.
대상 네임스페이스의 cron 작업으로 파이프라인 실행 및 작업 실행이 자동으로 제거됩니다. cron 작업에서는
IMAGE_JOB_PRUNER_TKN
환경 변수를 사용하여tkn image
값을 가져옵니다. 이번 개선된 기능을 통해TektonConfig
사용자 정의 리소스에 다음 필드가 도입되었습니다.... pruner: resources: - pipelinerun - taskrun schedule: "*/5 * * * *" # cron schedule keep: 2 # delete all keeping n ...
OpenShift Container Platform에서는
TektonConfig
사용자 정의 리소스에서 새 매개변수clusterTasks
및pipelinesTemplates
값을 수정하여 Tekton 애드온 구성 요소 설치를 사용자 지정할 수 있습니다.apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: profile: all targetNamespace: openshift-pipelines addon: params: - name: clusterTasks value: "true" - name: pipelineTemplates value: "true" ...
사용자 지정은
TektonConfig
를 사용하여 애드온을 만들거나 Techton 애드온을 사용하여 직접 만드는 경우에 허용됩니다. 그러나 매개 변수가 전달되지 않으면 컨트롤러는 기본값을 사용하여 매개 변수를 추가합니다.참고-
TektonConfig
사용자 지정 리소스를 사용하여 추가 기능이 생성되고Addon
사용자 정의 리소스의 뒷부분에서 매개변수 값을 변경하면TektonConfig
사용자 지정 리소스의 값이 변경 사항을 덮어씁니다. -
clusterTasks
매개변수 값이true
인 경우에만pipelinesTemplates
매개변수의 값을true
로 설정할 수 있습니다.
-
enableMetrics
매개변수는TektonConfig
사용자 지정 리소스에 추가됩니다. 이를 사용하여 OpenShift Container Platform용 Tekton Pipelines의 일부인 서비스 모니터를 비활성화할 수 있습니다.apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: profile: all targetNamespace: openshift-pipelines pipeline: params: - name: enableMetrics value: "true" ...
- 프로세스 수준에서 메트릭을 캡처하는 EventListener OpenCensus 메트릭이 추가되었습니다.
- 트리거에 레이블 선택기가 있습니다. 레이블을 사용하여 이벤트 리스너에 대한 트리거를 구성할 수 있습니다.
인터셉터 등록에 대한
ClusterInterceptor
사용자 정의 리소스 정의가 추가되어 연결할 수 있는 새로운Interceptor
유형을 등록할 수 있습니다. 또한 다음과 같은 관련 변경 사항이 적용됩니다.-
트리거 사양에서는 클러스터 인터셉터를 참조하기 위해
ref
필드를 포함하는 새 API를 사용하여 인터셉터를 구성할 수 있습니다. 또한params
필드를 사용하여 처리를 위해 인터셉터에 전달되는 매개변수를 추가할 수 있습니다. -
번들 인터셉터 CEL, GitHub, GitLab, BitBucket이 마이그레이션되었습니다. 새
ClusterInterceptor
사용자 정의 리소스 정의를 사용하여 구현됩니다. -
코어 인터셉터는 새 형식으로 마이그레이션되고 이전 구문을 사용하여 생성된 새 트리거가 새
ref
또는params
기반 구문으로 자동 전환됩니다.
-
트리거 사양에서는 클러스터 인터셉터를 참조하기 위해
-
로그를 표시하는 동안 작업 이름 또는 단계의 접두사를 비활성화하려면
log
명령에--prefix
옵션을 사용합니다. -
특정 구성 요소의 버전을 표시하려면
tkn version
명령에서 새--component
플래그를 사용합니다. -
tkn hub check-upgrade
명령이 추가되고 파이프라인 버전을 기반으로 다른 명령이 수정되었습니다. 또한search
명령 출력에 카탈로그 이름이 표시됩니다. -
선택적 작업 공간에 대한 지원이
start
명령에 추가됩니다. -
plugins
디렉토리에 플러그인이 없으면 현재 경로에서 검색됩니다. tkn start [task | clustertask | pipeline]
명령은 대화식으로 시작하고 기본 매개변수를 지정하는 경우에도params
값을 요청합니다. 대화식 프롬프트를 중지하려면 명령을 호출할 때--use-param-defaults
플래그를 전달합니다. 예를 들면 다음과 같습니다.$ tkn pipeline start build-and-deploy \ -w name=shared-workspace,volumeClaimTemplateFile=https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/01_pipeline/03_persistent_volume_claim.yaml \ -p deployment-name=pipelines-vote-api \ -p git-url=https://github.com/openshift/pipelines-vote-api.git \ -p IMAGE=image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/pipelines-vote-api \ --use-param-defaults
-
version
필드는tkn task describe
명령에 추가됩니다. -
TriggerTemplate
또는TriggerBinding
또는ClusterTriggerBinding
또는Eventlistener
와 같은 리소스를 자동으로 선택하는 옵션은 하나만 있는 경우describe
명령에 추가됩니다. -
tkn pr describe
명령에 건너뛰는 작업의 섹션이 추가됩니다. -
tkn clustertask logs
에 대한 지원이 추가되었습니다. -
config.yaml
에서 YAML 병합 및 변수가 제거됩니다. 또한kustomize
및ytt
와 같은 툴에서release.yaml
파일을 더 쉽게 사용할 수 있습니다. - 리소스 이름에 점 문자(".")가 포함되도록 지원이 추가되었습니다.
-
PodTemplate
사양의hostAliases
어레이는 호스트 이름 확인의 Pod 수준 재정의에 추가됩니다. 이를 위해/etc/hosts
파일을 수정합니다. -
$(tasks.status)
변수가 도입되어 작업의 집계 실행 상태에 액세스합니다. - Windows용 진입점 바이너리 빌드가 추가되었습니다.
3.1.8.3. 더 이상 사용되지 않는 기능
when
표현식에서 작성된 필드에 대한 지원에서는 PascalCase가 제거되었습니다.when
표현식은 소문자로 작성된 필드만 지원합니다.참고Tekton Pipelines
v0.16(Operator v
)에서1.2.x
when
표현식과 함께 파이프라인을 적용한 경우 다시 적용해야 합니다.Red Hat OpenShift Pipelines Operator를
v1.5
로 업그레이드하면openshift-client
및openshift-client-v-1-5-0
클러스터 작업에SCRIPT
매개변수가 있습니다. 그러나ARGS
매개변수와git
리소스는openshift-client
클러스터 작업의 사양에서 제거됩니다. 이는 중단된 변경 사항이며ClusterTask
리소스의name
필드에 특정 버전이 없는 클러스터 작업만 원활하게 업그레이드됩니다.파이프라인 실행이 중단되지 않도록 하려면 업그레이드 후
ARGS
매개변수에 지정된 값을 클러스터 작업의SCRIPT
매개변수로 이동하기 때문에SCRIPT
매개변수를 사용합니다. 예를 들면 다음과 같습니다.... - name: deploy params: - name: SCRIPT value: oc rollout status <deployment-name> runAfter: - build taskRef: kind: ClusterTask name: openshift-client ...
Red Hat OpenShift Pipelines Operator
v1.4
에서v1.5
로 업그레이드하면TektonConfig
사용자 정의 리소스가 설치된 프로필 이름이 변경됩니다.표 3.3.
TektonConfig
사용자 정의 리소스의 프로필Pipeline 1.5의 프로필 Pipelines 1.4의 해당 프로필 설치된 Tekton 구성 요소 모두(기본 프로필)
모두(기본 프로필)
파이프라인, 트리거, 애드온
Basic
Default
파이프라인, 트리거
Lite
Basic
파이프라인
참고TektonConfig
사용자 정의 리소스의config
인스턴스에서profile: all
을 사용한 경우 리소스 사양을 변경할 필요가 없습니다.그러나 설치된 Operator가 업그레이드 전에 Default 또는 Basic 프로필에 있는 경우 업그레이드 후
TektonConfig
사용자 정의 리소스의config
인스턴스를 편집해야 합니다. 예를 들어 구성이 업그레이드 전에profile: basic
인 경우 Pipelines 1.5로 업그레이드한 후profile: lite
인지 확인합니다.disable-home-env-overwrite
및disable-working-dir-overwrite
필드는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다. 이번 릴리스에서는 이전 버전과의 호환성을 위해 이러한 플래그의 기본값이true
로 설정됩니다.참고다음 릴리스에서는
HOME
환경 변수가 자동으로/tekton/home
으로 설정되지 않으며 작업 실행을 위해 기본 작업 디렉터리가/workspace
로 설정되지 않습니다. 이러한 기본값은 단계의 이미지 Dockerfile로 설정된 값과 충돌합니다.-
ServiceType
및podTemplate
필드는EventListener
사양에서 제거됩니다. - 컨트롤러 서비스 계정은 더 이상 네임스페이스를 나열하고 감시하기 위한 클러스터 전체 권한을 요청하지 않습니다.
EventListener
리소스의 상태에는Ready
라는 새로운 조건이 있습니다.참고나중에
EventListener
리소스의 기타 상태 조건이 더 이상 사용되지 않고Ready
상태 조건이 사용됩니다.-
EventListener
응답의eventListener
및namespace
필드는 더 이상 사용되지 않습니다. 대신eventListenerUID
필드를 사용합니다. replicas
필드는EventListener
사양에서 더 이상 사용되지 않습니다. 대신spec.replicas
필드가KubernetesResource
사양의spec.resources.kubernetesResource.replicas
로 이동됩니다.참고replicas
필드는 향후 릴리스에서 제거됩니다.-
코어 인터셉터를 구성하는 이전 방법은 더 이상 사용되지 않습니다. 그러나 향후 릴리스에서 제거될 때까지 계속 작동합니다. 대신
Trigger
리소스의 인터셉터가 새로운ref
및params
기반 구문을 사용하여 구성됩니다. 결과 기본 웹훅은 새 트리거에 대해 이전 구문의 사용법을 새 구문으로 자동 전환합니다. -
ClusterRoleBinding
리소스에 대해 더 이상 사용되지않는rbac.authorization.k8s.io/v1beta1
대신rbac.authorization.k8s.io/v1
을 사용합니다. -
클러스터 역할에서는
serviceaccounts
,secrets
,configmaps
,limitranges
와 같은 리소스에 대한 클러스터 전체 쓰기 권한이 제거됩니다. 또한deployments
,statefulsets
,deployment/finalizers
와 같은 리소스에 대한 클러스터 전체 액세스도 제거됩니다. -
caching.internal.knative.dev
그룹의image
사용자 지정 리소스 정의는 Tekton에서 더 이상 사용하지 않으며 이 릴리스에서 제외되었습니다.
3.1.8.4. 확인된 문제
git-cli 클러스터 작업은
/root
가 사용자의 홈 디렉터리로 예상되는 alpine/git 기본 이미지에서 빌드됩니다. 그러나git-cli
클러스터 작업에는 명시적으로 설정되어 있지 않습니다.Tekton에서 달리 지정하지 않는 한, Tekton에서 기본 홈 디렉토리는 작업의 모든 단계에 대해
/tekton/home
으로 덮어씁니다. 기본 이미지의$HOME
환경 변수를 덮어쓰면git-cli
클러스터 작업이 실패합니다.이 문제는 다음 릴리스에서 수정될 예정입니다. Red Hat OpenShift Pipelines 1.5 및 이전 버전의 경우 다음 해결 방법 중 하나를 사용하여
git-cli
클러스터 작업이 실패하지 않도록 할 수 있습니다.단계에서
$HOME
환경 변수를 설정하여 덮어쓰지 않도록 합니다.-
[선택 사항] Operator를 사용하여 Red Hat OpenShift Pipelines를 설치한 경우
git-cli
클러스터 작업을 별도의 작업에 복제합니다. 이 방법을 사용하면 Operator에서 클러스터 작업의 변경 사항을 덮어쓰지 않습니다. -
oc edit clustertasks git-cli
명령을 실행합니다. 예상되는
HOME
환경 변수를 단계 YAML에 추가합니다.... steps: - name: git env: - name: HOME value: /root image: $(params.BASE_IMAGE) workingDir: $(workspaces.source.path) ...
주의Operator가 설치한 Red Hat OpenShift Pipelines의 경우
HOME
환경 변수를 변경하기 전에git-cli
클러스터 작업을 별도의 작업으로 복제하지 않으면 Operator 조정 중에 변경 사항을 덮어씁니다.
-
[선택 사항] Operator를 사용하여 Red Hat OpenShift Pipelines를 설치한 경우
feature-flags
구성 맵에서HOME
환경 변수 덮어쓰기를 비활성화합니다.-
oc edit -n openshift-pipelines configmap feature-flags
명령을 실행합니다. disable-home-env-overwrite
플래그 값을true
로 설정합니다.주의- Operator를 사용하여 Red Hat OpenShift Pipelines를 설치한 경우 Operator 조정 중에 변경 사항을 덮어씁니다.
-
disable-home-env-overwrite
플래그의 기본값을 수정하면 모든 작업의 기본 동작을 변경하므로 다른 작업과 클러스터 작업이 중단될 수 있습니다.
-
파이프라인의 기본 서비스 계정이 사용될 때
HOME
환경 변수의 덮어쓰기가 수행되므로git-cli
클러스터 작업에 다른 서비스 계정을 사용합니다.- 새로운 서비스 계정을 생성합니다.
- 생성한 서비스 계정에 Git 시크릿을 연결합니다.
- 작업 또는 파이프라인을 실행하는 동안 서비스 계정을 사용합니다.
-
IBM Power Systems, IBM Z 및 LinuxONE에서
s2i-dotnet
클러스터 작업 및tkn hub
명령은 지원되지 않습니다. -
Maven 및 Jib-Maven 클러스터 작업을 실행할 때 기본 컨테이너 이미지는 Intel (x86) 아키텍처에서만 지원됩니다. 따라서 IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x) 클러스터에서 작업이 실패합니다. 이 문제를 해결하려면
MAVEN_IMAGE
매개변수 값을maven:3.6.3-adoptopenjdk-11
로 설정하여 사용자 정의 이미지를 지정할 수 있습니다.
3.1.8.5. 해결된 문제
-
dag
작업의when
표현식은 다른 작업의 실행상태 ($(tasks.<pipelineTask>.status)
)에 액세스하는 컨텍스트 변수를 지정할 수 없습니다. -
PipelineRun
리소스가 신속하게 삭제되고 다시 생성되는 경우volumeClaimTemplate
PVC를 삭제하여 생성된 경쟁 조건을 방지할 수 있으므로 소유자 이름 대신 소유자 UID를 사용합니다. -
루트가 아닌 사용자가 트리거한
build-base
이미지의pullrequest-init
에 대한 새 Dockerfile이 추가됩니다. -
파이프라인 또는 작업을
-f
옵션으로 실행하고 정의의param
에type
이 정의되지 않은 경우 파이프라인 또는 작업 실행이 자동으로 실패하는 대신 유효성 검사 오류가 생성됩니다. -
tkn start [task | pipeline | clustertask]
명령의 경우--workspace
플래그에 대한 설명이 일관되게 표시됩니다. - 매개 변수를 구문 분석하는 동안 빈 배열이 발생하는 경우 해당 대화형 도움말이 빈 문자열로 표시됩니다.
3.1.9. Red Hat OpenShift Pipelines General Availability 1.4 릴리스 정보
Red Hat OpenShift Pipelines General Availability (GA)는 이제 OpenShift Container Platform 4.7에서 사용할 수 있습니다.
안정적인 프리뷰 Operator 채널 외에도 Red Hat OpenShift Pipelines Operator 1.4.0에는 ocp-4.6, ocp-4.5 및 ocp-4.4 사용 중단 채널이 함께 제공됩니다. 이러한 더 이상 사용되지 않는 채널과 이에 대한 지원은 다음 Red Hat OpenShift Pipelines 릴리스에서 제거됩니다.
3.1.9.1. 호환성 및 지원 매트릭스
이 릴리스의 일부 기능은 현재 기술 프리뷰 에 있습니다. 이러한 실험적 기능은 프로덕션용이 아닙니다.
아래 표에서 기능은 다음과 같은 상태로 표시되어 있습니다.
TP | 기술 프리뷰 |
GA | 정식 출시일 (GA) |
해당 기능은 Red Hat Customer Portal의 지원 범위를 참조하십시오.
표 3.4. 호환성 및 지원 매트릭스
기능 | 버전 | 지원 상태 |
---|---|---|
파이프라인 | 0.22 | GA |
CLI | 0.17 | GA |
카탈로그 | 0.22 | GA |
Trigger | 0.12 | TP |
파이프 라인 리소스 | - | TP |
질문이나 의견이 있으시면 제품팀에 이메일(pipelines-interest@redhat.com)로 보내주시기 바랍니다.
3.1.9.2. 새로운 기능
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.4의 새로운 기능도 소개합니다.
사용자 지정 작업에는 다음과 같은 향상된 기능이 있습니다.
- 파이프라인 결과는 사용자 지정 작업에서 생성된 결과를 참조할 수 있습니다.
- 사용자 지정 작업에서는 작업 영역, 서비스 계정 및 Pod 템플릿을 사용하여 더 복잡한 사용자 지정 작업을 빌드할 수 있습니다.
finally
작업에는 다음과 같은 향상된 기능이 있습니다.-
finally
작업에서when
표현식이 지원되므로 효율적으로 보호되는 실행 및 작업 재사용성을 개선할 수 있습니다. finally
작업에서는 동일한 파이프라인 내의 모든 작업 결과를 사용하도록 구성할 수 있습니다.참고OpenShift Container Platform 4.7 웹 콘솔에서
when
표현식 및finally
작업을 지원하지 않습니다.
-
-
dockercfg
또는dockerconfigjson
유형의 여러 보안에 대한 지원이 런타임 시 인증에 추가되었습니다. -
git-clone
작업을 사용하여 스파스-체크아웃을 지원하는 기능이 추가되었습니다. 이를 통해 리포지토리의 하위 집합만 로컬 복사본으로 복제할 수 있으며 복제된 리포지토리의 크기를 제한할 수 있습니다. - 실제로 시작하지 않고 보류 중인 상태에서 파이프라인 실행을 생성할 수 있습니다. 로드가 많은 클러스터에서 Operator는 파이프라인 실행 시작 시간을 제어할 수 있습니다.
-
컨트롤러에 대해
SYSTEM_NAMESPACE
환경 변수를 수동으로 설정했는지 확인합니다. 이전에는 기본적으로 설정되었습니다. -
이제 루트가 아닌 사용자가 파이프라인의 빌드-기반 이미지에 추가되어
git-init
가 루트가 아닌 사용자로 리포지토리를 복제할 수 있습니다. - 파이프라인 실행이 시작되기 전에 해결된 리소스 간 종속성을 확인하는 지원이 추가되어 있습니다. 파이프라인의 모든 결과 변수가 유효해야 하며 파이프라인의 선택적 작업 공간을 파이프라인 실행을 시작하기 위해 필요한 작업으로만 전달할 수 있습니다.
- 컨트롤러 및 Webhook는 루트가 아닌 그룹으로 실행되며, 보안을 강화하기 위해 해당 기능이 제거되었습니다.
-
tkn pr logs
명령을 사용하여 재시도된 작업 실행에 대한 로그 스트림을 확인할 수 있습니다. -
tkn tr delete
명령에서--clustertask
옵션을 사용하여 특정 클러스터 작업과 연관된 모든 작업을 삭제할 수 있습니다. -
새
customResource
필드를 도입하여EventListener
리소스와 함께 Knative 서비스 사용에 대한 지원이 추가되었습니다. - 이벤트 페이로드에서 JSON 형식을 사용하지 않으면 오류 메시지가 표시됩니다.
-
GitLab, BitBucket 및 GitHub와 같은 소스 제어 인터셉터는 이제 새로운
InterceptorRequest
또는InterceptorResponse
유형 인터페이스를 사용합니다. -
JSON 개체 또는 배열을 문자열에 인코딩할 수 있도록 새로운 CEL 함수
marshalJSON
이 구현됩니다. -
CEL 및 소스 제어 코어 인터셉터를 제공하는 HTTP 처리기가 추가되었습니다.
tekton-pipelines
네임스페이스에 배포된 단일 HTTP 서버에 4개의 코어 인터셉터를 패키징합니다.EventListener
오브젝트는 HTTP 서버를 통해 이벤트를 인터셉터로 전달합니다. 각 인터셉터는 다른 경로에서 사용할 수 있습니다. 예를 들어/cel
경로에서 CEL 인터셉터를 사용할 수 있습니다. pipelines-scc
SCC(Security Context Constraint)는 파이프라인의 기본pipeline
서비스 계정과 함께 사용됩니다. 이 새 서비스 계정은anyuid
와 유사하지만 OpenShift Container Platform 4.7의 SCC에 대해 YAML에 정의된 것과 약간의 차이점이 있습니다.fsGroup: type: MustRunAs
3.1.9.3. 사용되지 않는 기능
-
파이프라인 리소스 스토리지의
build-gcs
하위 유형과gcs-fetcher
이미지는 지원되지 않습니다. -
클러스터 작업의
taskRun
필드에서tekton.dev/task
레이블이 제거됩니다. -
Webhook의 경우
admissionReviewVersions
필드에 해당하는v1beta1
값이 제거됩니다. -
빌드 및 배포를 위한
creds-init
도우미 이미지가 제거됩니다. 트리거 사양 및 바인딩에서는
template.ref
를 사용하도록 더 이상 사용되지 않는 필드template.name
이 제거됩니다.ref
필드를 사용하려면 모든eventListener
정의를 업데이트해야 합니다.참고OpenShift Pipelines 1.3.x 및 이전 버전에서 OpenShift Pipelines 1.4.0으로 업그레이드하면
template.name
필드의 사용할 수 없으므로 이벤트 리스너가 중단됩니다. 이러한 경우 OpenShift Pipelines 1.4.1을 사용하여 복원된template.name
필드를 사용할 수 있습니다.-
EventListener
사용자 정의 리소스/개체의 경우Resource
가 사용되며PodTemplate
및ServiceType
필드는 더 이상 사용되지 않습니다. - 더 이상 사용되지 않는 사양 스타일 내장 바인딩이 제거됩니다.
-
spec
필드는triggerSpecBinding
에서 제거됩니다. - 이벤트 ID 표현은 5자의 임의의 문자열에서 UUID로 변경됩니다.
3.1.9.4. 확인된 문제
- 개발자 화면에서 파이프라인 지표 및 트리거 기능은 OpenShift Container Platform 4.7.6 이상 버전에서만 사용할 수 있습니다.
-
IBM Power Systems, IBM Z 및 LinuxONE에서는
tkn hub
명령이 지원되지 않습니다. -
IBM Power Systems(ppc64le), IBM Z 및 LinuxONE(s390x) 클러스터에서 Maven 및 Jib Maven 클러스터 작업을 실행하는 경우
MAVEN_IMAGE
매개변수 값을maven:3.6.3-adoptopenjdk-11
으로 설정합니다. 트리거 바인딩에 다음 구성이 있는 경우 JSON 형식이 잘못 처리되어 발생하는 오류를 트리거합니다.
params: - name: github_json value: $(body)
문제를 해결하려면 다음을 수행합니다.
-
트리거 v0.11.0 이상을 사용하는 경우
marshalJSON
CEL 함수를 사용하여 JSON 개체 또는 배열을 가져와 해당 오브젝트 또는 배열의 JSON 인코딩을 문자열로 반환합니다. 이전 트리거 버전을 사용하는 경우 트리거 템플릿에 다음 주석을 추가합니다.
annotations: triggers.tekton.dev/old-escape-quotes: "true"
-
트리거 v0.11.0 이상을 사용하는 경우
- OpenShift Pipelines 1.3.x에서 1.4.x로 업그레이드하는 경우 경로를 다시 생성해야 합니다.
3.1.9.5. 해결된 문제
-
이전에는 클러스터 작업의 작업 실행에서
tekton.dev/task
레이블이 제거되었으며tekton.dev/clusterTask
레이블이 도입되었습니다. 해당 변경으로 인한 문제는clustertask describe
및delete
명령을 수정하여 해결됩니다. 또한 작업의lastrun
기능이 수정되어 이전 버전의 파이프라인의 작업 실행에 적용되는tekton.dev/task
레이블의 문제를 해결합니다. -
대화형
tkn pipeline start pipelinename
을 수행할 때PipelineResource
가 대화형으로 생성됩니다. 리소스 상태가nil
이 아닌 경우tkn p start
명령은 리소스 상태를 출력합니다. -
이전에는
tekton.dev/task=name
레이블이 클러스터 작업에서 생성된 작업 실행에서 제거되었습니다. 이번 수정에서는tkn clustertask start
명령을--last
플래그로 수정하여 생성된 작업 실행에서tekton.dev/task=name
라벨을 확인합니다. -
작업에서 인라인 작업 사양을 사용하는 경우 이제
tkn pipeline describe
명령을 실행할 때 해당 작업 실행이 파이프라인에 포함되고, 작업 이름이 포함된 것으로 반환됩니다. -
tkn version
명령은 구성된kubeConfiguration namespace
또는 클러스터에 대한 액세스없이 설치된 Tekton CLI 툴 버전을 표시하도록 수정되었습니다. -
인수가 예기치 않은 것이거나 두 개 이상의 인수가 사용되는 경우
tkn completion
명령에서 오류가 발생합니다. -
이전에는 파이프라인 사양에 중첩된
finally
작업으로 인해v1alpha1
버전으로 변환되고v1beta1
버전으로 복원된finally
작업이 손실되었습니다. 변환 중에 발생하는 이 오류는 잠재적인 데이터 손실을 방지하기 위해 수정되었습니다. 파이프라인은 이제 파이프라인 사양에 중첩된finally
작업에서 실행되며 알파 버전에 저장되지만 나중에 역직렬화됩니다. -
이전에는 서비스 계정에
{}
로secret
필드가 있는 경우 Pod 생성에 오류가 발생했습니다. 빈 시크릿 이름을 가진 GET 요청이 오리소스 이름을 비워 둘 수 없다는 오류를 반환했기 때문에 이 작업은CouldntGetTask
로 실패합니다. 이 문제는kubeclient
GET 요청에서 시크릿 이름이 비어 있지 않도록 방지하여 해결되었습니다. -
이제
v1beta1
API 버전이 있는 파이프라인은finally
작업을 손실하지 않고v1alpha1
버전과 함께 요청할 수 있습니다. 반환된v1alpha1
버전을 적용하면 리소스가v1beta1
로 저장되고finally
섹션은 원래 상태로 복원됩니다. -
이전에는 컨트롤러의 설정되지 않은
selfLink
필드로 인해 Kubernetes v1.20 클러스터에서 오류가 발생했습니다. 임시 수정으로CloudEvent
소스 필드는 자동으로 채워진selfLink
필드의 값이 없이 현재 소스 URI와 일치하는 값으로 설정됩니다. -
이전에는
gcr.io
와 같은 점이 있는 시크릿 이름으로 인해 작업 실행 생성에 실패했습니다. 이는 내부적으로 볼륨 마운트 이름의 일부로 사용되는 시크릿 이름 때문에 발생했습니다. 볼륨 마운트 이름은 RFC1123 DNS 레이블을 준수하고, 이름의 일부로 점을 허용하지 않습니다. 이 문제는 점을 대시로 대체하여 읽을 수 있는 이름을 만들어 해결되었습니다. -
이제
finally
작업에서 컨텍스트 변수의 유효성을 검사합니다. -
이전 버전에서는 작업 실행 조정기에서 생성된 Pod 이름을 포함하는 이전 상태 업데이트가 없는 작업 실행을 통과하면 작업 실행 조정기는 작업 실행과 연결된 Pod를 나열했습니다. 작업 실행 조정기에서는 Pod에 전파된 작업 실행 레이블을 사용하여 Pod를 찾았습니다. 작업 실행 중에 이러한 레이블을 변경하면 코드에서 기존 pod를 찾지 못했습니다. 결과적으로 중복된 pod가 생성되었습니다. 이 문제는 Pod를 찾을 때 작업 실행 조정기를
tekton.dev/taskRun
Tekton- controlled 라벨만 사용하도록 변경하여 해결되었습니다. - 이전 버전에서는 파이프라인에서 선택적 작업 영역을 수락하여 파이프라인 작업으로 전달하면 누락된 작업 공간 바인딩이 선택적 작업 공간에 유효한 상태인 경우에도 작업 영역을 제공하지 않은 경우 실행 조정기가 중지되어 오류가 발생했습니다. 이 문제는 선택적 작업 영역을 제공하지 않아도 파이프라인 실행 조정기에서 작업 실행을 생성하지 못하도록 하여 해결되었습니다.
- 단계 상태의 정렬 순서는 단계 컨테이너의 순서와 일치합니다.
-
이전에는 Pod에
CreateContainerConfigError
가 발생할 때 작업 실행 상태가unknown
으로 설정되어 이로 인해 Pod가 시간 초과될 때까지 작업 및 파이프라인이 실행되었습니다. 이 문제는 Pod에CreateContainerConfigError
이유가 발생할 때 작업이 실패로 설정되도록 작업 실행 상태를false
로 설정하여 해결되었습니다. -
이전에는 파이프라인 실행이 완료된 후 첫 번째 조정 시 파이프라인 결과가 해결되었습니다. 이로 인해 해결에 실패하여 파이프라인 실행의
Succeeded
조건을 덮어쓸 수 있습니다. 결과적으로 최종 상태 정보가 손실되어 파이프라인의 작동 조건을 모니터링하는 모든 서비스에 혼란을 줄 수 있습니다. 이 문제는 파이프라인 실행이Succeeded
또는True
조건이 될 때 파이프라인 결과의 해결을 조정의 끝으로 이동하여 해결됩니다. - 이제 실행 상태 변수가 확인됩니다. 이렇게 하면 실행 상태에 액세스하기 위해 컨텍스트 변수를 검증하는 동안 작업 결과를 확인하는 것을 방지할 수 있습니다.
- 이전 버전에서는 잘못된 변수가 포함된 파이프라인 결과가 변수의 리터럴 표현식을 그대로 사용하여 파이프라인 실행에 추가되었습니다. 따라서 결과가 올바르게 설정되어 있는지를 평가하는 것은 쉽지 않았습니다. 이 문제는 실패한 작업 실행을 참조하는 파이프 라인 실행 결과 필터링하여 해결되었습니다. 이제 잘못된 변수가 포함된 파이프라인 결과는 파이프라인 실행에서 전혀 배출되지 않습니다.
-
tkn eventlistener describe
명령이 템플릿 없이 충돌하지 않도록 수정되었습니다. 트리거 참조에 대한 세부 정보도 표시합니다. -
OpenShift Pipelines 1.3.x 및 이전 버전에서 OpenShift Pipelines 1.4.0으로 업그레이드하면
template.name
을 사용할 수 없으므로 이벤트 리스너가 중단됩니다. OpenShift Pipelines 1.4.1에서는 트리거에서 이벤트 리스너 중단을 방지하기 위해template.name
이 복원되었습니다. -
OpenShift Pipelines 1.4.1에서는 OpenShift Container Platform 4.7 기능 및 동작에 맞게
ConsoleQuickStart
사용자 정의 리소스가 업데이트되었습니다.
3.1.10. Red Hat OpenShift Pipelines Technology Preview 1.3 릴리스 정보
3.1.10.1. 새로운 기능
이제 OpenShift Container Platform 4.7에서 Red Hat OpenShift Pipelines TP(Technology Preview) 1.3을 사용할 수 있습니다. 다음을 지원하도록 Red Hat OpenShift Pipelines TP 1.3이 업데이트되었습니다.
- Tekton Pipelines 0.19.0
-
Tekton
tkn
CLI 0.15.0 - Tekton Triggers 0.10.2
- Tekton Catalog 0.19.0 기반 클러스터 작업
- OpenShift Container Platform 4.7의 IBM Power Systems
- OpenShift Container Platform 4.7의 IBM Z 및 LinuxONE
다음 섹션에서는 수정 및 안정성 개선 사항 외에 Red Hat OpenShift Pipelines 1.3의 새로운 기능도 소개합니다.
3.1.10.1.1. 파이프라인
- S2I 및 Buildah 작업과 같은 이미지를 빌드하는 작업에서 이제 이미지 SHA를 포함하는 빌드된 이미지의 URL을 내보냅니다.
-
Conditions
CRD(사용자 정의 리소스 정의)가 더 이상 사용되지 않기 때문에 사용자 정의 작업을 참조하는 파이프라인 작업에서 조건이 비활성화되었습니다. -
spec.steps[].imagePullPolicy
및spec.sidecar[].imagePullPolicy
의Task
CRD에 변수 확장이 추가되었습니다. -
disable-creds-init
기능 플래그를true
로 설정하여 Tekton의 기본 제공 자격 증명 메커니즘을 비활성화할 수 있습니다. -
해결된 When 표현식이
PipelineRun
구성의Status
필드에 있는Skipped Tasks
및Task Runs
섹션에 나열됩니다. -
git init
명령으로 재귀 하위 모듈을 복제할 수 있습니다. -
Task
CR 작성자가Task
사양에 있는 단계의 타임아웃을 지정할 수 있습니다. -
진입점 이미지의 기반을
distroless/static:nonroot
이미지로 하여 기본 이미지에 있는cp
명령에 의존하지 않고도 대상에 자체 복사 모드를 제공할 수 있습니다. -
구성 플래그
require-git-ssh-secret-known-hosts
를 사용하여 Git SSH 보안에서 알려진 호스트를 생략하지 않도록 할 수 있습니다. 플래그 값이true
로 설정된 경우 Git SSH 보안에known_host
필드를 포함해야 합니다. 플래그 기본값은false
입니다. - 선택적 작업 공간의 개념이 도입되었습니다. 작업 또는 파이프라인에서 작업 공간을 선택적으로 선언하고 작업 공간 존재 여부에 따라 조건부로 동작을 변경할 수 있습니다. 작업 실행 또는 파이프라인 실행에서도 해당 작업 공간을 생략하여 작업 또는 파이프라인 동작을 수정할 수 있습니다. 기본 작업 실행 작업 공간은 생략된 선택적 작업 공간 대신 추가되지 않습니다.
- Tekton의 자격 증명 초기화 과정에서 SSH가 아닌 URL과 함께 사용되는 SSH 자격 증명을 감지하고 Git 파이프라인 리소스에서 그 반대의 경우도 마찬가지이며, 단계 컨테이너에 경고를 기록합니다.
- Pod 템플릿에서 지정한 유사성을 유사성 도우미에서 덮어쓰는 경우 작업 실행 컨트롤러에서 경고 이벤트를 내보냅니다.
- 작업 실행이 완료되면 작업 실행 조정기에서 내보낸 클라우드 이벤트에 대한 지표를 기록합니다. 여기에는 재시도 횟수가 포함됩니다.
3.1.10.1.2. Pipeline CLI
-
tkn condition list
,tkn triggerbinding list
,tkn eventlistener list
,tkn clustertask list
,tkn clustertriggerbinding list
명령에--no-headers flag
에 대한 지원이 추가되었습니다. -
--last
또는--use
옵션은 함께 사용 시--prefix-name
및--timeout
옵션을 덮어씁니다. -
EventListener
로그를 볼 수 있도록tkn eventlistener logs
명령이 추가되었습니다. -
tekton hub
명령이tkn
CLI에 통합되었습니다. -
--nocolour
옵션이--no-color
로 변경되었습니다. -
tkn triggertemplate list
,tkn condition list
,tkn triggerbinding list
,tkn eventlistener list
명령에--all-namespaces
플래그가 추가되었습니다.
3.1.10.1.3. Trigger
-
EventListener
템플릿에 리소스 정보를 지정할 수 있습니다. -
EventListener
서비스 계정에 모든 트리거 리소스에 대한get
동사 외에list
및watch
동사도 있어야 합니다. 따라서Listers
를 사용하여EventListener
,Trigger
,TriggerBinding
,TriggerTemplate
,ClusterTriggerBinding
리소스에서 데이터를 가져올 수 있습니다. 이 기능을 사용하여 여러 정보원을 지정하지 않고Sink
오브젝트를 생성하고 API 서버에 직접 호출할 수 있습니다. -
변경 불가능한 입력 이벤트 본문을 지원하기 위해 새로운
Interceptor
인터페이스가 추가되었습니다. 인터셉터에서 새extensions
필드에 데이터 또는 필드를 추가할 수는 있지만 입력 본문을 수정하여 변경 불가능으로 설정할 수는 없습니다. CEL 인터셉터는 이 새로운Interceptor
인터페이스를 사용합니다. -
namespaceSelector
필드가EventListener
리소스에 추가되었습니다. 이 필드는EventListener
리소스에서 이벤트 처리를 위해Trigger
오브젝트를 가져올 수 있는 네임스페이스를 지정하는 데 사용합니다.namespaceSelector
필드를 사용하려면EventListener
서비스 계정에 클러스터 역할이 있어야 합니다. -
트리거
EventListener
리소스에서eventlistener
Pod에 대한 종단 간 보안 연결을 지원합니다. -
"
를\"
로 교체하여TriggerTemplates
리소스의 이스케이프 매개변수 동작이 제거되었습니다. -
Kubernetes 리소스를 지원하는 새로운
resources
필드가EventListener
사양의 일부로 도입되었습니다. - ASCII 문자열의 대문자 및 소문자를 지원하는 CEL 인터셉터의 새 기능이 추가되었습니다.
-
트리거의
name
및value