검색

3장. Jenkins에서 Tekton으로 마이그레이션

download PDF

3.1. Jenkins에서 Tekton으로 마이그레이션

Jenkins 및 Tekton은 애플리케이션 및 프로젝트 구축, 테스트 및 배포 프로세스를 자동화하는 데 광범위하게 사용됩니다. 그러나 Tekton은 Kubernetes 및 OpenShift Container Platform과 원활하게 작동하는 클라우드 네이티브 CI/CD 솔루션입니다. 이 문서는 Jenkins CI/CD 워크플로를 Tekton으로 마이그레이션하는 데 도움이 됩니다.

3.1.1. Jenkins 및 Tekton 개념 비교

이 섹션에는 Jenkins 및 Tekton에 사용되는 기본 용어가 요약되어 있으며 동등한 용어를 비교합니다.

3.1.1.1. Jenkins 용어

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

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

3.1.1.2. Tekton 용어

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

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

    참고

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

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

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

    Jenkins에는 Tekton 작업 공간에 직접적으로 해당하는 작업 공간이 없습니다. 복제된 코드 리포지토리를 저장하고 기록 및 아티팩트를 빌드하므로 컨트롤 노드를 작업 영역으로 간주할 수 있습니다. 작업이 다른 노드에 할당되는 경우 복제된 코드와 생성된 아티팩트는 해당 노드에 저장되지만 빌드 기록은 컨트롤 노드에 의해 유지 관리됩니다.

3.1.1.3. 개념 매핑

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

표 3.1. Jenkins 및 Tekton - 기본 비교
JenkinsTekton

Pipeline

Pipeline 및 PipelineRun

Stage

Task

Step

작업의 단계

3.1.2. Jenkins에서 Tekton으로 샘플 파이프라인 마이그레이션

이 섹션에서는 Jenkins 및 Tekton에서 파이프라인과 동일한 예제를 제공하며 Jenkins에서 Tekton으로 파이프라인을 마이그레이션, 테스트 및 배포하는 데 유용한 정보를 제공합니다.

3.1.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'
           }
       }
   }
}

3.1.2.2. Tekton 파이프라인

Tekton에서 Jenkins 파이프라인의 동등한 예는 세 가지 작업으로 구성되며 각각 YAML 구문을 사용하여 선언적으로 작성할 수 있습니다.

build 작업 예

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)

test 작업 예:

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)

deploy 작업 예:

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)

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

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

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

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

플러그인 을 사용하여 Jenkins 기능을 확장할 수 있습니다. Tekton에서 유사한 확장성을 얻으려면 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

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

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

예: 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!”)
...

3.1.5. Jenkins 및 Tekton 실행 모델 비교

Jenkins 및 Tekton은 유사한 기능을 제공하지만 아키텍처 및 실행이 다릅니다. 이 섹션에서는 두 가지 실행 모델을 간단히 비교합니다.

표 3.2. Jenkins 및 Tekton의 실행 모델 비교
JenkinsTekton

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

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

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

Tekton은 모든 단계가 Pod에서 실행되는 컨테이너(Jenkins의 노드와 동등)로 실행되는 '컨테이너 우선' 접근 방식을 채택합니다.

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

확장성은 Tekton Hub의 작업을 사용하거나 사용자 지정 작업 및 스크립트를 만들어 얻을 수 있습니다.

3.1.6. 일반적인 사용 사례의 예

Jenkins 및 Tekton은 모두 다음과 같은 공통 CI/CD 사용 사례를 위한 기능을 제공합니다.

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

3.1.6.1. Jenkins 및 Tekton에서 maven 파이프라인 실행

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

예: 이미지를 컴파일하고 빌드하고 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' }

예: Tekton에서 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

3.1.6.2. 플러그인을 사용하여 Jenkins 및 Tekton의 핵심 기능 확장

Jenkins는 광범위한 사용자 기반에서 수년간 개발된 수많은 플러그인의 대규모 에코시스템을 활용합니다. Jenkins 플러그인 인덱스에서 플러그인을 검색하고 검색할 수 있습니다.

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

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

3.1.6.3. Jenkins 및 Tekton에서 재사용 가능한 코드 공유

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

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

3.1.7. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.