주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
Oracle Cloud Infrastructure DevOps를 사용하여 OCI Resource Manager 배포 자동화
소개
Oracle Cloud Infrastructure(OCI) Resource Manager는 팀이 Infrastructure as Code(IaC)를 관리하고 자동화할 수 있도록 지원하는 완전 관리형 서비스입니다. 이를 통해 팀은 Terraform 구성을 통해 협업하고, 다양한 작업에 대한 권한을 정의하고, 손상을 방지하기 위해 상태 잠금을 제공하고, 모든 상태 파일을 영구 스토리지에 자동으로 저장하고, Terraform 제공업체를 구성할 수 있습니다. Terraform뿐만 아니라 모든 소프트웨어의 제공 및 배포를 위해 OCI DevOps은 프라이빗 코드 저장소, 트리거, 파이프라인 구축 및 배포 등을 갖춘 개발자를 위한 엔드투엔드 CI/CD(지속적 통합/지속적 제공) 플랫폼입니다.
OCI Resource Manager는 기본 CI/CD를 달성하기 위해 Terraform을 위한 자동화 및 여러 소스 코드 제어 시스템과의 통합을 구축했습니다. 이 사용지침서에서는 OCI DevOps를 사용하여 Terraform 코드 변경에 OCI Resource Manager 스택을 자동으로 재배치하여 이러한 CI/CD 기능을 확장하는 방법을 살펴봅니다.
흐름
이 프로세스는 사용자가 새 Terraform 구성을 코드 저장소에 푸시하여 빌드 및 배치 파이프라인을 트리거하는 것으로 시작합니다. 결과적으로 OCI CLI(명령행 인터페이스)를 사용하여 OCI Resource Manager 스택을 새 구성에 적용하는 셸 환경이 생성됩니다.
목표
- Terraform 변경 시 OCI Resource Manager 스택을 자동으로 재배치합니다.
작업 1: OCI DevOps 코드 저장소 설정
-
OCI 콘솔에 로그인하여 개발자 서비스, DevOps, 프로젝트로 이동하고 CI/CD 워크플로우의 모든 리소스를 보유할 DevOps 프로젝트를 생성합니다.
-
코드 저장소를 생성하고 Terraform 구성을 업로드합니다. Oracle에서 제공하는 템플릿을 많이 사용할 수 있습니다. 이 자습서에서는 Terraform이 단순히 OCI 통지 토픽에 대한 설명을 변경합니다.
resource "oci_ons_notification_topic" "test_notification_topic" { #Required compartment_id = <compartment_id> name = "RM_DevOps_Automation_Tutorial" #Optional description = "This is a test notification topic." }
작업 2: 셸 아티팩트 생성
먼저 배치 파이프라인에 사용된 아티팩트를 생성해야 합니다. OCI CLI를 실행하기 위해 셸 스크립트를 실행할 예정이므로 명령 사양 유형의 아티팩트를 생성합니다. 이 자습서에서는 다음 명령과 함께 아티팩트 소스를 인라인으로 사용합니다.
version: 0.1
component: command
timeoutInSeconds: 1200
steps:
- type: Command
timeoutinSeconds: 900
name: Invoke RMS
command: |
echo "Running RM apply command"
구문 및 추가 매개변수에 대한 자세한 내용은 명령 사양 설명서를 참조하십시오. 나중에 이 스크립트에 더 많은 세부정보를 추가합니다.
작업 3: 배치 파이프라인 생성
배치 파이프라인은 아티팩트를 배치하는 데 사용됩니다.
-
배치 파이프라인 및 셸 유형의 단계를 생성합니다.
-
아티팩트 선택을 누르고 작업 2에서 생성된 아티팩트를 선택합니다. 요구사항을 충족하는 구성 및 네트워크 구성을 선택합니다.
주: 정책: 단계를 생성할 때 권장 정책 목록이 링크됩니다. 추가해야 합니다. 또한 배포 파이프라인이 OCI 리소스 관리자 및 OCI 통지와 상호 작용하므로 동적 그룹에
ons-topics
,orm-stacks
및orm-jobs
에 대한 액세스 권한을 부여해야 합니다. 각 서비스의 전체 권한 목록에 대한 자세한 내용은 정책 참조를 참조하십시오.
작업 4: 빌드 파이프라인 생성
아티팩트를 빌드하지 않더라도 배치 파이프라인을 트리거하려면 빌드 파이프라인이 필요합니다.
-
트리거 배치 유형의 빌드 파이프라인 및 스테이지를 생성합니다.
-
배포 파이프라인 선택을 누르고 작업 3에서 생성한 파이프라인을 선택합니다.
작업 5: 트리거 생성
코드 푸시를 호출하는 트리거를 생성해야 합니다.
-
트리거로 이동하고 트리거 생성을 누릅니다.
-
트리거 생성 페이지에서 다음 정보를 입력합니다.
- 소스 연결: OCI 코드 저장소를 입력합니다.
- 코드 저장소 선택: 작업 1에서 생성된 저장소를 선택합니다.
-
작업 추가를 누르고 다음 정보를 입력합니다.
- 빌드 파이프라인: 작업 4에서 생성된 빌드 파이프라인을 선택합니다.
- 이벤트: 푸시를 선택합니다.
- 빌드 실행 조건: 사용 사례에 따라 입력합니다. 이 예에서는 다음 정보를 입력합니다.
- 소스 분기: main을 입력합니다.
- 포함할 파일: main.tf을 입력합니다.
작업 6: 흐름 테스트
다음은 튜토리얼에서 이 시점까지 수행한 워크플로우입니다.
- 코드 푸시입니다.
- 트리거.
- 빌드 파이프라인.
- 배치 파이프라인.
- 셸 스크립트는
echo "Running RM apply command"
를 실행합니다.
셸 스크립트에 더 복잡성을 추가하기 전에 워크플로우 작업을 확인합니다.
-
새 코드를 실행합니다.
-
빌드 파이프라인이 트리거되었는지 확인합니다.
-
배치 파이프라인이 트리거되었는지 확인합니다.
-
셸 스크립트가 성공적으로 실행되었는지 확인
모든 것이 예상대로 작동합니다. 마지막 작업은 리소스 관리자 스택을 트리거하도록 셸 스크립트를 재구성하는 것입니다.
작업 7: Resource Manager 스택을 트리거하도록 셸 스크립트 수정
셸 스테이지 컨테이너 이미지 런타임에는 셸 인터프리터, 셸 유틸리티, CLI 및 더 많은 툴이 포함됩니다. 자세한 내용은 셸 컨테이너 이미지 런타임 세부정보를 참조하십시오.
OCI CLI를 사용하여 Resource Manager를 호출합니다. 현재 셸 스크립트는 다음과 같습니다.
version: 0.1
component: command
timeoutInSeconds: 1200
steps:
- type: Command
timeoutinSeconds: 900
name: Invoke RMS
command: |
echo "Running RM apply command"
셸 스크립트를 수정하려면 다음 단계를 수행합니다.
-
작업 생성.
첫 통화는
create-apply-job
입니다. 그러면 리소스 관리자 스택에 적용 작업이 생성됩니다. 또한 작업의job_id
를 다음 단계에서 작업을 참조하는 변수로 저장합니다.job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
자세한 내용은 OCI CLI Command Reference: create-apply-job을 참조하십시오.
-
작업 상태 가져오기.
작업이 성공했는지 또는 실패했는지 확인해야 합니다. 이를 위해
job_id
를job get
로 전달하여 작업의 속성을 반환합니다. 특히lifecycle-state
에 관심이 있습니다.job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
자세한 내용은 OCI CLI Command Reference: job get을 참조하십시오.
-
작업 상태를 분석합니다.
작업이 성공(0)했는지 아니면 실패(1)했는지에 따라 종료 코드를 변경하는 논리를 추가합니다.
if [ $job_state == SUCCEEDED ]; then echo "Resource Manager job succeeded" exit 0 else echo "Resource Manager job failed" exit 1 fi
-
이전 단계를 집계하고 몇 가지 추가 인쇄 명령문을 추가한 후 셸 스크립트는 다음과 같아야 합니다.
version: 0.1 component: command timeoutInSeconds: 1200 steps: - type: Command timeoutinSeconds: 900 name: Invoke RMS command: | echo "Running RM apply command" job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output) echo "RMS plan job id is:" echo $job_id job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"') echo "Apply job lifecycle-state is:" echo $job_state if [ $job_state == SUCCEEDED ]; then echo "Resource Manager job succeeded" exit 0 else echo "Resource Manager job failed" exit 1 fi
주: 기본 기능을 보여주는 간단한 예제입니다. 필요에 따라 스크립트를 사용자 정의할 수 있습니다.
작업 8: End-to-End 테스트
전체 구조 및 흐름은 다음과 같아야 합니다.
구조 작업을 확인합니다.
-
새 코드를 실행합니다.
-
셸 스크립트가 성공적으로 실행되었는지 확인합니다.
-
Terraform이 성공적으로 적용되었는지 확인합니다.
다음 단계
이 사용지침서에서는 OCI DevOps를 사용하여 OCI Resource Manager 스택 배포를 자동화하는 방법을 보여주었습니다. 이것은 기본적인 흐름을 보여주는 간단한 예입니다. 배운 개념을 적용하여 이를 기반으로 구축하고, 사용 사례에 맞게 조정하고, 기존 CI/CD 파이프라인에 통합하는 것이 좋습니다.
관련 링크
확인
- Authors - Cody Brinkman(클라우드 아키텍트), Qian Chen(기술 담당자, OCI 개발자 도구 및 서비스 멤버) 및 Nandan Kandregula(OCI 개발자 도구 및 서비스 소프트웨어 개발 관리자)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Use Oracle Cloud Infrastructure DevOps to Automate OCI Resource Manager Deployments
G16603-01
October 2024