5.3. Jenkins에서 OpenShift Pipelines 또는 Tekton으로 마이그레이션


Tekton 프로젝트를 기반으로 하는 클라우드 네이티브 CI/CD 환경인 Jenkins에서 Red Hat OpenShift Pipelines 로 CI/CD 워크플로를 마이그레이션할 수 있습니다.

5.3.1. Jenkins 및 OpenShift Pipelines 개념 비교

Jenkins 및 OpenShift Pipelines에서 사용되는 다음과 같은 동등한 용어를 검토하고 비교할 수 있습니다.

5.3.1.1. Jenkins 용어

Jenkins는 공유 라이브러리 및 플러그인을 사용하여 확장할 수 있는 선언적 및 스크립팅된 파이프라인을 제공합니다. Jenkins의 몇 가지 기본 용어는 다음과 같습니다.

  • pipeline: Groovy 구문을 사용하여 애플리케이션을 빌드, 테스트 및 배포하는 전체 프로세스를 자동화합니다.
  • Node: 스크립팅된 파이프라인을 오케스트레이션하거나 실행할 수 있는 시스템입니다.
  • Stage: 파이프라인에서 수행되는 작업의 개념적으로 구별되는 하위 집합입니다. 플러그인 또는 사용자 인터페이스는 종종 이 블록을 사용하여 작업의 상태 또는 진행 상황을 표시합니다.
  • Step: 명령 또는 스크립트를 사용하여 수행할 정확한 작업을 지정하는 단일 작업입니다.

5.3.1.2. OpenShift Pipelines 용어

OpenShift Pipelines는 선언적 파이프라인에 YAML 구문을 사용하고 작업으로 구성됩니다. OpenShift Pipelines의 몇 가지 기본 용어는 다음과 같습니다.

  • Pipeline: 일련의 직렬, 병렬 또는 둘 다에 있는 작업 세트입니다.
  • Task: 명령, 바이너리 또는 스크립트로 구성된 일련의 단계입니다.
  • PipelineRun: 하나 이상의 작업이 있는 파이프라인 실행입니다.
  • TaskRun: 하나 이상의 단계로 작업을 실행합니다.

    참고

    매개변수 및 작업 영역과 같은 입력 세트로 PipelineRun 또는 TaskRun을 시작하고 실행 결과 출력 및 아티팩트 세트가 생성됩니다.

  • Workspace: OpenShift Pipelines에서 작업 공간은 다음과 같은 목적을 제공하는 개념적 블록입니다.

    • 입력, 출력 및 빌드 아티팩트의 저장.
    • 작업 간에 데이터를 공유하는 공용 공간.
    • 시크릿에 보유된 인증 정보, 구성 맵에 저장된 구성 및 조직에서 공유하는 공통 툴의 마운트 지점.
    참고

    Jenkins에는 OpenShift Pipelines 작업 공간에 직접 해당하는 작업 공간이 없습니다. 복제된 코드 리포지토리를 저장하고 기록 및 아티팩트를 빌드하므로 컨트롤 노드를 작업 영역으로 간주할 수 있습니다. 작업이 다른 노드에 할당되면 복제된 코드와 생성된 아티팩트가 해당 노드에 저장되지만 제어 노드는 빌드 기록을 유지합니다.

5.3.1.3. 개념 매핑

Jenkins 및 OpenShift Pipelines의 구성 요소는 동일하지 않으며 특정 비교에서는 기술적으로 정확한 매핑을 제공하지 않습니다. Jenkins 및 OpenShift Pipelines의 다음 용어 및 개념은 일반적으로 상관 관계가 있습니다.

표 5.1. Jenkins 및 OpenShift Pipelines - 기본 비교
JenkinsOpenShift Pipelines

Pipeline

Pipeline 및 PipelineRun

Stage

Task

Step

작업의 단계

5.3.2. Jenkins에서 OpenShift Pipelines로 샘플 파이프라인 마이그레이션

