Bitbucket Pipelines
Bitbucket Pipelines와 Lingo.dev CI/CD를 활용한 AI 번역
Lingo.dev Bitbucket Pipelines 통합은 새로운 콘텐츠를 자동으로 현지화하고 불완전한 번역이 프로덕션에 도달하는 것을 방지하는 안전한 오픈 소스 CI/CD 통합입니다. 팀의 워크플로우 요구 사항에 따라 풀 리퀘스트를 생성하거나 브랜치에 직접 커밋합니다.
또한 리베이스를 통한 자동 충돌 해결을 구현하여 수동 개입 없이 번역이 코드와 동기화된 상태를 유지합니다.
통합은 여러 워크플로우 시나리오를 지원합니다:
- 콘텐츠 변경 사항이 푸시될 때 브랜치에 직접 커밋
- 번역 업데이트를 위한 브랜치를 대상으로 하는 풀 리퀘스트
이 가이드를 완료하면 다음을 수행할 수 있습니다:
- 코드 푸시로 트리거되는 자동화된 현지화 설정;
- 리포지토리 변수를 사용한 안전한 인증 구성;
- 직접 커밋 또는 풀 리퀘스트 워크플로우 중 선택;
- 지속적인 현지화가 기존 프로세스에 어떻게 적용되는지 이해.
시작하겠습니다!
사전 요구 사항
리포지토리 설정
리포지토리에는 유효한 i18n.json 파일로 구성된 Lingo.dev CLI가 있어야 합니다. 아직 설정하지 않았다면 먼저 CLI 빠른 시작을 완료하세요.
1단계. 인증 설정
Lingo.dev Bitbucket 통합은 번역 엔진과 리포지토리에 대한 액세스가 필요합니다. 인증은 자격 증명을 안전하게 유지하는 리포지토리 변수를 통해 이루어집니다.
API 키 추가
리포지토리 Repository settings → Repository variables로 이동한 다음 번역 엔진 자격 증명을 추가합니다:
원시 LLM API 사용자의 경우:
- 변수 이름:
OPENAI_API_KEY또는ANTHROPIC_API_KEY - 변수 값: 해당 제공업체의 API 키
Lingo.dev 엔진 사용자의 경우:
- 변수 이름:
LINGODOTDEV_API_KEY - 변수 값: lingo.dev/app의 프로젝트 API 키
Bitbucket 액세스 토큰 추가 (풀 리퀘스트 모드용)
풀 리퀘스트 모드를 사용할 계획이라면 액세스 토큰을 생성하세요:
- 저장소 설정 → 액세스 토큰 → 저장소 액세스 토큰 생성으로 이동
- 다음 범위를 부여:
- 저장소 읽기 및 쓰기
- 풀 리퀘스트 읽기 및 쓰기
- 토큰을 저장소 변수로 추가:
- 변수 이름:
BB_TOKEN - 변수 값: Bitbucket 액세스 토큰
- 변수 이름:
2단계. 워크플로우 생성
다음 기본 구성으로 bitbucket-pipelines.yml 파일을 생성하거나 업데이트하세요:
script:
- pipe: lingodotdev/lingo.dev:main
이 구성은 Lingo.dev 파이프를 사용하며 번역 엔진을 자동으로 실행합니다.
필수 권한
Bitbucket Pipelines는 저장소 변수 및 git 작업에 대한 액세스가 필요합니다:
저장소 변수:
LINGODOTDEV_API_KEY— Lingo.dev Engine 사용자에게 필수OPENAI_API_KEY또는ANTHROPIC_API_KEY— 원시 LLM API 사용자에게 필수
풀 리퀘스트 모드의 경우:
BB_TOKEN— 풀 리퀘스트 생성 및 관리에 필수
액세스 토큰 범위(풀 리퀘스트 모드 사용 시):
- 저장소 읽기 및 쓰기 — 저장소 콘텐츠 액세스 및 수정
- 풀 리퀘스트 읽기 및 쓰기 — 풀 리퀘스트 생성 및 관리
이러한 권한을 통해 통합은 콘텐츠를 읽고, 번역을 생성하며, 현지화된 콘텐츠로 저장소를 업데이트할 수 있습니다.
3단계. 워크플로우 모드 선택
Lingo.dev Bitbucket 통합은 팀의 코드 리뷰 요구사항에 따라 두 가지 운영 모드를 지원합니다.
직접 커밋 모드(기본값)
통합이 번역을 브랜치에 직접 커밋합니다:
script:
- pipe: lingodotdev/lingo.dev:main
이 모드는 다음과 같은 경우에 적합합니다:
- 개인 개발자 또는 소규모 팀
- 병합 전에 검토될 기능 브랜치
- 번역 업데이트에 별도의 검토가 필요하지 않은 프로젝트
풀 리퀘스트 모드
통합은 번역 업데이트를 위한 풀 리퀘스트를 생성합니다:
script:
- pipe: lingodotdev/lingo.dev:main
variables:
LINGODOTDEV_PULL_REQUEST: "true"
풀 리퀘스트 모드에 필요한 설정
저장소 변수:
LINGODOTDEV_API_KEY와 BB_TOKEN 모두 저장소 변수로 구성되어야 합니다.
액세스 토큰 요구 사항:
BB_TOKEN에는 저장소 및 풀 리퀘스트에 대한 읽기 및 쓰기 권한이 포함되어야 합니다.
참고: 풀 리퀘스트 모드를 사용할 때는 BB_TOKEN 변수가 필수입니다.
이 모드는 다음과 같은 경우에 적합합니다:
- 엄격한 코드 검토 요구 사항이 있는 팀
- 번역 변경 사항에 별도의 승인이 필요한 프로젝트
- 모든 변경 사항에 대한 명시적인 검토가 필요한 워크플로우
4단계. 워크플로우 시나리오
Lingo.dev Bitbucket 통합은 다양한 개발 워크플로우에 적응합니다. 이러한 시나리오를 이해하면 팀에 적합한 구성을 선택하는 데 도움이 됩니다.
시나리오 1: 기능 브랜치 업데이트 (직접 커밋)
트리거: 기능 브랜치에 푸시 작업: 번역 업데이트를 기능 브랜치에 직접 커밋
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
흐름: 콘텐츠 변경 사항이 기능 브랜치에 푸시됨 → 통합이 동일한 브랜치에 번역을 커밋
이를 통해 번역 업데이트가 기능 브랜치 내에 유지되어 원본 변경 사항과 함께 번역이 검토됩니다.
시나리오 2: 업데이트를 위한 풀 리퀘스트 (풀 리퀘스트 모드)
트리거: 구성된 모든 브랜치에 푸시 작업: 번역 업데이트가 포함된 풀 리퀘스트 생성
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
variables:
LINGODOTDEV_API_KEY: "${MY_LINGODOTDEV_API_KEY}" # or OPENAI_API_KEY/ANTHROPIC_API_KEY
BB_TOKEN: "${MY_ACCESS_TOKEN}"
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
흐름: 콘텐츠 변경 사항이 브랜치에 푸시됨 → 통합이 번역이 포함된 풀 리퀘스트 생성
이를 통해 번역 업데이트에 대한 별도의 검토가 유지됩니다.
고급 구성
추가 변수를 사용하여 통합 동작을 사용자 지정합니다:
Lingo.dev Engine 사용 예시:
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
variables:
LINGODOTDEV_API_KEY: "${MY_LINGODOTDEV_API_KEY}"
BB_TOKEN: "${MY_ACCESS_TOKEN}"
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
원시 LLM API 사용 예시:
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
variables:
OPENAI_API_KEY: "${MY_OPENAI_API_KEY}" # or ANTHROPIC_API_KEY
BB_TOKEN: "${MY_ACCESS_TOKEN}"
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
구성 옵션:
LINGODOTDEV_API_KEY— Lingo.dev Engine을 사용하는 경우 Lingo.dev Engine API 키OPENAI_API_KEY— 원시 LLM API를 사용하는 경우 OpenAI API 키ANTHROPIC_API_KEY— 원시 LLM API를 사용하는 경우 Anthropic API 키LINGODOTDEV_PULL_REQUEST— 직접 커밋 대신 풀 리퀘스트 생성 (기본값:false)LINGODOTDEV_PULL_REQUEST_TITLE— 사용자 지정 풀 리퀘스트 제목 (기본값:feat: update translations via @lingodotdev)LINGODOTDEV_COMMIT_MESSAGE— 사용자 지정 커밋 메시지 (기본값:feat: update translations via @lingodotdev)LINGODOTDEV_WORKING_DIRECTORY— 하위 디렉터리에서 통합 실행 (기본값:.)LINGODOTDEV_PROCESS_OWN_COMMITS— 이 통합에서 수행한 커밋 처리 (기본값:false)BB_TOKEN— Bitbucket 액세스 토큰 (풀 리퀘스트 모드에 필요)