Earthly로 CI 파이프라인 컨테이너화
Earthly에 뛰어들기 전에 우주에서 가장 큰 경쟁자인 Dagger에 대해 쓰고 싶습니다. Dagger는 로컬에서 재현 가능한 컨테이너화된 CI 파이프라인을 대상으로 하는 Docker Inc.(실제로 부르는 이름이 무엇이든)의 새로운 프로젝트입니다. 한 가지 점을 제외하고는 멋지게 들립니다. CUE 언어를 사용하여 작업을 정의합니다. 이유가 있는 것 같지만 빌드 작업을 만들기 위해 언어를 배우고 싶지는 않습니다. 말도 안 돼요, 죄송합니다.
그것이 Earthly 이 그림에 들어오는 곳입니다. Makefile과 Dockerfile 구문을 결합하므로 학습 곡선이 거의 제로에 가깝습니다 👏. 캐싱, 재사용성, 라이브 디버깅, 비밀 관리 등과 같은 많은 기능이 있습니다. 자세한 목록은 설명서를 참조하십시오(문서의 경우 +100).
그것은 공예 시간 아기입니다!
간단한 Go lint 작업으로 시작하여 먼저 Docker In Docker에 대해 알아봅시다.
# cat Earthfile
VERSION 0.6
lint:
FROM earthly/dind:alpine
WORKDIR /workdir
COPY . ./
WITH DOCKER --pull golangci/golangci-lint:v1.49.0
RUN docker run -w $PWD -v $PWD:$PWD golangci/golangci-lint:v1.49.0 golangci-lint run --timeout 240s
END
작업을 실행하려면 Earthly를 설치해야 합니다.
# cat Makefile
BIN_PATH = $(shell pwd)/bin
$(shell mkdir $(BIN_PATH) &>/dev/null)
EARTHLY = $(BIN_PATH)/earthly
earthly:
ifeq (,$(wildcard $(EARTHLY)))
curl -L https://github.com/earthly/earthly/releases/download/v0.6.23/earthly-linux-amd64 -o $(EARTHLY)
chmod +x $(EARTHLY)
endif
make earthly && ./bin/earthly --allow-privileged +lint
이보다 더 간단할 수는 없다고 생각합니다.
빌드 및 캐시 종속성
# cat Earthfile
VERSION 0.6
FROM golang:1.18.0
WORKDIR /workdir
deps:
COPY go.mod go.sum ./
RUN go mod tidy
RUN go mod download
SAVE ARTIFACT go.mod AS LOCAL go.mod
SAVE ARTIFACT go.sum AS LOCAL go.sum
test:
FROM +deps
COPY . ./
RUN make _test
여기에 무언가를 쓰고 싶지만 코드가 모든 것을 설명합니다. 작업을 가동하려면 이번에는
--allow-privileged
없이 다음 명령을 실행해야 합니다../bin/earthly +test
자동화, 자동화, 자동화, ...
먼저 변경 사항을 원격 Git에 푸시하기 전에 작업을 실행하고 싶습니다. Husky은 Git 후크를 관리하는 매우 편리한 도구처럼 보입니다.
허스키 다운로드:
# cat Makefile
husky:
GOBIN=$(BIN_PATH) go install github.com/automation-co/[email protected]
make husky && ./bin/husky init
후크 파일 편집:
# cat .husky/hooks/pre-commit
#!/bin/bash
husky install
# cat .husky/hooks/pre-push
#!/bin/bash
if [[ "$SKIP_GIT_PUSH_HOOK" ]]; then exit 0; fi
set -e
if git status --short | grep -qv "??"; then
git stash
function unstash() {
git reset --hard
git stash pop
}
trap unstash EXIT
fi
make lint test
git diff --exit-code --quiet || (git status && exit 1)
후크 설치:
./bin/husky install
Makefile 대상 만들기:
# cat Makefile
lint: earthly
$(EARTHLY) -P +lint
test: earthly
$(EARTHLY) +test
그리고 GitHub Action 통합도 여전히 중앙 위치에서 작업을 실행해야 합니다.
name: Lint and test
on: [push]
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: make lint
go-test:
name: go tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: make test
즐기세요 🎉
이런 식으로 각 커밋 전에 Husky는 최신 버전의 후크를 설치한 다음 푸시 전에 모든 작업을 실행합니다. GitHub는 푸시 후 작업을 실행하므로 고품질 소프트웨어를 제공하기 위해 최선을 다했습니다.
Reference
이 문제에 관하여(Earthly로 CI 파이프라인 컨테이너화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mhmxs/containerize-ci-pipelines-with-earthly-2197텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)