Git 저장소에서 프로젝트 작업 자동화
이 튜토리얼에서는 리포지토리의 메인 브랜치에 구성 변경 사항이 병합될 때 프로젝트에 업데이트를 트리거하는 파이프라인을 설정하는 방법을 알아봅니다. 이 튜토리얼을 완료하면 선택한 파이프라인과 툴체인을 사용하여 구성 검증과 같은 프로젝트의 일반적인 작업을 자동화하는 방법을 알아봅니다.
이는 평가 및 테스트 목적으로 사용 가능한 실험적 기능이므로 사전 통지 없이 변경될 수 있습니다.
이 튜토리얼은 다음 이미지에서 설명한 대로 저장소의 메인 브랜치에 변경 사항이 병합될 때 프로젝트의 구성을 업데이트하는 간단한 사용 사례에 초점을 맞춥니다.
파이프라인과 툴체인은 사용자 정의가 가능하므로 이 튜토리얼의 원칙을 적용하면 프로젝트 내의 다른 일반적인 작업(예: 리포지토리의 메인 브랜치에 병합된 후 구성 변경 사항의 유효성 검사 및 배포)을 자동화하는 데 도움이 될 수 있습니다. 이 튜토리얼에서는 GitHub 작업과 워크플로를 사용하여 저장소와 프로젝트 간의 파이프라인을 자동화합니다. 튜토리얼을 완료하면서 각 단계를 저장소의 CI 및 CD 파이프라인과 프로세스에 맞게 조정하세요.
CD 파이프라인을 관리하는 저장소의 브랜치에 병합된 후에만 초안 구성을 검증하고 배포할 수 있습니다. 구성을 검증하고 배포하기 전에 구성을 업데이트하여 저장소의 업데이트를 프로젝트에 동기화해야 합니다. project.config.update API 메서드(이 튜토리얼에서 설명한 대로)를 사용하거나 ibmcloud project config-update CLI 명령을 사용하여 이 업데이트를 자동화할 수 있습니다.
시작하기 전에
- IBM Cloud 프로젝트 서비스에서 편집자 역할이 있는지 확인하세요.
- 프로젝트를 Git 저장소에 연결하는 단계를 완료하세요. 이 튜토리얼의 목적을 위해 빈 프로젝트를 GitHub 저장소에 연결합니다.
GitHub 에 비밀과 변수 추가
프로젝트에 연결한 GitHub 저장소에 비밀과 변수를 생성합니다. 이러한 비밀과 변수는 GitHub 워크플로에서 사용됩니다. 다음 비밀과 변수를 추가합니다.
-
프로젝트를 인증하려면 GitHub 워크플로에 IBM Cloud API 키를 포함해야 합니다. API 키를 안전하게 유지하려면 저장소에 대한 비밀을 만드는 단계를 완료하여 GitHub 에서 API 키를 비밀로 저장합니다. 이 튜토리얼의 목적을 위해 비밀 이름을
IBM_CLOUD_API_KEY로 지정합니다. -
다음으로, GitHub 저장소에 대한 구성 변수를 생성하는 단계를 완료합니다. 다음 변수를 저장하세요.
GitHub 저장소에 저장할 변수 목록 변수 이름 값 설명 CONFIG_FOLDER_PATHconfigs프로젝트에 연결된 저장소 폴더의 경로입니다. 이 폴더에는 프로젝트의 구성 파일이 들어 있습니다. IAM_URLhttps://iam.cloud.ibm.comURL 에서 Cloud Identity and Access Management 으로 이동합니다. PROJECTS_API_BASE_URLhttps://projects.api.cloud.ibm.com프로젝트 API의 URL.
GitHub 에서 워크플로 생성
프로젝트에 연결한 GitHub 저장소에서 워크플로를 작성하는 단계를 완료하세요.
GitHub 에서 필요에 따라 수정할 수 있는 예제 워크플로 파일 로 시작해 보세요.
필요한 만큼의 작업 수에 맞게 워크플로를 사용자 정의할 수 있습니다. 하지만 리포지토리의 사이드 브랜치에서 메인 브랜치로 변경 사항이 병합될 때 프로젝트의 구성을 성공적으로 업데이트하려면 다음 코드를 포함해야 합니다.
-
메인 브랜치에 대한 풀 리퀘스트가 닫힐 때 워크플로를 트리거하려면 워크플로의
on섹션에types: [closed]추가합니다.# Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "main" branch # push: # branches: [ "main" ] pull_request: branches: [ "main" ] types: [closed] -
변경 사항이 메인 브랜치에 병합될 때 이 워크플로를 트리거하는
if명령문을 추가합니다.jobs: update-config: if: github.event.pull_request.merged == true runs-on: ubuntu-latest -
다음 코드를 워크플로에 포함하면 저장소가 프로젝트에 연결할 수 있습니다. 여기서
IBM_CLOUD_API_KEY은 GitHub:IAM_TOKEN=$(curl -X POST "https://iam.cloud.ibm.com/identity/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${{ secrets.IBM_CLOUD_API_KEY }}" | jq -r .access_token) -
어떤 구성이 편집되었는지 식별하려면 다음 코드를 포함하세요.
# get files changed in the PR changed_files=$(git diff --name-only HEAD^ HEAD) echo "Changed files: $changed_files" for file in $changed_files; do # find config files that were changed if [[ "${file}" == ${{ vars.CONFIG_FOLDER_PATH }}/* ]] && [ -s "${file}" ]; then echo "Config file updated: ${file}" # extract data from config files PROJECT_ID=$(jq -r '.project_id' $file) CONFIG_ID=$(jq -r '.config_id' $file) DEF=$(jq '.definition' $file) echo "Project ID: ${PROJECT_ID}" echo "Config ID: ${CONFIG_ID}" -
프로젝트에서 편집된 구성을 업데이트하려면 다음 코드를 포함하세요.
# update config definition RESPONSE=$(curl -X PATCH "${BASE_URL}/v1/projects/${PROJECT_ID}/configs/${CONFIG_ID}" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data "{ \"definition\": ${DEF} }")
예제 워크플로 파일
다음 코드 조각은 워크플로 파일의 템플릿으로 사용할 수 있습니다.
name: Projects Git Integration Workflow
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
pull_request:
branches: [ "main" ]
types: [closed]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
update-configs:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Update Project Configs
run: |
IAM_TOKEN=$(curl -X POST "${{ vars.IAM_URL }}/identity/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
-d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${{ secrets.IBM_CLOUD_API_KEY }}" | jq -r .access_token)
BASE_URL=${{ vars.PROJECTS_API_BASE_URL }}
# get files changed in the PR
changed_files=$(git diff --name-only HEAD^ HEAD)
echo "Changed files: $changed_files"
for file in $changed_files; do
# find config files that were changed
if [[ "${file}" == ${{ vars.CONFIG_FOLDER_PATH }}/* ]] && [ -s "${file}" ]; then
echo "Config file updated: ${file}"
# extract data from config files
PROJECT_ID=$(jq -r '.project_id' $file)
CONFIG_ID=$(jq -r '.config_id' $file)
DEF=$(jq '.definition' $file)
echo "Project ID: ${PROJECT_ID}"
echo "Config ID: ${CONFIG_ID}"
# update config definition
RESPONSE=$(curl -X PATCH "${BASE_URL}/v1/projects/${PROJECT_ID}/configs/${CONFIG_ID}" \
--header "Authorization: Bearer ${IAM_TOKEN}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{ \"definition\": ${DEF} }")
echo $RESPONSE
ERR_CODE=$(echo $RESPONSE | jq '.code')
if [ "${ERR_CODE}" != "null" ]; then
exit 1
fi
else
echo "Not a project configuration file: ${file}"
fi
done
워크플로 테스트
이제 GitHub, 에서 워크플로가 생성되었으므로 프로젝트에 구성을 추가하여 워크플로가 성공적으로 실행되는지 확인하세요. 다음 단계를 완료하십시오.
-
IBM Cloud 콘솔에서 탐색 메뉴 아이콘
> 프로젝트를 클릭하고 GitHub 저장소에 연결된 프로젝트를 선택합니다.
-
프로젝트에 구성을 추가하려면 '만들기'를 클릭하세요. 구성이 저장될 사이드 브랜치를 선택해야 합니다.
-
구성을 편집하십시오. 예를 들어, 구성 패널에서 인증 방법을 추가합니다.
-
변경 사항을 커밋할 사이드 브랜치를 선택합니다.
-
커미트를 클릭하십시오.
-
GitHub 저장소로 가서 풀 리퀘스트를 열어 사이드 브랜치를 저장소의 메인 브랜치에 병합합니다.
-
사이드 브랜치가 메인 브랜치에 병합될 때 워크플로가 실행되는지 확인하세요. GitHub 저장소와 프로젝트에서 확인할 수 있습니다.
- GitHub 저장소에서 작업 탭으로 이동하여 워크플로를 선택합니다. 업데이트가 성공적으로 실행되었는지 확인합니다.
- 프로젝트에서 추가한 구성에 대해 옵션 아이콘 >
> 편집을 클릭하고 메인 브랜치로 전환합니다. 업데이트가 적용되었는지 확인하세요. 예를 들어, 이전에 추가한 인증 방법은 구성 패널에 포함됩니다.