원문 캡처 · updatecli.io
원문 캡처 · updatecli.io

최신 Jenkins 주간 버전을 확인하고 Docker Hub에 해당 이미지가 있는지 검사한 뒤 data.yaml의 태그를 바꾸는 일을 Updatecli가 처리한다. Updatecli는 이 과정을 파일 변경과 풀 리퀘스트 생성까지 연결하는 오픈소스 도구다. 업데이트를 자동화하려는 저장소 관리자는 매니페스트에 대상과 조건을 지정해 사용할 수 있다.

Updatecli는 무엇을 하는 도구인가?

Updatecli는 YAML 매니페스트에 업데이트할 값과 파일, 적용 조건을 적어 실행하는 도구다. 업데이트 과정을 정해진 순서대로 처리하는 조립 라인을 떠올리면 쉽다. 값 가져오기, 조건 검사, 파일 수정이 차례로 이뤄지며, 소스 단계는 파일을 바꾸지 않는다.

각 파이프라인은 먼저 소스에서 최신 의존성 버전 같은 값을 가져온다. 조건 단계에서 업데이트에 필요한 전제가 맞는지 확인하고, 조건이 충족되지 않으면 대상 파일을 건너뛴다. 대상 단계는 가져온 값을 YAML 파일의 키나 Dockerfile의 줄 등에 쓴다. 이어 SCM 설정과 액션이 작업 브랜치에 변경 사항을 커밋하고 풀 리퀘스트나 병합 요청을 연다.

Jenkins 예제에서는 최신 주간 버전을 소스로 가져오고, Docker Hub에 같은 태그의 이미지가 있는지 조건으로 확인한다. 조건을 통과하면 data.yaml의 $.container.tag를 갱신한다. 다음은 원문에 실린 매니페스트와 updatecli diff 출력이다.

yaml
name: QuickStart example # "sources" describe where the information to use comes from. # Here: the latest Jenkins weekly version. sources:   jenkinsVersion:     name: Get the latest Jenkins weekly version     kind: jenkins     spec:       release: weekly # "conditions" describe what must be true before any target is updated. # Here: the matching Docker image must exist on DockerHub. conditions:   dockerimage:     name: Is the Jenkins weekly tag published on DockerHub     kind: dockerimage     spec:       image: jenkins/jenkins # "targets" describe what to update with the source value. # Here: the key "$.container.tag" of the file "data.yaml". targets:   dataFile:     name: Bump the Jenkins Docker image tag     kind: yaml     spec:       file: data.yaml       key: $.container.tag
text
$ updatecli diff
source: jenkinsVersion ✔ version "2.575" found for the Jenkins weekly release
condition: dockerimage ✔ docker image jenkins/jenkins:2.575 found
target: dataFile ⚠ - change detected:
	* key "$.container.tag" should be updated from "2.475" to "2.575", in file "data.yaml"

어디에 쓸 수 있고 무엇을 확인할까?

값은 컨테이너 레지스트리, Maven 저장소, Git, HTTP API 등에서 가져올 수 있다. 대상은 YAML 키, Dockerfile, Helm 차트, go.mod, 일반 텍스트 파일의 한 줄 등이다. 패키지 관리자가 다루지 않는 파일을 포함해 관련 파일 여러 개를 지정한 순서대로 업데이트할 수도 있다.

조건에는 값이 실제로 게시됐는지 확인하는 규칙이나 알려진 취약점이 있는지 확인하는 규칙을 둘 수 있다. 취약점 확인 방법은 OSV 취약점 플러그인 문서에서 다룬다. 이는 도구가 조건 검사를 제공한다는 설명이며, 모든 업데이트가 안전하다는 독립 검증을 뜻하지는 않는다.

Updatecli는 서버나 데이터베이스 없이 단일 실행 파일로 작동한다. 노트북이나 CI 환경에서 실행할 수 있으며, 매니페스트와 업데이트 대상 파일이 상태를 이루는 전부라고 안내한다. Apache-2.0 라이선스의 오픈소스다.

시작 안내는 빠른 시작 문서에 있다. macOS에서는 다음 명령으로 Homebrew 설치를 할 수 있으며, 다른 설치 방법에는 Linux 패키지, Windows, Docker, Go 등이 제시돼 있다.

sh
brew tap updatecli/updatecli && brew install updatecli

더 자세한 내용은 소개 문서, 플러그인 문서, 변경 기록에서 확인할 수 있다. 저장소를 살펴 매니페스트를 만드는 자동 탐색, 매니페스트를 OCI 아티팩트로 공유하는 정책 기능, 여러 정책을 한 파일에서 실행하는 Compose도 제공한다. 파이프라인 보고서를 위한 대시보드 Udash는 실험 기능이다.

설치 방식과 플러그인은 환경에 맞춰 확인할 만하다. 원문은 요금이나 각 플러그인의 지원 범위, 실험 중인 Udash의 안정성 조건은 밝히지 않는다.