Autonomy dokumentatsioon
Integratsioonid

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 eesliitega aut_. 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, sea AUTONOMY_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_SLUG kä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_SECONDS muudab 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.

.ci/autonomy.sh
#!/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.

.circleci/config.yml
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: staging

Kohalikuks 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-web

Kohalik 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.

.circleci/config.yml
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: staging

Android

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.

.circleci/config.yml
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: staging

Pipeline'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 tulemusTööMida logi ütleb
PassedLäbib, kui ka kõik teised käivitused läbisid. Ebastabiilne läbimine loeb läbinuks.Passed
FailedKukub läbi.Ava käivitus, et näha, milline samm läbi kukkus ja miks, sealhulgas Runner problem.
Couldn't startKukub 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.
CancelledKukub 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?

On this page