다음 동등한 예제를 사용하여 Jenkins에서 OpenShift Pipelines로 파이프라인을 마이그레이션, 테스트 및 배포할 수 있습니다.

5.3.2.1. Jenkins 파이프라인

빌드, 테스트 및 배포를 위해 Groovy로 작성된 Jenkins 파이프라인을 고려하십시오.

pipeline {
   agent any
   stages {
       stage('Build') {
           steps {
               sh 'make'
           }
       }
       stage('Test'){
           steps {
               sh 'make check'
               junit 'reports/**/*.xml'
           }
       }
       stage('Deploy') {
           steps {
               sh 'make publish'
           }
       }
   }
}

5.3.2.2. OpenShift Pipelines 파이프라인

이전 Jenkins 파이프라인과 동일한 OpenShift Pipelines에서 파이프라인을 생성하려면 다음 세 가지 작업을 생성합니다.

빌드 작업 YAML 정의 파일 예

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: myproject-build
spec:
  workspaces:
  - name: source
  steps:
  - image: my-ci-image
    command: ["make"]
    workingDir: $(workspaces.source.path)

테스트 작업 YAML 정의 파일 예

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: myproject-test
spec:
  workspaces:
  - name: source
  steps:
  - image: my-ci-image
    command: ["make check"]
    workingDir: $(workspaces.source.path)
  - image: junit-report-image
    script: |
      #!/usr/bin/env bash
      junit-report reports/**/*.xml
    workingDir: $(workspaces.source.path)

배포 작업 YAML 정의 파일 예

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: myprojectd-deploy
spec:
  workspaces:
  - name: source
  steps:
  - image: my-deploy-image
    command: ["make deploy"]
    workingDir: $(workspaces.source.path)

세 가지 작업을 순차적으로 결합하여 OpenShift Pipelines에서 파이프라인을 구성할 수 있습니다.

예: 빌드, 테스트 및 배포를 위한 OpenShift Pipelines 파이프라인

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: myproject-pipeline
spec:
  workspaces:
  - name: shared-dir
  tasks:
  - name: build
    taskRef:
      name: myproject-build
    workspaces:
    - name: source
      workspace: shared-dir
  - name: test
    taskRef:
      name: myproject-test
    workspaces:
    - name: source
      workspace: shared-dir
  - name: deploy
    taskRef:
      name: myproject-deploy
    workspaces:
    - name: source
      workspace: shared-dir

5.3.3. Jenkins 플러그인에서 Tekton Hub 작업으로 마이그레이션

플러그인을 사용하여 Jenkins의 기능을 확장할 수 있습니다. OpenShift Pipelines에서 유사한 확장성을 얻으려면 Tekton Hub 에서 사용할 수 있는 작업을 사용합니다.

예를 들어 Jenkins의 git plugin 에 해당하는 Tekton Hub의 git-clone 작업을 고려하십시오.

예: Tekton Hub에서 git-clone 작업

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
 name: demo-pipeline
spec:
 params:
   - name: repo_url
   - name: revision
 workspaces:
   - name: source
 tasks:
   - name: fetch-from-git
     taskRef:
       name: git-clone
     params:
       - name: url
         value: $(params.repo_url)
       - name: revision
         value: $(params.revision)
     workspaces:
     - name: output
       workspace: source

5.3.4. 사용자 정의 작업 및 스크립트를 사용하여 OpenShift Pipelines 기능 확장

OpenShift Pipelines에서 Tekton Hub에서 올바른 작업을 찾지 못하거나 작업을 더 잘 제어해야 하는 경우 사용자 정의 작업 및 스크립트를 생성하여 OpenShift Pipelines의 기능을 확장할 수 있습니다.

예: maven test 명령을 실행하는 사용자 지정 작업

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: maven-test
spec:
  workspaces:
  - name: source
  steps:
  - image: my-maven-image
    command: ["mvn test"]
    workingDir: $(workspaces.source.path)

