플러그인
플러그인 (Plugins)
이 가이드는 argocd CLI 도구용 플러그인을 작성하는 방법을 보여줍니다. 플러그인은 argocd CLI를 새 하위 명령으로 확장하여 기본 배포에 포함되지 않은 커스텀 기능을 허용하는 방법입니다.
출처: 문서
본문
플러그인
개요
이 가이드는 argocd CLI 도구용 플러그인을 작성하는 방법을 보여줍니다. 플러그인은 argocd CLI를 새 하위 명령으로 확장하여 argocd CLI의 기본 배포에 포함되지 않은 커스텀 기능을 허용하는 방법입니다.
원래 제안을 보고 싶다면 이 개선 제안(enhancement proposal)으로 이동하세요. 플러그인 메커니즘이 어떻게 작동하는지, 그 이점, 동기, 달성하려는 목표를 다룹니다.
전제 조건
로컬에 작동하는 argocd 바이너리가 설치되어 있어야 합니다. 바이너리를 설치하려면 cli 설치 문서를 따를 수 있습니다.
argocd 플러그인 생성
플러그인은 이름이 argocd-로 시작하는 독립 실행형 실행 파일입니다. 플러그인을 설치하려면 실행 파일을 PATH에 포함된 아무 디렉터리로 이동하세요. PATH 구성이 실행 파일의 전체 절대 경로를 지정하는지 확인하세요. 상대 경로가 아니어야 합니다. argocd는 PATH에서 argocd-my-plugin 바이너리를 실행하여 argocd my-plugin arg1 arg2 --flag1 같은 커스텀 명령을 추가할 수 있게 합니다.
제한 사항
- 현재 기존
argocd명령을 덮어쓰는 플러그인을 만들 수 없습니다. 예를 들어argocd-version같은 플러그인을 만들면 기존argocd version명령이 항상 우선하므로 플러그인이 실행되지 않습니다. 이 제한 때문에 플러그인을 사용해 기존argocd명령에 새 하위 명령을 추가하는 것도 불가능합니다. 예를 들어 플러그인 이름을argocd-cluster로 지정해argocd cluster upgrade하위 명령을 추가하면 플러그인이 무시됩니다. - 현재
argocdCLI가 설정한 전역 플래그를 파싱하는 것은 불가능합니다. 예를 들어--logformat값 같은 전역 플래그 값을text로 설정했다면, 플러그인은 전역 플래그를 파싱하지 않고--logformat플래그에 기본값json을 전달합니다. 플래그 파싱은 기존argocd명령과 정확히 동일하게 작동합니다. 즉,argocd cluster list같은 기존 argocd 명령을 실행하면 플래그 값을text로 올바르게 파싱합니다.
argocd 플러그인의 조건
argocd 플러그인으로 실행하려는 모든 바이너리는 다음 세 가지 조건을 충족해야 합니다:
- 바이너리는 접두사 이름으로
argocd-로 시작해야 합니다. 예를 들어argocd-demo-plugin이나argocd-demo_plugin은 유효한 바이너리 이름이지만argocd_demo-plugin이나argocd_demo_plugin은 아닙니다. - 바이너리는 실행 권한이 있어야 합니다. 그렇지 않으면 무시됩니다.
- 바이너리는 시스템의 절대 PATH 어디에든 있어야 합니다.
argocd 플러그인 작성
플러그인 이름 지정
Argo CD 플러그인의 파일 이름은 argocd-로 시작해야 합니다. 플러그인이 구현하는 하위 명령은 파일 이름에서 argocd- 접두사 다음의 부분으로 결정됩니다. argocd- 다음의 모든 것은 argocd의 하위 명령이 됩니다.
예를 들어, 사용자가 다음을 입력하면 argocd-demo-plugin이라는 플러그인이 호출됩니다:
argocd demo-plugin [args] [flags]
argocd CLI는 제공된 하위 명령을 기반으로 호출할 플러그인을 결정합니다.
예를 들어 다음 명령을 실행하면:
argocd my-custom-command [args] [flags]
PATH에 argocd-my-custom-command라는 플러그인이 있으면 그 플러그인이 실행됩니다.
플러그인 작성
플러그인은 명령줄 명령을 작성할 수 있는 모든 프로그래밍 언어나 스크립트로 작성할 수 있습니다.
플러그인은 이름에 따라 구현하려는 명령 경로를 결정합니다.
예를 들어 argocd-demo-plugin이라는 바이너리가 시스템의 절대 PATH에 있고 사용자가 다음 명령을 실행하면:
argocd demo-plugin subcommand1 --flag=true
Argo CD는 해당 플러그인을 다음 명령으로 변환해 실행합니다:
argocd-demo-plugin subcommand1 --flag=true
마찬가지로 argocd-demo-demo-plugin이라는 플러그인이 절대 PATH에 있고 사용자가 다음을 호출하면:
argocd demo-demo-plugin subcommand2 subcommand3 --flag=true
Argo CD는 플러그인을 다음과 같이 실행합니다:
argocd-demo-demo-plugin subcommand2 subcommand3 --flag=true
예시 플러그인
#!/bin/bash
# Check if the argocd CLI is installed
if ! command -v argocd &> /dev/null; then
echo "Error: Argo CD CLI (argocd) is not installed. Please install it first."
exit 1
fi
if [[ "$1" == "version" ]]
then
echo "displaying argocd version..."
argocd version
exit 0
fi
echo "I am a plugin named argocd-foo"
플러그인 사용
플러그인을 사용하려면 플러그인을 실행 가능하게 만드세요:
sudo chmod +x ./argocd-foo
그리고 PATH 어디에나 배치하세요:
sudo mv ./argocd-foo /usr/local/bin
이제 플러그인을 argocd 명령으로 호출할 수 있습니다:
argocd foo
그러면 다음 출력이 나옵니다:
I am a plugin named argocd-foo
모든 인자와 플래그는 실행 파일에 그대로 전달됩니다:
argocd foo version
그러면 다음 출력이 나옵니다:
DEBU[0000] command does not exist, looking for a plugin...
displaying argocd version...
2025/01/16 13:24:36 maxprocs: Leaving GOMAXPROCS=16: CPU quota undefined
argocd: v2.13.0-rc2+0f083c9
BuildDate: 2024-09-20T11:59:25Z
GitCommit: 0f083c9e58638fc292cf064e294a1aa53caa5630
GitTreeState: clean
GoVersion: go1.22.7
Compiler: gc
Platform: linux/amd64
argocd-server: v2.13.0-rc2+0f083c9
BuildDate: 2024-09-20T11:59:25Z
GitCommit: 0f083c9e58638fc292cf064e294a1aa53caa5630
GitTreeState: clean
GoVersion: go1.22.7
Compiler: gc
Platform: linux/amd64
Kustomize Version: v5.4.3 2024-07-19T16:40:33Z
Helm Version: v3.15.2+g1a500d5
Kubectl Version: v0.31.0
Jsonnet Version: v0.20.0
argocd 플러그인 배포
다른 사람이 사용할 Argo CD 플러그인을 개발했다면 사용자에게 원활한 설치와 업그레이드 절차를 보장하기 위해 패키징, 배포, 업데이트 전달 방법을 신중히 고려해야 합니다.
네이티브 / 플랫폼별 패키지 관리
Linux용 apt나 yum, Windows용 Chocolatey, macOS용 Homebrew 같은 전통적인 패키지 관리자로 플러그인을 배포할 수 있습니다. 이러한 패키지 관리자는 실행 파일을 사용자의 PATH에 직접 배치하여 쉽게 접근할 수 있게 하므로 플러그인 배포에 적합합니다.
그러나 플러그인 작성자로서 이 접근 방식을 선택하면 매 릴리스마다 여러 플랫폼에서 플러그인의 배포 패키지를 유지보수하고 업데이트해야 하는 책임이 생깁니다. 여기에는 호환성 테스트, 시기적절한 업데이트 보장, 사용자에게 매끄러운 경험을 제공하기 위한 버전 관리가 포함됩니다.
소스 코드
플러그인의 소스 코드를 예를 들어 Git 저장소에 게시할 수 있습니다. 이는 사용자가 코드에 직접 접근하고 검사할 수 있게 합니다. 플러그인을 설치하려는 사용자는 코드를 가져오고 적절한 빌드 환경을 설정한 다음(플러그인이 컴파일이 필요하다면) 수동으로 배포해야 합니다.