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을 생성하는 방법을 보여줍니다.

프로세스

  1. Jenkins 마스터를 생성합니다.

      $ oc project <project_name>

    사용할 프로젝트를 선택하거나 oc new-project <project_name>을 사용하여 새 프로젝트를 생성합니다.

      $ oc new-app jenkins-ephemeral 1

    영구 스토리지를 사용하려면 대신 jenkins-persistent를 사용합니다.

  2. 다음 콘텐츠를 사용하여 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
  3. 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 이미지가 변경될 때까지 기다린 다음 해당 이미지를 스테이징 환경에 배포할 수 있습니다.
    참고

    위 예제는 선언적 파이프라인 스타일로 작성되었지만 기존에 스크립팅된 파이프라인 스타일도 지원됩니다.

  4. OpenShift Container Platform 클러스터에서 파이프라인 BuildConfig를 생성합니다.

    $ oc create -f nodejs-sample-pipeline.yaml
    1. 자체 파일을 생성하지 않으려면 다음을 실행하여 원래 리포지토리의 샘플을 사용하면 됩니다.

      $ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/jenkins/pipeline/nodejs-sample-pipeline.yaml
  5. 파이프라인을 시작합니다.

    $ 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 웹 콘솔에서 확인하는 것입니다. 웹 콘솔에 로그인하고 빌드 파이프라인으로 이동하여 파이프라인을 확인할 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.