๐น Argo CD API ๋ฐ CLI๋ฅผ ํ์ฉํด์ผ ํ๋ ์ด์
Argo CD๋ CLI(Command Line Interface) ๋ฐ REST API ๋ฅผ ์ ๊ณตํ์ฌ GitOps ๊ธฐ๋ฐ์ ๋ฐฐํฌ๋ฅผ ๋์ฑ ์๋ํํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํ์ฉํ๋ฉด CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ฝ๊ฒ ์ฐ๋ํ์ฌ ์ฝ๋ ๋ณ๊ฒฝ ์ ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง ์ ์๋๋ก ์ค์ ๊ฐ๋ฅํฉ๋๋ค.
โ Argo CD API ๋ฐ CLI ํ์ฉ์ด ํ์ํ ์ด์
โ GitOps ์๋ํ ๋ฐฐํฌ๋ฅผ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ฐ๋ ๊ฐ๋ฅ
โ ์ ํ๋ฆฌ์ผ์ด์
์ CLI ๋ช
๋ น์ด ๋๋ API ํธ์ถ๋ก ๋ฐฐํฌ ๊ฐ๋ฅ
โ ์๋ ๋กค๋ฐฑ, ๋ฐฐํฌ ์ํ ์กฐํ, ๋๊ธฐํ ์คํ์ ์คํฌ๋ฆฝํธ์์ ์ ์ด ๊ฐ๋ฅ
โ Argo CD์ REST API๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฒฉ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
๐น 1. Argo CD CLI๋ฅผ ํ์ฉํ ๋ฐฐํฌ ์๋ํ
โ 1.1 Argo CD CLI ์ค์น
Argo CD CLI๋ ๋ก์ปฌ ํ๊ฒฝ์์ Argo CD ์๋ฒ์ ์ํธ์์ฉํ ์ ์๋๋ก ๋์์ค๋๋ค.
# Mac ์ค์น (Homebrew)
brew install argocd
# Linux ์ค์น
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
โ Argo CD CLI ๋ฒ์ ํ์ธ
argocd version
โ ์ถ๋ ฅ ์์:
argocd: v2.5.0
โ 1.2 Argo CD CLI๋ฅผ ํ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
๐ Argo CD ๋ก๊ทธ์ธ
argocd login argocd.example.com --username admin --password mypassword
โ
์ค๋ช
:
โ argocd login → Argo CD ์๋ฒ์ ๋ก๊ทธ์ธ
โ --username admin → ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
๐ ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ (๋ฐฐํฌ ์คํ)
argocd app sync example-app
โ
์ค๋ช
:
โ argocd app sync → Git ์ ์ฅ์์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๋๊ธฐํํ์ฌ ๋ฐฐํฌ ์คํ
๐ ๋ฐฐํฌ ์ํ ํ์ธ
argocd app get example-app
โ ์ถ๋ ฅ ์์:
NAME STATUS SYNC STATUS
example-app Healthy Synced
โ 1.3 Argo CD CLI๋ฅผ ํ์ฉํ ๋กค๋ฐฑ
๋ฐฐํฌ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด Argo CD CLI๋ฅผ ํ์ฉํ์ฌ ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ ์ ์์ต๋๋ค.
argocd app rollback example-app 2
โ
์ค๋ช
:
โ rollback example-app 2 → ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋ฒ์งธ ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ
โ ๋กค๋ฐฑ ํ ์ํ ํ์ธ
argocd app history example-app
โ ์ถ๋ ฅ ์์:
ID COMMIT STATUS SYNC STATUS
4 89f2d3a Deployed Synced
3 c7a1e2b Deployed Synced
2 b5d1f4c RolledBack Synced
๐น 2. Argo CD REST API๋ฅผ ํ์ฉํ ์๋ํ ๋ฐฐํฌ
Argo CD๋ REST API๋ฅผ ์ ๊ณตํ์ฌ CI/CD ํ์ดํ๋ผ์ธ์์ ์๊ฒฉ์ผ๋ก ๋ฐฐํฌ ๋ฐ ๋๊ธฐํ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
โ 2.1 Argo CD API ์ธ์ฆ ํ ํฐ ์์ฑ
Argo CD REST API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด JWT ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ์ด ํ์ํฉ๋๋ค.
argocd account generate-token --account admin
โ ์ถ๋ ฅ ์์:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ...
โ ์ด์ REST API ํธ์ถ ์ ์ธ์ฆ ํค๋์ Authorization: Bearer <TOKEN>์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
โ 2.2 Argo CD API๋ฅผ ํ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก ์กฐํ
curl -X GET -H "Authorization: Bearer " \
https://argocd.example.com/api/v1/applications
โ ์ถ๋ ฅ ์์:
{
"items": [
{
"metadata": {
"name": "example-app",
"namespace": "argocd"
},
"status": {
"sync": {
"status": "Synced"
}
}
}
]
}
โ 2.3 Argo CD API๋ฅผ ํ์ฉํ ๋ฐฐํฌ ๋๊ธฐํ ์คํ
curl -X POST -H "Authorization: Bearer " \
https://argocd.example.com/api/v1/applications/example-app/sync
โ
์ค๋ช
:
โ POST /applications/example-app/sync → Argo CD์์ Git ์ํ์ ๋๊ธฐํ ์คํ
โ ๋๊ธฐํ ์ํ ํ์ธ API ํธ์ถ
curl -X GET -H "Authorization: Bearer " \
https://argocd.example.com/api/v1/applications/example-app
๐น 3. GitHub Actions์ Argo CD API๋ฅผ ํ์ฉํ ๋ฐฐํฌ ์๋ํ
CI/CD ํ์ดํ๋ผ์ธ์์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก Argo CD๋ฅผ ํตํด ๋ฐฐํฌํ ์ ์์ต๋๋ค.
โ 3.1 GitHub Actions ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์์
๐ .github/workflows/deploy.yml
name: Deploy with Argo CD
on:
push:
branches:
- main # main ๋ธ๋์น์ Push ์ ๋ฐฐํฌ ์คํ
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Sync Application with Argo CD
run: |
curl -X POST -H "Authorization: Bearer ${{ secrets.ARGOCD_TOKEN }}" \
https://argocd.example.com/api/v1/applications/example-app/sync
โ
์ค๋ช
:
โ on.push.branches: main → ๋ฉ์ธ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด ๋ฐฐํฌ ์๋ ์คํ
โ curl -X POST ... /sync → Argo CD API๋ฅผ ํธ์ถํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
๋๊ธฐํ ์คํ
โ secrets.ARGOCD_TOKEN → GitHub Actions์์ Argo CD API ํธ์ถ์ ์ํ ํ ํฐ ์ ์ฅ
โ GitHub Actions CI/CD ๋ฐฐํฌ ์คํ
git push origin main
โ ์ถ๋ ฅ ์์ (GitHub Actions ๋ก๊ทธ)
โ
Sync Application with Argo CD
Successfully triggered sync for example-app.
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Argo CD CLI๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๊ธฐํํ๊ณ ๋กค๋ฐฑ ๊ฐ๋ฅ
๐ข Argo CD REST API๋ฅผ ํ์ฉํ์ฌ ์๊ฒฉ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ ๊ฐ๋ฅ
๐ข GitHub Actions์ Argo CD API๋ฅผ ์ฐ๋ํ์ฌ ์๋ํ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๊ฐ๋ฅ
๐ข CI/CD ํ๊ฒฝ์์ GitOps ๋ฐฉ์์ผ๋ก ๋ฐฐํฌ๋ฅผ ์๋ํํ ์ ์์