7.6.2.3. 튜토리얼: 파이프라인의 바이너리 아티팩트


OpenShift의 Jenkins를 사용하면 적절한 툴이 포함된 슬레이브 이미지를 사용하여 코드를 빌드할 수 있습니다. 예를 들어 maven 슬레이브를 사용하여 코드 리포지토리에서 WAR를 빌드할 수 있습니다. 그러나 이 아티팩트가 빌드되면 코드를 실행하기 위해 올바른 런타임 아티팩트가 포함된 이미지로 커밋해야 합니다. 바이너리 빌드를 사용하여 이러한 아티팩트를 런타임 이미지에 추가할 수 있습니다. 다음 튜토리얼에서는 maven 슬레이브를 사용하여 WAR를 빌드한 다음 Dockerfile 이 포함된 바이너리 빌드를 사용하여 wildfly 런타임 이미지에 WAR를 추가하는 Jenkins 파이프라인을 생성합니다.

  1. 애플리케이션에 대한 새 디렉터리를 생성합니다.

    $ mkdir mavenapp
    $ cd mavenapp
  2. 실행을 위해 wildfly 이미지 내부의 적절한 위치에 WAR를 복사하는 Dockerfile 을 생성합니다. Dockerfile 이라는 로컬 파일에 다음을 복사합니다.

    FROM wildfly:latest
    COPY ROOT.war /wildfly/standalone/deployments/ROOT.war
    CMD  $STI_SCRIPTS_PATH/run
  3. 해당 Dockerfile에 대한 새 BuildConfig를 생성합니다.

    참고

    그러면 ROOT.war 아티팩트를 아직 사용할 수 없기 때문에 처음에 실패하는 빌드가 자동으로 시작됩니다. 아래 파이프라인은 바이너리 빌드를 사용하여 해당 WAR를 빌드에 전달합니다.

    $ cat Dockerfile | oc new-build -D - --name mavenapp
  4. WAR를 빌드할 Jenkins 파이프라인을 사용하여 BuildConfig를 생성한 다음, 이전에 생성한 Dockerfile 을 사용하여 이미지를 빌드하는 데 해당 WAR를 사용합니다. 바이너리 아티팩트가 도구 집합에 의해 빌드되고 최종 패키지에 대해 다른 런타임 이미지와 결합되는 다른 플랫폼에 동일한 패턴을 사용할 수 있습니다. 다음 코드를 mavenapp-pipeline.yml 에 저장합니다.

    apiVersion: v1
    kind: BuildConfig
    metadata:
      name: mavenapp-pipeline
    spec:
      strategy:
        jenkinsPipelineStrategy:
          jenkinsfile: |-
            pipeline {
              agent { label "maven" }
              stages {
                stage("Clone Source") {
                  steps {
                    checkout([$class: 'GitSCM',
                                branches: [[name: '*/master']],
                                extensions: [
                                  [$class: 'RelativeTargetDirectory', relativeTargetDir: 'mavenapp']
                                ],
                                userRemoteConfigs: [[url: 'https://github.com/openshift/openshift-jee-sample.git']]
                            ])
                  }
                }
                stage("Build WAR") {
                  steps {
                    dir('mavenapp') {
                      sh 'mvn clean package -Popenshift'
                    }
                  }
                }
                stage("Build Image") {
                  steps {
                    dir('mavenapp/target') {
                      sh 'oc start-build mavenapp --from-dir . --follow'
                    }
                  }
                }
              }
            }
        type: JenkinsPipeline
      triggers: []
  5. 파이프라인 빌드를 생성합니다. Jenkins가 프로젝트에 배포되지 않으면 파이프라인을 사용하여 BuildConfig를 생성하면 Jenkins가 배포됩니다. Jenkins가 파이프라인을 빌드할 준비가 되기까지 몇 분 정도 걸릴 수 있습니다. oc rollout status dc/jenkins 를 호출하여 Jenkins 롤아웃 상태를 확인할 수 있습니다.

    $ oc create -f ./mavenapp-pipeline.yml
  6. Jenkins가 준비되면 이전에 정의한 파이프라인을 시작합니다.

    $ oc start-build mavenapp-pipeline
  7. 파이프라인의 빌드가 완료되면 new-app을 사용하여 새 애플리케이션을 배포하고 경로를 노출합니다.

    $ oc new-app mavenapp
    $ oc expose svc/mavenapp
  8. 브라우저를 사용하여 애플리케이션의 경로로 이동합니다.

    $ oc get route mavenapp
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.