7.6.2.3. 튜토리얼: 파이프라인에서 바이너리 아티팩트
OpenShift의 Jenkins를 사용하면 적절한 툴과 함께 슬레이브 이미지를 사용하여 코드를 빌드할 수 있습니다. 예를 들어, maven
슬레이브를 사용하여 코드 리포지토리에서 WAR를 빌드할 수 있습니다. 그러나 이 아티팩트가 빌드되면 코드를 실행하기 위해 올바른 런타임 아티팩트가 포함된 이미지에 커밋해야 합니다. 바이너리 빌드는 이러한 아티팩트를 런타임 이미지에 추가하는 데 사용할 수 있습니다. 다음 튜토리얼에서는 maven
슬레이브를 사용하여 WAR를 빌드한 다음 Dockerfile
과 함께 바이너리 빌드를 사용하여 해당 WAR를 와일드카드 런타임 이미지에 추가하는 Jenkins 파이프라인을 만듭니다.
애플리케이션의 새 디렉터리를 생성합니다.
$ mkdir mavenapp $ cd mavenapp
실행할 와일드카드 이미지 내의 적절한 위치에 WAR를 복사하는
Dockerfile
을 생성합니다.Dockerfile
이라는 로컬 파일에 다음을 복사합니다.FROM wildfly:latest COPY ROOT.war /wildfly/standalone/deployments/ROOT.war CMD $STI_SCRIPTS_PATH/run
해당 Dockerfile의 새 BuildConfig를 생성합니다.
참고이렇게 하면
ROOT.war
아티팩트를 아직 사용할 수 없으므로 처음에 실패하는 빌드가 자동으로 시작됩니다. 아래 파이프라인은 바이너리 빌드를 사용하여 해당 WAR를 빌드에 전달합니다.$ cat Dockerfile | oc new-build -D - --name mavenapp
WAR를 빌드할 Jenkins 파이프라인으로 BuildConfig를 생성한 다음 해당 WAR를 사용하여 이전에 생성한
Dockerfile
을 사용하여 이미지를 빌드합니다. 바이너리 아티팩트가 도구 집합에 의해 빌드된 다른 플랫폼에 동일한 패턴을 사용할 수 있으며 최종 패키지의 다른 런타임 이미지와 결합됩니다.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: []
파이프라인 빌드를 생성합니다. Jenkins가 프로젝트에 배포되지 않으면 파이프라인을 사용하여 BuildConfig를 생성하면 Jenkins가 배포됩니다. Jenkins가 파이프라인을 빌드할 준비가 되기까지 몇 분이 걸릴 수 있습니다.
oc rollout status dc/jenkins
를 호출하여 Jenkins 롤아웃의 상태를 확인할 수 있습니다.$ oc create -f ./mavenapp-pipeline.yml
Jenkins가 준비되면 이전에 정의된 파이프라인을 시작합니다.
$ oc start-build mavenapp-pipeline
파이프라인 빌드가 완료되면 new-app을 사용하여 새 애플리케이션을 배포하고 경로를 노출합니다.
$ oc new-app mavenapp $ oc expose svc/mavenapp
브라우저를 사용하여 애플리케이션의 경로로 이동합니다.
$ oc get route mavenapp