CI/CD 개념과 파이프라인
3. 코드 예제
예제 1: 소스 준비와 ci.sh 의 run_step 함수 — 01_pipeline.sh 발췌
run_step() {
STEP=$((STEP + 1))
local name="$1"; shift
local start=$SECONDS
echo "-- 단계 $STEP: $name --"
if "$@"; then
local elapsed=$((SECONDS - start))
echo "$name ${elapsed}s" >> timing.log
echo "[OK] $name"
else
local code=$?
echo "[FAIL] $name (종료 코드 $code)"
echo "파이프라인 중단"
exit "$code"
fi
}== 1. 소스 준비 (checkout 대신) ==
파일 3개 준비 완료: Main.java, Calc.java, CalcTest.java
== 2. 로컬 파이프라인 러너 생성 (ci.sh) ==
ci.sh 생성 완료 (34줄)run_step 은 이름과 명령을 받아 실행하고, 성공하면 [OK], 실패하면 종료 코드를 남기고 그 자리에서 exit 합니다. "$@" 로 명령을 그대로 실행해 javac·java·jar 어떤 명령이든 같은 함수로 감쌀 수 있습니다.
예제 2: 성공 시나리오 실행 — 01_pipeline.sh 발췌
run_step "checkout" true
run_step "build" "$JAVA_BIN/javac" -encoding UTF-8 -d out src/Main.java src/Calc.java src/CalcTest.java
run_step "test" "$JAVA_BIN/java" -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -cp out CalcTest
run_step "정적 검사" "$JAVA_BIN/javac" -encoding UTF-8 -Xlint:all -Werror -d out src/Main.java src/Calc.java src/CalcTest.java
run_step "패키징" "$JAVA_BIN/jar" --create --file deploy/app.jar --main-class Main -C out .
run_step "배포" bash -c 'echo "deploy/app.jar 를 배포 대상 서버로 복사한다고 가정"'== 3. 파이프라인 실행 - 성공 시나리오 ==
-- 단계 1: checkout --
[OK] checkout
-- 단계 2: build --
[OK] build
-- 단계 3: test --
테스트 통과: 2+3 = 5
[OK] test
-- 단계 4: 정적 검사 --
[OK] 정적 검사
-- 단계 5: 패키징 --
[OK] 패키징
-- 단계 6: 배포 --
deploy/app.jar 를 배포 대상 서버로 복사한다고 가정
[OK] 배포
파이프라인 성공
종료 코드: 0여섯 단계가 순서대로 실행되며, 테스트 단계는 CalcTest.main 이 직접 검증한 결과를 출력합니다. 정적 검사 단계는 같은 소스를 -Xlint:all -Werror 로 다시 컴파일해 경고를 오류로 취급합니다.
예제 3: 재현 가능한 산출물 확인 — 01_pipeline.sh 발췌
echo "패키징 결과 (클래스 파일 해시, jar 자체는 타임스탬프 때문에 제외):"
"$JAVA_BIN/jar" tf deploy/app.jar | grep '\.class