예: 경로를 제공하여 사용자 정의 쉘 스크립트 실행

...
steps:
  image: ubuntu
  script: |
      #!/usr/bin/env bash
      /workspace/my-script.sh
...

예: YAML 파일에 작성하여 사용자 정의 Python 스크립트 실행

...
steps:
  image: python
  script: |
      #!/usr/bin/env python3
      print(“hello from python!”)
...

5.3.5. Jenkins 및 OpenShift Pipelines 실행 모델 비교

Jenkins 및 OpenShift Pipelines는 유사한 기능을 제공하지만 아키텍처 및 실행에서는 다릅니다.

표 5.2. Jenkins 및 OpenShift Pipelines의 실행 모델 비교
JenkinsOpenShift Pipelines

Jenkins에는 컨트롤러 노드가 있습니다. Jenkins는 파이프라인을 실행하고 중앙 집중적으로 단계를 실행하거나 다른 노드에서 실행되는 작업을 오케스트레이션합니다.

OpenShift Pipelines는 서버리스 및 분산되어 있으며 실행을 위한 중앙 종속성이 없습니다.

컨테이너는 파이프라인을 통해 Jenkins 컨트롤러 노드에서 시작됩니다.

OpenShift Pipelines는 모든 단계가 pod의 컨테이너로 실행되는 '컨테이너 우선' 접근 방식을 채택합니다(Jenkins의 노드와 동일합니다).

확장성은 플러그인을 사용하여 달성합니다.

확장성은 Tekton Hub의 작업을 사용하거나 사용자 지정 작업 및 스크립트를 생성하여 달성됩니다.

5.3.6. 일반적인 사용 사례 예

Jenkins 및 OpenShift Pipelines는 다음과 같은 일반적인 CI/CD 사용 사례를 위한 기능을 제공합니다.

  • Apache Maven을 사용하여 이미지 컴파일, 빌드 및 배포
  • 플러그인을 사용하여 코어 기능 확장
  • 공유 가능한 라이브러리 및 사용자 정의 스크립트 재사용

5.3.6.1. Jenkins 및 OpenShift Pipelines에서 Maven 파이프라인 실행

이미지를 컴파일, 빌드 및 배포하기 위해 Jenkins 및 OpenShift Pipelines 워크플로에서 Maven을 사용할 수 있습니다. 기존 Jenkins 워크플로를 OpenShift Pipelines에 매핑하려면 다음 예를 고려하십시오.

예: 이미지를 컴파일하고 빌드하고 Jenkins에서 Maven을 사용하여 OpenShift에 배포합니다.

#!/usr/bin/groovy
node('maven') {
    stage 'Checkout'
    checkout scm

    stage 'Build'
    sh 'cd helloworld && mvn clean'
    sh 'cd helloworld && mvn compile'

    stage 'Run Unit Tests'
    sh 'cd helloworld && mvn test'

    stage 'Package'
    sh 'cd helloworld && mvn package'

    stage 'Archive artifact'
    sh 'mkdir -p artifacts/deployments && cp helloworld/target/*.war artifacts/deployments'
    archive 'helloworld/target/*.war'

    stage 'Create Image'
    sh 'oc login https://kubernetes.default -u admin -p admin --insecure-skip-tls-verify=true'
    sh 'oc new-project helloworldproject'
    sh 'oc project helloworldproject'
    sh 'oc process -f helloworld/jboss-eap70-binary-build.json | oc create -f -'
    sh 'oc start-build eap-helloworld-app --from-dir=artifacts/'

    stage 'Deploy'
    sh 'oc new-app helloworld/jboss-eap70-deploy.json' }

