7.6.2.3. 튜토리얼: 파이프라인의 바이너리 아티팩트
OpenShift의 Jenkins를 사용하면 적절한 툴이 포함된 슬레이브 이미지를 사용하여 코드를 빌드할 수 있습니다. 예를 들어 maven
슬레이브를 사용하여 코드 리포지토리에서 WAR를 빌드할 수 있습니다. 그러나 이 아티팩트가 빌드되면 코드를 실행하기 위해 올바른 런타임 아티팩트가 포함된 이미지로 커밋해야 합니다. 바이너리 빌드를 사용하여 이러한 아티팩트를 런타임 이미지에 추가할 수 있습니다. 다음 튜토리얼에서는 maven
슬레이브를 사용하여 WAR를 빌드한 다음 Dockerfile
이 포함된 바이너리 빌드를 사용하여 wildfly 런타임 이미지에 WAR를 추가하는 Jenkins 파이프라인을 생성합니다.
애플리케이션에 대한 새 디렉터리를 생성합니다.
$ mkdir mavenapp $ cd mavenapp
실행을 위해 wildfly 이미지 내부의 적절한 위치에 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를 생성한 다음, 이전에 생성한
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: []
파이프라인 빌드를 생성합니다. 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