3.6. 일반적인 사용 사례 예
Jenkins 및 OpenShift Pipelines 모두 다음과 같은 일반적인 CI/CD 사용 사례에 대한 기능을 제공합니다.
- Apache Maven을 사용하여 이미지 컴파일, 빌드 및 배포
- 플러그인을 사용하여 코어 기능 확장
- 공유 가능한 라이브러리 및 사용자 지정 스크립트 사용
3.6.1. Jenkins 및 OpenShift Pipelines에서 Maven 파이프라인 실행
Jenkins 및 OpenShift Pipelines 워크플로우 모두에서 Maven을 사용하여 이미지를 컴파일, 빌드 및 배포할 수 있습니다. 기존 Jenkins 워크플로를 OpenShift Pipelines에 매핑하려면 다음 예제를 고려하십시오.
예: 이미지를 컴파일 및 빌드하고 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' }
예: 이미지를 컴파일 및 빌드하고 OpenShift Pipelines의 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.6.2. 플러그인을 사용하여 Jenkins 및 OpenShift Pipelines의 핵심 기능 확장
Jenkins는 광범위한 사용자 기반에 의해 수년 동안 개발 된 수많은 플러그인의 대규모 에코 시스템의 이점을 가지고 있습니다. Jenkins 플러그인 색인 에서 플러그인을 검색하고 검색할 수 있습니다.
OpenShift Pipelines에는 커뮤니티 및 엔터프라이즈 사용자가 개발하고 기여한 많은 작업이 있습니다. 재사용 가능한 OpenShift Pipelines 작업의 공개적으로 카탈로그는 Tekton Hub 에서 사용할 수 있습니다.
또한 OpenShift Pipelines는 핵심 기능 내에 Jenkins 에코 시스템의 많은 플러그인을 통합합니다. 예를 들어 권한 부여는 Jenkins 및 OpenShift Pipelines 모두에서 중요한 기능입니다. Jenkins는 역할 기반 권한 부여 전략 플러그인을 사용하여 권한 부여를 수행하는 반면, OpenShift Pipelines는 OpenShift의 기본 제공 역할 기반 액세스 제어 시스템을 사용합니다.
3.6.3. Jenkins 및 OpenShift Pipelines에서 재사용 가능한 코드 공유
Jenkins 공유 라이브러리는 Jenkins 파이프라인의 일부에 재사용 가능한 코드를 제공합니다. 라이브러리는 코드 반복 없이 고도로 모듈식 파이프라인을 생성하기 위해 Jenkinsfiles 간에 공유됩니다.
OpenShift Pipelines에는 Jenkins 공유 라이브러리가 직접적으로 동일하지는 않지만 사용자 지정 작업 및 스크립트와 함께 Tekton Hub 의 작업을 사용하여 유사한 워크플로를 수행할 수 있습니다.