Backstage 와 Gitea Actions 활용한 CI/CD 환경 만들기 #4

Paul
12 min readMay 19, 2024

--

Photo by Simon Kadula on Unsplash

앞에서 Backstage 와 Git 연동 환경 구성을 했습니다. 이번에는 Backstage의 소프트웨어 템플릿(Software Template)과 Gitea Actions 를 활용하여 CI/CD 환경을 구축해 보겠습니다.

Backstage의 소프트웨어 템플릿(Software Template)을 사용하여 Git 저장소를 생성한 후, Gitea Actions를 통해 Docker Hub 저장소 및 ArgoCD 설정을 자동으로 구성합니다. 그리고 git push가 발생하면 CI/CD가 자동으로 실행됩니다.

사전 준비

기본적인 환경 구성은 앞에서 완료를 했습니다. 이제 Gitea Actions를 실행하기 위한 환경을 준비 합니다. Backstage에서 소스를 저장할 Gitea 저장소를 위해 조직(Organization)을 구성합니다. 조직(Organization)의 이름을 backstage 이름으로 생성을 합니다.

Gitea 조직을 구성을 하고 설정을 통해 Gitea Actions 실행할 Runner를 등록 합니다. Gitea Runner 등록 및 설정에 대한 자세한 정보는 여기를 참고해 주세요.

backstage 조직에서 사용할 Gtea Runner 등록화면

Gitea Actions 실행하는데 필요한 환경 변수를 설정합니다. 환경 변수로는 도커 허브, Gitea, ArgoCD 관련 설정 값을 등록 하겠습니다.

Gitea Actions 환경 설정 값

ArgoCD 패스워드를 변경하기 위해서는 먼저 ArgoCD CLI를 설치해야 합니다. 설치가 완료되면 패스워드 변경을 하겠습니다. ArgoCD CLI 설치 및 패스워드 변경 방법은 아래와 같습니다.


# ArgoCD CLI 설치
ARGOCD_VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -sSL -o ./argocd-${ARGOCD_VERSION} https://github.com/argoproj/argo-cd/releases/download/${ARGOCD_VERSION}/argocd-linux-amd64
chmod +x ./argocd-${ARGOCD_VERSION}
sudo mv ./argocd-${ARGOCD_VERSION} /usr/local/bin/argocd

# 기존의 ArgoCD password 값
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

# ArgoCD 로그인
argocd login 192.168.56.174:32567

# ArgoCD 패스워드 변경
argocd account update-password \
--account <name> \
--current-password <current-user-password> \
--new-password <new-user-password>

Gitea Actions를 통한 CI/CD에 대한 자세한 내용은 아래 링크를 참조해 주세요.

소프트웨어 템플릿 구성하기

Backstage의 소프트웨어 템플릿(Software Template)을 사용하면 애플리케이션 서비스나 인프라를 위한 표준 템플릿을 쉽게 만들 수 있습니다. 이 템플릿을 통해 신규 서비스 개발과 인프라 환경 구성을 빠르게 진행할 수 있습니다. 예를 들어, 간단한 Node.js 프로젝트를 소프트웨어 템플릿(Software Template)으로 구성했으며, 템플릿의 구성은 아래와 같습니다. 더 자세한 내용은 GitHub 주소에서 확인할 수 있습니다.

vagrant@backstage:/vagrant/references/03.backstage-gitea-ci-cd/app/nodejs-backend-template$ tree -a
.
├── catalog-info
│ └── catalog-info.yaml
├── content
│ ├── Dockerfile
│ ├── .dockerignore
..
├── skeletons
│ ├── .gitea
│ │ └── workflows
│ │ ├── gitea-ci.yaml
│ │ └── gitea-init.yaml
│ └── helm
│ ├── Chart.yaml
│ ├── .helmignore
│ ├── image.yaml
│ ├── templates
│ │ ├── deployment.yaml
...
│ │ ├── service.yaml
│ │ └── tests
│ │ └── test-connection.yaml
│ └── values.yaml
└── template.yaml
  • catalog-info 폴더 : Backstage의 소프트웨어 템플릿(Software Template)에서 생성된 서비스, API, 데이터 파이프라인, 라이브러리, 인프라 등 모든 소프트웨어에 대한 메타 데이터 정보를 설정합니다. 또한, 템플릿에서 정의한 파라미터를 받아 이를 구성하는 것도 가능합니다.
