CircleCI
Alusta Autonomy käivitusi CircleCI-st veebieelvaate URL-i või mobiilibuildi jaoks ja kukuta pipeline läbi, kui iga käivitus ei läbi.
Kasuta CircleCI-d, et alustada Autonomy käivitusi pärast juurutust või mobiilibuildi. Sellel lehel on jagatud abiskript, terviklikud konfiguratsioonid ja tulemuse tingimus. Töö läbib ainult siis, kui iga käivitus on Passed.
Koht töövoos
Käivita Autonomy pärast seda, kui eelvaade vastab või mobiilibuild on olemas. Iga allolev konfiguratsioon on terviklik alternatiivne .circleci/config.yml; kopeeri oma platvormi oma. Olemasolevas töövoos jäta oma juurutustöö alles ja tee Autonomy töö sellest sõltuvaks võtmega requires. Anna edasi lõplik juurutatud URL, mitte CI-konteineri localhost.
Vajalikud saladused
Ava CircleCI-s Project Settings → Environment Variables ja lisa allolevad väärtused. CircleCI lisab need töö shelli; ära kirjuta API-võtit YAML-i. Samu väärtusi võib hoida ka piiratud kontekst: lisa see võtmega context töö kirjele jaotises workflows, mitte jaotises jobs.
-
AUTONOMY_API_KEY: organisatsiooni API-võti, mis algab eesliitegaaut_. Omanikud ja administraatorid loovad võtmeid lehel Organization → API keys. -
AUTONOMY_TEST_PLAN_ID: ava plaan projekti lehel Test plans ja kopeeri lehe URL-i viimane osa,/p/<project>/plans/<id>. Plaanis peab olema vähemalt üks selle platvormi testjuhtum. Kui soovid hoopis üht testjuhtumit käivitada, seaAUTONOMY_TEST_CASE_ID(aadressist/p/<project>/tests/<id>) ja jäta plaani ID seadmata. Sea täpselt üks neist kahest. - Veeb:
PREVIEW_URL, kättesaadav HTTPS-juurutuse URL. - Mobiil:
APP_IDENTIFIER, buildi iOS-i bundle ID või Androidi paketi nimi. - Valikuline:
AUTONOMY_ENVIRONMENT_SLUGkäivitab selle töö URL-i või buildi asemel sama projekti salvestatud keskkonnas, selle sihtmärkide ja keskkonna väärtustega. Abiskript jätab siis üleslaadimise vahele.AUTONOMY_WAIT_SECONDSmuudab kogu ooteaega.
Ilma keskkonnata pole käivitusel keskkonna väärtusi: samm, mis kasutab {{env.NAME}} väärtust, lõpeb tulemusega Couldn't start. Sea AUTONOMY_ENVIRONMENT_SLUG või kasuta testjuhtumeid, mis keskkonna väärtusi ei vaja.
Kasuta iga platvormi jaoks eraldi plaani. Allolevad konfiguratsioonid eeldavad, et AUTONOMY_TEST_PLAN_ID ja APP_IDENTIFIER vastavad retseptile. Platvormide kombineerimiseks anna väärtused eraldi kontekstide või platvormipõhiste muutujate kaudu. Testjuhtumite koondamise kohta vaata Testiplaanid ja ajakavad.
Veebieelvaate URL
Loo oma hoidlasse .ci/, salvesta see skript failina .ci/autonomy.sh ja lisa see commit'i koos failiga .circleci/config.yml. Tööd kutsuvad seda Bashiga, seega ei pea see olema käivitatav. See vajab Bashi, curl'i ja jq-d, mis on allolevates Linuxi tõmmistes olemas.
#!/usr/bin/env bash
# Usage: bash .ci/autonomy.sh web|ios|android
# Starts Autonomy runs for this CI job and exits 0 only if every run passed.
set -euo pipefail
set +x
: "${AUTONOMY_API_KEY:?Set an aut_ organization API key}"
: "${AUTONOMY_REQUEST_ID:?Set an ID that is unique for this CI job attempt}"
platform="${1:?Usage: bash .ci/autonomy.sh web|ios|android}"
api="${AUTONOMY_API_URL:-https://api.autonomyqa.com}"
api="${api%/}"
post() {
curl --fail-with-body --silent --show-error \
--connect-timeout 15 --max-time 90 \
-X POST "$api$1" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H 'Content-Type: application/json' --data-binary "$2"
}
# 1. What to run: a test plan or one test case.
if [ -n "${AUTONOMY_TEST_PLAN_ID:-}" ] && [ -z "${AUTONOMY_TEST_CASE_ID:-}" ]; then
what=$(jq -n --arg id "$AUTONOMY_TEST_PLAN_ID" '{testPlanId:$id}')
elif [ -n "${AUTONOMY_TEST_CASE_ID:-}" ] && [ -z "${AUTONOMY_TEST_PLAN_ID:-}" ]; then
what=$(jq -n --arg id "$AUTONOMY_TEST_CASE_ID" '{testCaseId:$id}')
else
echo 'Set exactly one of AUTONOMY_TEST_PLAN_ID or AUTONOMY_TEST_CASE_ID.' >&2
exit 2
fi
# 2. Where to run: a saved environment, or this job's preview URL or build.
if [ -n "${AUTONOMY_ENVIRONMENT_SLUG:-}" ]; then
where=$(jq -n --arg slug "$AUTONOMY_ENVIRONMENT_SLUG" '{environmentSlug:$slug}')
else
case "$platform" in
web)
: "${PREVIEW_URL:?Set PREVIEW_URL, or AUTONOMY_ENVIRONMENT_SLUG}"
where=$(jq -n --arg url "$PREVIEW_URL" '{targets:{web:{baseUrl:$url}}}')
;;
ios|android)
: "${ARTIFACT_PATH:?Set the path to the zipped .app, .apk or .aab}"
: "${APP_IDENTIFIER:?Set the iOS bundle ID or Android package name}"
file=$(basename "$ARTIFACT_PATH")
bytes=$(wc -c < "$ARTIFACT_PATH" | tr -d '[:space:]')
if [ "$platform" = ios ]; then
type=application/zip
else
type=application/vnd.android.package-archive
fi
upload=$(post /api/artifacts/upload-url "$(jq -n \
--arg platform "$platform" --arg fileName "$file" \
--arg contentType "$type" --argjson declaredBytes "$bytes" \
'{platform:$platform,fileName:$fileName,contentType:$contentType,declaredBytes:$declaredBytes}')")
storage=$(jq -er '.storageId' <<< "$upload")
intent=$(jq -er '.intentId' <<< "$upload")
curl --fail-with-body --silent --show-error \
--connect-timeout 15 --max-time 600 \
-X PUT "$(jq -er '.uploadUrl' <<< "$upload")" \
-H "Content-Type: $type" --data-binary "@$ARTIFACT_PATH"
scan=$(post /api/artifacts/scan "$(jq -n \
--arg storageId "$storage" --arg intentId "$intent" \
'{storageId:$storageId,intentId:$intentId}')")
if [ "$(jq -r '.status' <<< "$scan")" != clean ]; then
echo 'The build did not pass the safety check, so no run was started:' >&2
jq -r '.findings[]?.message' <<< "$scan" >&2
exit 1
fi
where=$(jq -n --arg p "$platform" --arg storageId "$storage" \
--arg fileName "$file" --arg id "$APP_IDENTIFIER" \
'{targets:{($p):({storageId:$storageId,sourceMode:"upload",fileName:$fileName}
+ (if $p == "ios" then {bundleId:$id} else {packageName:$id} end))}}')
;;
*) echo 'Usage: bash .ci/autonomy.sh web|ios|android' >&2; exit 2 ;;
esac
fi
# 3. Start the runs. A plan starts one run per test case.
# The request ID's prefix (github, gitlab, ...) names the CI provider.
body=$(jq -n --argjson what "$what" --argjson where "$where" \
--arg platform "$platform" \
--arg branch "${AUTONOMY_BRANCH:-}" --arg pr "${AUTONOMY_PR:-}" \
--arg commitSha "${AUTONOMY_COMMIT_SHA:-}" \
--arg provider "${AUTONOMY_REQUEST_ID%%:*}" \
--arg key "$AUTONOMY_REQUEST_ID:$platform" \
'$what + $where + ({
platforms: [$platform],
branch: $branch,
pr: $pr,
deployment: ({provider: $provider, branch: $branch, commitSha: $commitSha}
| with_entries(select(.value != ""))),
idempotencyKey: $key
} | with_entries(select(.value != "")))')
run_ids=$(post /api/v1/run.trigger "$body" | jq -er '.runIds[]')
printf 'Started Autonomy runs:\n%s\n' "$run_ids"
# 4. Follow each run until it ends. run.get waits up to 25 s for a change;
# sending the last cursor back makes each call wait for something new.
deadline=$((SECONDS + ${AUTONOMY_WAIT_SECONDS:-1200}))
all_passed=true
for run_id in $run_ids; do
cursor=null
while :; do
left=$((deadline - SECONDS))
if [ "$left" -le 0 ]; then
echo "Stopped waiting for run $run_id after AUTONOMY_WAIT_SECONDS. It keeps going in Autonomy." >&2
exit 1
fi
wait_ms=$(( left < 25 ? left * 1000 : 25000 ))
run=$(post /api/v1/run.get "$(jq -n --arg runId "$run_id" \
--argjson cursor "$cursor" --argjson waitMs "$wait_ms" \
'{runId:$runId,cursor:$cursor,waitMs:$waitMs}')")
cursor=$(jq '.cursor' <<< "$run")
status=$(jq -r '.status' <<< "$run")
[ "$status" = queued ] || [ "$status" = running ] || break
done
name="$(jq -r '.testCaseName' <<< "$run") ($run_id)"
case "$status" in
passed)
echo "Passed: $name" ;;
failed)
echo "Failed: $name. Open the run in Autonomy to see which step failed." >&2
all_passed=false ;;
couldnt_start)
echo "Couldn't start: $name. The environment couldn't be tested, so this says nothing about your app. Open the run for the reason, fix it and run again." >&2
all_passed=false ;;
cancelled)
echo "Cancelled: $name." >&2
all_passed=false ;;
*)
echo "Unexpected status $status: $name." >&2
all_passed=false ;;
esac
done
if [ "$all_passed" != true ]; then
echo 'Not every Autonomy run passed.' >&2
exit 1
fi
echo 'Every Autonomy run passed.'Salvesta see konfiguratsioon failina .circleci/config.yml. Esimese käivituse jaoks sea PREVIEW_URL juba juurutatud eelvaatele ja lükka failid harusse staging. Valmisolekukontroll peab läbima enne, kui Autonomy alustab.
Commit'ipõhiste eelvaadete puhul ekspordi PREVIEW_URL ja kutsu abiskripti samas run sammus. Tavaline export ei kandu teise sammu üle. Selle kasutamiseks sama töö hilisemas run sammus lisa juurutussammus pärast URL-i teadasaamist see rida; CircleCI laadib BASH_ENV hilisemates sammudes:
printf 'export PREVIEW_URL=%q\n' "$PREVIEW_URL" >> "$BASH_ENV"Eraldi tööde puhul kirjuta URL ühe reana faili /tmp/autonomy-preview/preview-url.txt. Kasuta juurutustöös persist_to_workspace väärtustega root: /tmp/autonomy-preview ja paths: [preview-url.txt]. Kasuta Autonomy töös attach_workspace väärtusega at: /tmp/autonomy-preview ja käivita enne valmisolekukontrolli export PREVIEW_URL="$(cat /tmp/autonomy-preview/preview-url.txt)". BASH_ENV ei kanna väärtusi tööde vahel üle.
version: 2.1
jobs:
autonomy-web:
docker:
- image: cimg/base:current
steps:
- checkout
- run:
name: Check preview and run Autonomy
no_output_timeout: 30m
command: |
set -euo pipefail
set +x
: "${PREVIEW_URL:?Set the deployed preview URL}"
curl --fail --silent --show-error --location \
--connect-timeout 15 --max-time 30 \
--retry 10 --retry-delay 3 --retry-all-errors \
--output /dev/null "$PREVIEW_URL"
export AUTONOMY_BRANCH="${CIRCLE_BRANCH:-local}"
export AUTONOMY_COMMIT_SHA="${CIRCLE_SHA1:-$(git rev-parse HEAD)}"
export AUTONOMY_REQUEST_ID="circleci:${CIRCLE_WORKFLOW_ID:-local}:${CIRCLE_BUILD_NUM:-$(date +%s)-$$}"
bash .ci/autonomy.sh web
workflows:
preview-qa:
jobs:
- autonomy-web:
filters:
branches:
only: stagingKohalikuks kontrolliks macOS-is või Linuxis käivita Docker ja laadi alla ametlik pärand-CLI väljalase v0.1.47860. Vali oma operatsioonisüsteemi (darwin macOS-i, linux Linuxi jaoks) ja protsessori (arm64 Apple siliconi või ARM-i, amd64 Inteli või AMD jaoks) .tar.gz. Paki see lahti ja pane käivitatav fail circleci-v0 oma PATH-i. Praegune CLI v1 eemaldas kohaliku käivitamise, seega kasutavad allolevad käsud pärandbinaari.
Ekspordi kolm väärtust oma kohalikus shellis ja käivita need käsud commit'itud hoidlast. CircleCI ei impordi projekti saladusi ega kontekste kohapeale, seega on iga -e vajalik. Versiooni 2.1 konfiguratsioon tuleb enne käivitamist töödelda.
circleci-v0 config validate .circleci/config.yml
circleci-v0 config process .circleci/config.yml > /tmp/autonomy-circleci.yml
circleci-v0 local execute -c /tmp/autonomy-circleci.yml \
-e "AUTONOMY_API_KEY=$AUTONOMY_API_KEY" \
-e "AUTONOMY_TEST_PLAN_ID=$AUTONOMY_TEST_PLAN_ID" \
-e "PREVIEW_URL=$PREVIEW_URL" \
-e "AUTONOMY_WAIT_SECONDS=${AUTONOMY_WAIT_SECONDS:-1200}" \
autonomy-webKohalik käivitamine käivitab ainult selle Dockeri töö. See ei tõesta töövoo ajastamist, kontekstide piiranguid, macOS-is käivitamist ega iOS-i tööruumi üleandmist.
Mobiiliartefakti üleandmine
iOS-i ja Androidi puhul küsib abiskript faili suuruse ja tüübiga üleslaadimise URL-i, laadib faili üles päringuga PUT ning saadab turvakontrollile nii storageId kui ka intentId väärtuse. See alustab käivitused alles pärast tulemust clean. Jäta ülaltoodud .ci/autonomy.sh alles ja asenda .circleci/config.yml vajaliku konfiguratsiooniga.
iOS
iOS-i testimine tuleb peagi. Hoia see alles ajaks, mil see on saadaval. Seni ei alusta Autonomy iOS-is käivitusi.
Ehita simulaatori .app macOS-is, paki see zip-faili, et õigused ja sümbolingid säiliksid, ning anna zip Linuxi tööle edasi käskudega persist_to_workspace ja attach_workspace. Üleslaadimine ja ootamine kasutavad Linuxi krediiti.
See näide eeldab natiivset Xcode'i projekti asukohas ios/MyApp.xcodeproj, jagatud skeemi MyApp ja toodet MyApp.app. Asenda need nimed enda omadega. Xcode'i tööruumi puhul asenda -project valikuga -workspace ja selle teega; jäta oma sõltuvuste paigaldamise sammud enne xcodebuild käsku alles. Ära laadi üles seadme .ipa faili.
CircleCI dokumenteerib praegu versiooni 27.0.0 ressursiklassil m4pro.medium. macOS on Free paketis saadaval selle krediidimahu piires; kontrolli enne build'ide käivitamist oma saldot. circleci-v0 local execute seda macOS-i tööd käivitada ei saa.
version: 2.1
jobs:
build-ios:
macos:
xcode: "27.0.0"
resource_class: m4pro.medium
steps:
- checkout
- run:
name: Build and zip the simulator app
command: |
set -euo pipefail
xcodebuild \
-project ios/MyApp.xcodeproj \
-scheme MyApp \
-configuration Release \
-sdk iphonesimulator \
-destination 'generic/platform=iOS Simulator' \
-derivedDataPath ios/build \
CODE_SIGNING_ALLOWED=NO build
mkdir -p /tmp/autonomy-ios
(cd ios/build/Build/Products/Release-iphonesimulator && \
zip -qry /tmp/autonomy-ios/MyApp.app.zip MyApp.app)
- persist_to_workspace:
root: /tmp/autonomy-ios
paths:
- MyApp.app.zip
autonomy-ios:
docker:
- image: cimg/base:current
steps:
- checkout
- attach_workspace:
at: /tmp/autonomy-ios
- run:
name: Upload and run Autonomy
no_output_timeout: 30m
command: |
set -euo pipefail
set +x
export ARTIFACT_PATH=/tmp/autonomy-ios/MyApp.app.zip
export AUTONOMY_BRANCH="$CIRCLE_BRANCH"
export AUTONOMY_COMMIT_SHA="$CIRCLE_SHA1"
export AUTONOMY_REQUEST_ID="circleci:$CIRCLE_WORKFLOW_ID:$CIRCLE_BUILD_NUM"
bash .ci/autonomy.sh ios
workflows:
ios-qa:
jobs:
- build-ios:
filters:
branches:
only: staging
- autonomy-ios:
requires:
- build-ios
filters:
branches:
only: stagingAndroid
Linuxi Androidi tõmmises on SDK, Java, curl ja jq. See näide eeldab natiivset Gradle'i projekti kaustas android/, selle commit'itud käivitatavat gradlew faili ja mooduli app silumis-APK-d. Muuda Gradle'i ülesannet ja APK teed oma mooduli või toote flavor'i järgi. Jäta sõltuvuste ettevalmistus alles, kui rakendus vajab ka JavaScripti või muid buildi tööriistu. Sobib ka .aab.
version: 2.1
jobs:
autonomy-android:
docker:
- image: cimg/android:2026.08
resource_class: medium
steps:
- checkout
- run:
name: Build the debug APK
command: |
set -euo pipefail
cd android
./gradlew --no-daemon :app:assembleDebug
- run:
name: Upload and run Autonomy
no_output_timeout: 30m
command: |
set -euo pipefail
set +x
export ARTIFACT_PATH=android/app/build/outputs/apk/debug/app-debug.apk
export AUTONOMY_BRANCH="$CIRCLE_BRANCH"
export AUTONOMY_COMMIT_SHA="$CIRCLE_SHA1"
export AUTONOMY_REQUEST_ID="circleci:$CIRCLE_WORKFLOW_ID:$CIRCLE_BUILD_NUM"
bash .ci/autonomy.sh android
workflows:
android-qa:
jobs:
- autonomy-android:
filters:
branches:
only: stagingPipeline'i sidumine tulemusega
Abiskript alustab käivitused päringuga POST /api/v1/run.trigger ja prindib nende ID-d. Testiplaan alustab iga testjuhtumi kohta ühe käivituse. Seejärel jälgib see iga käivitust päringuga POST /api/v1/run.get, saates tagasi viimase cursor väärtuse koos waitMs: 25000, nii et iga kutse ootab, kuni käivitus muutub. Vastus timedOut: true tähendab ainult, et midagi pole veel muutunud. Vaata Käivitused ja välised tõendid.
| Käivituse tulemus | Töö | Mida logi ütleb |
|---|---|---|
| Passed | Läbib, kui ka kõik teised käivitused läbisid. Ebastabiilne läbimine loeb läbinuks. | Passed |
| Failed | Kukub läbi. | Ava käivitus, et näha, milline samm läbi kukkus ja miks, sealhulgas Runner problem. |
| Couldn't start | Kukub läbi. | Keskkonda ei saanud testida, näiteks build ei paigaldunud või mõni väärtus puudus. See ei ütle sinu rakenduse kohta midagi; paranda põhjus ja käivita uuesti. |
| Cancelled | Kukub läbi. | Cancelled |
Töö kukub läbi ka API-vigade, turvakontrollist mitte läbi tulnud buildi ja ooteaja lõppemise korral. AUTONOMY_WAIT_SECONDS on kõigi käivituste kogu ooteaeg, vaikimisi 1200 sekundit. Hoia CI-töö ajalimiit sellest pikem, lisades buildi ja üleslaadimise aja. CI-töö peatamine ei tühista juba alanud käivitusi.
AUTONOMY_REQUEST_ID koos lisatud platvormiga saab päringu run.trigger väärtuseks idempotencyKey: kui sama tööpüüe saadab päringu uuesti, saab see uute asemel tagasi samad käivitused. Anna igale tööpüüdele oma ID. Esimese koolonini ulatuv osa saadetakse juurutuse pakkujana ning haru ja commit saadetakse koos käivitustega. Päringu ja vastuse täielik kuju on lehel Toimingud.
Suurenda no_output_timeout väärtust koos muutujaga AUTONOMY_WAIT_SECONDS: muidu võib CircleCI vaikimisi vaikuselimiit tervisliku ootamise katkestada. Pane väljalasketööd võtmega requires Autonomy töö järele, et käivitus, mis ei läbinud, blokeeriks edutamise.
Harude ja sündmuste strateegia
Need näited käivituvad harul staging. Laienda filters ainult usaldusväärsetele harudele. Kasuta üle vaadatud eelvaate muudatuste puhul väikest suitsutesti plaani ning väljalaske- või ajastatud pipeline'ide puhul suuremaid plaane. Seadista push-, pull request'i või ajakava päästikud oma ühendatud VCS-i CircleCI projektis; ainult harufiltrid neid ei loo.
Hoia Pass secrets to builds from forked pull requests välja lülitatuna, kus see seade on olemas. Vaata ebausaldusväärne kood üle enne selle käivitamist töös, millel on organisatsiooni API-võti, ja piira iga jagatud kontekst ettenähtud projektide ja usaldusväärsete inimestega. Päringu ID ühendab töövoo ID ja töö numbri, nii et uus tööpüüe alustab uued käivitused, samas kui ühe püüde jooksul korratud päring saab tagasi samad käivitused.
Teenusepakkuja viited
Kontrollitud CircleCI avaliku dokumentatsiooni põhjal 20. septembril 2026:
Ei leidnud?