예: 이미지를 컴파일하고 빌드한 후 OpenShift Pipelines에서 Maven을 사용하여 OpenShift에 배포합니다.

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: maven-pipeline
spec:
  workspaces:
    - name: shared-workspace
    - name: maven-settings
    - name: kubeconfig-dir
      optional: true
  params:
    - name: repo-url
    - name: revision
    - name: context-path
  tasks:
    - name: fetch-repo
      taskRef:
        name: git-clone
      workspaces:
        - name: output
          workspace: shared-workspace
      params:
        - name: url
          value: "$(params.repo-url)"
        - name: subdirectory
          value: ""
        - name: deleteExisting
          value: "true"
        - name: revision
          value: $(params.revision)
    - name: mvn-build
      taskRef:
        name: maven
      runAfter:
        - fetch-repo
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: maven-settings
          workspace: maven-settings
      params:
        - name: CONTEXT_DIR
          value: "$(params.context-path)"
        - name: GOALS
          value: ["-DskipTests", "clean", "compile"]
    - name: mvn-tests
      taskRef:
        name: maven
      runAfter:
        - mvn-build
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: maven-settings
          workspace: maven-settings
      params:
        - name: CONTEXT_DIR
          value: "$(params.context-path)"
        - name: GOALS
          value: ["test"]
    - name: mvn-package
      taskRef:
        name: maven
      runAfter:
        - mvn-tests
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: maven-settings
          workspace: maven-settings
      params:
        - name: CONTEXT_DIR
          value: "$(params.context-path)"
        - name: GOALS
          value: ["package"]
    - name: create-image-and-deploy
      taskRef:
        name: openshift-client
      runAfter:
        - mvn-package
      workspaces:
        - name: manifest-dir
          workspace: shared-workspace
        - name: kubeconfig-dir
          workspace: kubeconfig-dir
      params:
        - name: SCRIPT
          value: |
            cd "$(params.context-path)"
            mkdir -p ./artifacts/deployments && cp ./target/*.war ./artifacts/deployments
            oc new-project helloworldproject
            oc project helloworldproject
            oc process -f jboss-eap70-binary-build.json | oc create -f -
            oc start-build eap-helloworld-app --from-dir=artifacts/
            oc new-app jboss-eap70-deploy.json

5.3.6.2. 플러그인을 사용하여 Jenkins 및 OpenShift Pipelines의 핵심 기능 확장

Jenkins는 광범위한 사용자 기반에 의해 수년 동안 개발 된 수많은 플러그인의 대규모 에코 시스템의 이점을 가지고 있습니다. Jenkins 플러그인 색인 에서 플러그인을 검색하고 검색할 수 있습니다.

OpenShift Pipelines에는 커뮤니티 및 엔터프라이즈 사용자가 개발하고 제공하는 많은 작업이 있습니다. 재사용 가능한 OpenShift Pipelines 작업 공개적으로 사용 가능한 카탈로그는 Tekton Hub 에서 사용할 수 있습니다.

또한 OpenShift Pipelines는 핵심 기능 내에 Jenkins 에코 시스템의 많은 플러그인을 통합합니다. 예를 들어 권한 부여는 Jenkins 및 OpenShift Pipelines 모두에서 중요한 기능입니다. Jenkins는 역할 기반 권한 부여 전략 플러그인을 사용하여 권한 부여를 수행하는 반면, OpenShift Pipelines는 OpenShift의 기본 제공 역할 기반 액세스 제어 시스템을 사용합니다.

5.3.6.3. Jenkins 및 OpenShift Pipelines에서 재사용 가능한 코드 공유

Jenkins 공유 라이브러리 는 Jenkins 파이프라인의 일부에 재사용 가능한 코드를 제공합니다. 라이브러리는 Jenkinsfile 간에 공유되어 코드 반복 없이 고도로 모듈식 파이프라인을 생성합니다.

OpenShift Pipelines에는 Jenkins 공유 라이브러리와 직접 동등하지 않지만 사용자 지정 작업 및 스크립트와 함께 Tekton Hub 의 작업을 사용하여 유사한 워크플로를 수행할 수 있습니다.

5.3.7. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.