# Software Catalog Yaml 정보
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: ${{ values.name | dump }}
description: ${{ values.description }}
spec:
type: service
owner: ${{ values.owner }}
lifecycle: production # experimental
  • content 폴더: 프로젝트를 구성하기 위해 필요한 패키지 파일, 개발 소스 및 도커 파일을 추가했습니다. 또한, 템플릿에서 정의한 파라미터를 받아 이를 구성하는 것도 가능합니다.
# package.json
{
"name": "${{ values.name }}",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
  • skeletons 폴더: Gitea Actions 설정과 Helm 차트 관련 파일를 구성합니다. 해당 폴더는 템플릿에 의해 재구성 되지 않습니다. 따라서 소프트웨어 템플릿에서 정의한 파리미터 값을 설정하지 못합니다.
# template.yaml 파일
# copyWithoutTemplating 옵션을 통해서 해당 폴더에 대해서는 템플릿 작업 없이 복사만함
steps:
- id: gitea-actions-template
name: Generating the Gitea actions Component
action: fetch:template
input:
url: ./skeletons/
copyWithoutTemplating:
- .gitea/workflows/
...
- id: helm-template
name: Generating the Helm Component
action: fetch:template
input:
url: ./skeletons/
copyWithoutTemplating:
- helm/
  • template.yaml: 새로운 서비스, 애플리케이션, 라이브러리 등을 생성할 때 필요한 모든 메타데이터와 단계를 작성합니다. 이 템플릿 파일은 YAML 형식으로 작성됩니다.

템플릿의 메타데이터를 정의합니다. 이름, 제목, 설명, 태그 등의 정보를 포함할 수 있습니다.

Backstage Template 정보를 표시하기 위한 메타 정보

사용자로부터 입력 받을 매개변수를 정의합니다. (참고: https://github.com/rjsf-team/react-jsonschema-form, https://rjsf-team.github.io/react-jsonschema-form/ )

템플릿 에서 사용할 파리미터 설정

템플릿 생성 프로세스의 각 단계를 정의합니다. 각 단계에서 수행할 작업(Action)과 입력(Input)을 지정합니다. Backstage에서는 빌트인(Built-In) 액션(Action)뿐만 아니라 사용자 정의 액션(Action)도 만들 수 있습니다.

생성된 템플릿의 결과물에 대한 정보를 표시하기 위한 정보를 작성합니다. 여기에서는 Git 저장소 주소와 Catalog 주소를 표시합니다.

소프트웨어 템플릿 실행하기

소프트웨어 템플릿 구성을 하고 Backstage를 실행 한 후에 브라우저를 실행하고 http://192.168.56.174:3000/ 접속을 한 후에 메뉴에서 Create를 클릭하시면 아래와 같이 템플릿이 생성된 것을 알 수 있습니다. CHOOSE를 선택해서 템플릿에서 선언한 파라미터 정보 입력을 합니다.

도커 허브에 이미지를 저장하기 위한 정보를 입력합니다.

CD(Continuous Delivery)를 설정하기 위해 필요한 정보를 입력합니다.

템플릿에 의해 생성된 소스와 파일을 저장하기 위해 필요한 Git 정보를 입력합니다.

각 단계에서 설정한 파라미터를 확인한 후 ‘CREATE’ 버튼을 클릭합니다.

모든 단계가 정상적으로 실행되는지 확인합니다. 각 단계에서 실행된 로그를 확인할 수 있으며, ‘CREATE’가 성공적으로 완료되면, 템플릿에 정의한 Output 정보를 화면에 표시합니다.

Backstage에서 서비스가 정상적으로 생성되었는지 확인합니다.

Gitea에 저장소가 생성되었으며, 소스와 관련 설정 파일들이 정상적으로 생성된 것을 확인할 수 있습니다.

Gitea Actions이 실행되면서 Docker Hub에 저장소가 생성되고, ArgoCD에서도 저장소 및 어플리케이션이 생성됩니다.

Git 저장소의 main 브랜치에 push되면 이미지가 빌드되고 Helm 파일이 업데이트됩니다.

ArgoCD에 로그인한 후 해당 어플리케이션이 정상적으로 배포되었는지 확인합니다.

마무리하며

Backstage의 소프트웨어 템플릿을 활용해 서비스를 생성하고, Gitea Actions로 CI/CD 환경을 구축했습니다. 소프트웨어 템플릿에 대한 자세한 설명은 생략된 부분이 많으므로, 자세한 정보는 Backstage의 공식 웹사이트를 참고해 주세요.

참고사이트

--

--