사람함께에이전트▾
사람 — 직접 정하고 책임지는 비즈니스 규칙과 흐름. 직접 읽어보세요.
함께 — 개념은 알아두고, 세부 규칙은 에이전트가 따릅니다.
에이전트 — 에이전트가 따르는 규칙과 레퍼런스. 필요할 때 찾아보세요.
빌드 파이프라인
Akan Cloud는 앱마다
build, docker, deploy 순서로 빌드하고 배포합니다. 그 앞뒤에 넣을 stage는 akan.config.ts에 적고, push하기 전에 akan pipeline dry-run으로 결과를 확인합니다.이 페이지에서 쓰는 말
용어설명
stage
테스트 실행처럼 이름이 붙은 빌드의 한 단계로, 셸 명령을 하나 이상 담습니다.
builddockerdeploy
Akan Cloud가 앱마다 실행하는 내장 액션으로,
{ use }로 위치를 정합니다.plan
설정으로 만든, 빌드 한 번이 실행할 내용입니다.
akan pipeline으로 로컬에서 봅니다.두 개의 파일
앱
그 앱의 stage를 순서대로 적으며, 세 액션도 함께 적습니다.
apps/<app>/akan.config.ts워크스페이스
모든 앱의 앞뒤에 실행할 stage와 빌드를 마무리할 step입니다.
akan.config.ts순서
앱에 stage 추가하기
앱 설정에
pipeline을 선언합니다. 이 목록이 기본값을 대신하므로, 세 액션을 적고 그 사이 알맞은 자리에 stage를 넣습니다:apps/web/akan.config.ts
- 자리가 실행 시점을 정합니다. Test는
build뒤에 있으므로, 모든 앱의 빌드가 끝난 뒤 이미지를 만들기 전에 실행됩니다. - 필요할 때만 실행합니다.
when: { branch: "main" }이나when: { changed: ["apps/web/**"] }를 쓰면 그 브랜치에서만, 또는 그 경로가 바뀐 뒤에만 stage를 실행합니다. - 실패해도 되는 검사가 있습니다.
allowFailure: true를 쓰면 그 stage가 실패해도 빌드는 실패하지 않습니다.
stage와 step의 키는 앱 설정 › 파이프라인에 모두 있습니다.
모든 앱의 앞뒤에 step 실행하기
워크스페이스 전체 lint, end-to-end 테스트, 채팅 알림처럼 어느 한 앱의 것이 아닌 일은 워크스페이스 루트의
akan.config.ts에 둡니다:akan.config.ts
before는 맨 처음,after는 맨 끝에 실행됩니다.beforestage는 모든 앱 stage보다 먼저,afterstage는 모든 앱의 마지막 stage 뒤에 실행됩니다.matrix: "apps"는 앱마다 stage를 하나씩 복사합니다. 복사본마다$AKAN_CI_APP에 자기 앱 이름이 들어갑니다.post는 결과를 따릅니다. 빌드가 끝난 결과에 따라success,failure,canceled중 하나의 step을 실행하고, 이어서always의 step을 실행합니다.
step에 시크릿 주기
step은 webhook URL 같은 자격 증명을 환경변수로 읽습니다. 워크스페이스 루트에서 한 번 올려 둡니다:
Terminal
그다음 위의
Notify step처럼 step의 secrets에 이름을 적고, 스크립트에서 $DISCORD_WEBHOOK를 읽습니다.- 값은 쓰기 전용입니다. 숨김 입력, 파이프로 넘긴 stdin,
--file중 하나로 받고, 어떤 명령으로도 다시 볼 수 없습니다. - 브랜치마다 다른 값을 둘 수 있습니다.
--branch main으로 올린 값은main빌드에서만, 모든 브랜치용 값보다 우선해 쓰입니다. - 요청한 step만 받습니다.
secrets에 그 이름이 없는 step은 값을 볼 수 없습니다.


저장소에 push할 수 있는 사람은 시크릿을 읽을 수 있습니다. 그 사람이 추가한 step이 값을 출력할 수 있기 때문입니다. GitHub Actions 시크릿과 같은 모델이므로, push 권한을 모든 시크릿에 대한 권한으로 여기세요.
push 전에 확인하기
akan pipeline은 같은 파일로 Akan Cloud와 같은 plan을 만들 뿐, 아무것도 실행하지 않습니다:Terminal
validate는 잘못된 곳을 알려 줍니다. 오류와 경고마다 파일과pipeline.action.dockerWithoutBuild같은 코드가 붙고, 오류가 있으면 종료 코드 1로 끝납니다.- 플래그로 빌드를 가정합니다.
--branch,--apps,--trigger로 특정 빌드가 무엇을 실행할지 봅니다. 자세한 내용은 파이프라인 명령에 있습니다.
주의할 점
- 목록이 파이프라인 전부입니다.
pipeline에{ use: "deploy" }를 빠뜨린 앱은 빌드만 하고 배포하지 않습니다. - 앱 stage는 스스로 완결돼야 합니다. 루트
beforestage가 디스크에 남긴 것에 기대지 마세요. 이 워크스페이스에서 미러링한 저장소(subspace)에서 빌드하는 앱은 자기 설정만 가져가므로, 그곳에서는 루트 stage가 실행되지 않습니다. - subspace에는 루트에만 있는 경로가 없습니다.
scripts/나infra/처럼 워크스페이스 루트에만 둔 스크립트를 부르는 stage는 그곳에서 실패합니다. 앱 stage가 쓰는 파일은 앱이나 그 라이브러리 안에 둡니다. - 시크릿은 프로젝트 하나에 속합니다. subspace는 자기 프로젝트에서 빌드하므로, 그곳의 step이 읽는 시크릿은 그 프로젝트에도 올려야 합니다.