GitHub Actions
Xeno-CI/build 액션의 입력과 동작, 결과 받는 법, 예시 워크플로
Xeno-CI/build@v1 액션은 GitHub의 ubuntu-latest 러너에서 XenoCI로 잡을 보내고, 로그를 스텝 로그로 흘리며, 잡의 종료 코드를 스텝 종료 코드로 돌려줍니다. GitHub App 설치는 필요 없습니다
준비
- 콘솔 API 키에서 권한이 실행과 조회인 키를 만듭니다
- 저장소 Settings → Secrets and variables → Actions에
XENOCI_API_KEY로 저장합니다(조직 시크릿도 됩니다) - 워크플로에 아래 스텝을 넣습니다
name: iOS
on:
push:
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Xeno-CI/build@v1
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
script: ./ci.sh입력
| 입력 | 필수 | 기본값 | 설명 |
|---|---|---|---|
api-key | 예 | 콘솔에서 발급한 xci_live_… 키. ::add-mask::로 가린 뒤 /api/runner/v1을 부릅니다 | |
script | 예 | 빌드 스크립트 경로(저장소 기준) | |
source | upload | upload는 체크아웃한 작업 폴더를 올립니다. git은 VM이 https://github.com/<owner>/<repo>.git을 직접 받으므로 공개 저장소만 됩니다 | |
xcode | 이미지 기본값 | Xcode 버전 | |
timeout | 30 | 제한 시간(분), 1~360 | |
artifacts | 결과물 경로를 쉼표로 나눠 적습니다. 예: build/*.ipa | ||
api-url | https://xenoci.com | API 주소 |
token(옛 CI 토큰 방식)은 이 문서의 범위 밖입니다. priority, github-status, notify-url, runner, persist는 API 키에서 쓰지 않으며, 주면 경고 한 줄을 남기고 무시합니다
source: upload일 때는 actions/checkout이 먼저 있어야 합니다. 워크플로 앞 스텝이 만든 파일까지 함께 올라갑니다. source: git일 때는 체크아웃 없이 PR의 head 커밋(github.event.pull_request.head.sha, 없으면 github.sha)을 받습니다
출력
액션은 outputs를 정의하지 않습니다. 결과는 세 가지로 받습니다
- 스텝 로그에 잡 로그와 마지막 요약 줄(
잡 job_… succeeded (종료 코드 0), 실행 125초, 과금 3분, 금액 $0.1188, 남은 잔액 $…) - 스텝 종료 코드 = 스크립트 종료 코드. 잔액과 한도 문제는 3
- 결과물은 XenoCI에 7일 보관되고 콘솔 잡 화면이나
xenocast artifacts로 받습니다
잔액 부족(insufficient_credit), 실행 중 소진(credit_exhausted), 워크스페이스 지출 한도, 티어 월 한도, 동시 실행 한도는 다음과 같은 주석을 남깁니다
::error title=XenoCI 잔액 소진::잔액이 부족해 잡을 시작하지 않았습니다 (사용 가능 $0.0100, 1분 요금 $0.0396). 충전: https://xenoci.com/console/billing포크 PR과 시크릿
pull_request이벤트는 포크에서 온 PR에 시크릿을 주지 않습니다. 포크 PR의 빌드는 건너뛰어지거나 실패할 뿐 키는 새지 않습니다. 이대로 둡니다pull_request_target에서 PR 코드를 체크아웃하고XENOCI_API_KEY를 넘기지 마세요. 포크의 코드가 키와 함께 실행됩니다
# 금지: 이렇게 쓰지 않는다
on: pull_request_target
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: Xeno-CI/build@v1
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
script: ./ci.sh- 빌드 스크립트에서
XENOCI_API_KEY를 출력하지 않습니다. CLI는 로그에 섞인 키 모양 문자열을 가립니다
예시 워크플로
시뮬레이터 테스트와 결과물
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Xeno-CI/build@v1
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
script: ./scripts/test.sh
xcode: '27.0'
timeout: '45'
artifacts: TestResults.xcresultscripts/test.sh
#!/bin/sh
set -eu
xcodebuild -scheme App \
-destination 'platform=iOS Simulator,name=iPhone 16' \
CODE_SIGNING_ALLOWED=NO -resultBundlePath TestResults.xcresult testXcode 버전 매트릭스
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
xcode: ['27.0', '26.6']
steps:
- uses: actions/checkout@v4
- uses: Xeno-CI/build@v1
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
script: ./ci.sh
xcode: ${{ matrix.xcode }}매트릭스 잡은 동시에 접수됩니다. 조직 티어의 동시 실행 한도를 넘는 잡은 거절되지 않고 대기열에서 차례를 기다립니다
공개 저장소를 VM이 직접 받기
체크아웃 없이 VM이 저장소를 받습니다. 공개 저장소에서만 됩니다
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: Xeno-CI/build@v1
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
source: git
script: ci.sh결과물을 GitHub Artifacts로 옮기기
액션 대신 CLI를 직접 쓰면 잡 ID를 받아 결과물을 러너로 내려받고 actions/upload-artifact에 넘길 수 있습니다
jobs:
archive:
runs-on: ubuntu-latest
env:
XENOCI_API_KEY: ${{ secrets.XENOCI_API_KEY }}
XENOCAST_NO_SETUP: '1'
steps:
- uses: actions/checkout@v4
- run: curl -fsSL https://github.com/Xeno-CI/xenocast/releases/latest/download/install.sh | sh
- run: |
~/.local/bin/xenocast build --script ./archive.sh --artifacts 'App.xcarchive' --json > result.json
~/.local/bin/xenocast artifacts "$(jq -r .id result.json)" --out ./dist
- uses: actions/upload-artifact@v4
with:
name: xcarchive
path: dist/--json을 쓰면 로그는 스텝 로그(표준 오류)로 흐르고 표준 출력에는 결과 JSON 하나만 남습니다
일정 실행
on:
schedule:
- cron: '0 18 * * 1-5'
jobs:
nightly:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Xeno-CI/build@v1
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
script: ./scripts/nightly.sh
timeout: '120'다른 CI
GitLab CI, Jenkins, CircleCI, Buildkite, Bitrise, Azure Pipelines에서는 비밀 변수 XENOCI_API_KEY를 두고 CLI를 설치해 같은 명령을 실행합니다
curl -fsSL https://github.com/Xeno-CI/xenocast/releases/latest/download/install.sh | sh
~/.local/bin/xenocast build --script ./ci.sh종료 코드가 빌드 종료 코드이고, 파이프라인이 취소되면(SIGTERM) 잡도 취소됩니다
다음 단계
- xenocast CLI 레퍼런스:
build옵션 전체와 종료 코드 - 결과물 내려받기: 보관 기간과 받는 방법
- 지출 한도: CI가 쓰는 금액에 상한 두기