Autonomy dokumentatsioon
Integratsioonid

Bitrise

Käivita Autonomy Bitrise’ist ja seo töövoo tulemus veebi, iOS-i simulaatori või Androidi käivituse otsusega.

Kasuta Bitrise’i Script-sammu mobiili build’i üleslaadimiseks või juurutatud veebi eelvaate testimiseks ning hoia töövoog käimas, kuni Autonomy tagastab otsuse.

Töövoo paigutus

Lisa Autonomy samm olemasolevate build’i- ja juurutussammude järele. Veebi puhul avalda lõplik avalik eelvaate-URL muutujana PREVIEW_URL, kasutades juurutussammus käsku envman add --key PREVIEW_URL --value "$PREVIEW_URL"; järgmised sammud saavad seda lugeda. Mobiili puhul hoia build ja üleslaadimine samas töövoos, et artefakt jääks töökausta.

Allolevad täielikud seadistused on faili bitrise.yml alternatiivid. Kopeeri oma platvormi seadistus või lisa selle sammud olemasolevasse töövoogu. Seadista Bitrise lugema faili bitrise.yml hoidlast ja lisa sinna ka .ci/autonomy.sh. Veebi töövoogu saab käivitada ka kohalikus kloonitud hoidlas.

Vajalikud saladused

Enne esimest käivitust

  • Loo Settings → API Keys vaates aut_ algusega Autonomy organisatsiooni API-võti organisatsioonis, mis sisaldab sinu plaani.
  • Loo Test Plans vaates testiplaan vähemalt ühe käivitatava testjuhtumiga valitud platvormile ja kopeeri selle ID.
  • Kasuta selles selgesõnaliste sihtmärkidega retseptis testjuhtumeid, mis ei viita keskkonna käitusaja muutujatele.
  • Veendu, et platvormi jaoks on saadaval Autonomy runner ja eelvaate-URL on sellest runner’ist ligipääsetav.

Lisa Workflows → Secrets vaates AUTONOMY_API_KEY. Jäta Expose for pull requests ja Replace variables in inputs välja lülitatuks. Saladused muutuvad automaatselt shell’i keskkonnamuutujateks; ära lisa võtit faili bitrise.yml.

Määra Workflows → Env Vars vaates valitud töövoole järgmised väärtused:

MuutujaVäärtus
AUTONOMY_API_URLSinu juurutuse HTTP baas-URL, näiteks https://your-deployment.convex.site, ilma /api osata. Ära kasuta .convex.cloud aadressi.
AUTONOMY_TEST_PLAN_IDTest Plans vaatest kopeeritud ID, mis sisaldab käivitatavaid testjuhtumeid, mitte üksiku testjuhtumi ID. Kasuta igal platvormil eraldi plaani.
PREVIEW_URLAinult veeb: lõplik juurutatud URL ilma sisselogimislehe või eelvaate kaitseta. Selle võib anda ka juurutussamm.
APP_IDENTIFIERAinult mobiil: artefaktile vastav iOS-i bundle’i ID või Androidi rakenduse ID.
AUTONOMY_WAIT_SECONDSValikuline: otsuse ootamise ajalimiit sekundites, vaikimisi 1200.

Veebi eelvaate-URL

Loo hoidlasse .ci kaust ja salvesta kogu skript faili .ci/autonomy.sh. See vajab Bashi, curl 7.76 või uuemat versiooni ja jq; valitud majutatud stack’id sisaldavad neid. Kohaliku CLI-käivituse jaoks paigalda need ise. Hoia fail kõigil platvormidel muutumatuna.

.ci/autonomy.sh
#!/usr/bin/env bash
set -euo pipefail
set +x
: "${AUTONOMY_API_URL:?Set the API base URL, without /api}"
: "${AUTONOMY_API_KEY:?Set an aut_ organization API key}"
: "${AUTONOMY_TEST_PLAN_ID:?Set the Test Plans ID for this platform}"
: "${AUTONOMY_REQUEST_ID:?Set a unique CI job/attempt ID}"
platform="${1:-web}"
api="${AUTONOMY_API_URL%/}"
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT

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"
}

case "$platform" in
  web)
    : "${PREVIEW_URL:?Set the reachable preview URL after deployment}"
    targets=$(jq -n --arg url "$PREVIEW_URL" '{web:{baseUrl:$url}}')
    ;;
  ios|android)
    : "${ARTIFACT_PATH:?Set the path to the app archive or APK}"
    : "${APP_IDENTIFIER:?Set the bundle ID or Android package name}"
    test -s "$ARTIFACT_PATH"
    file=$(basename "$ARTIFACT_PATH")
    bytes=$(wc -c < "$ARTIFACT_PATH" | tr -d '[:space:]')
    content_type=application/zip
    if [ "$platform" = android ]; then
      content_type=application/vnd.android.package-archive
    fi
    upload=$(post /api/artifacts/upload-url "$(jq -n \
      --arg platform "$platform" --arg fileName "$file" \
      --arg contentType "$content_type" --argjson declaredBytes "$bytes" \
      '{platform:$platform,fileName:$fileName,contentType:$contentType,declaredBytes:$declaredBytes}')")
    url=$(jq -er '.uploadUrl | strings | select(length > 0)' <<< "$upload")
    storage=$(jq -er '.storageId | strings | select(length > 0)' <<< "$upload")
    intent=$(jq -er '.intentId | strings | select(length > 0)' <<< "$upload")
    jq -e '.method == "PUT"' <<< "$upload" > /dev/null
    curl --fail-with-body --silent --show-error \
      --connect-timeout 15 --max-time 600 -X PUT "$url" \
      -H "Content-Type: $content_type" --data-binary "@$ARTIFACT_PATH"
    scan=$(post /api/artifacts/scan "$(jq -n \
      --arg storageId "$storage" --arg intentId "$intent" \
      '{storageId:$storageId,intentId:$intentId}')")
    if ! jq -e '.status == "clean"' <<< "$scan" > /dev/null; then
      echo 'Artifact scan did not pass; refusing to trigger.' >&2
      exit 1
    fi
    targets=$(jq -n --arg platform "$platform" --arg storageId "$storage" \
      --arg fileName "$file" --arg identifier "$APP_IDENTIFIER" \
      '{($platform):({storageId:$storageId,sourceMode:"upload",fileName:$fileName} +
        (if $platform == "ios" then {bundleId:$identifier} else {packageName:$identifier} end))}')
    ;;
  *) echo 'Usage: bash .ci/autonomy.sh web|ios|android' >&2; exit 2 ;;
esac

body=$(jq -n --arg testPlanId "$AUTONOMY_TEST_PLAN_ID" \
  --arg platform "$platform" --argjson targets "$targets" \
  --arg branch "${AUTONOMY_BRANCH:-manual}" \
  --arg commitSha "${AUTONOMY_COMMIT_SHA:-}" \
  --arg key "$AUTONOMY_REQUEST_ID:$platform" \
  '{testPlanId:$testPlanId,platforms:[$platform],targets:$targets,
    branch:$branch,deployment:{branch:$branch,commitSha:$commitSha},idempotencyKey:$key}')
post /api/v1/run.trigger "$body" > "$work/trigger.json"
jq -e '.runIds | type == "array" and length > 0' "$work/trigger.json" > /dev/null
jq -er '.runIds[] | strings | select(length > 0)' "$work/trigger.json" > "$work/run-ids"
printf 'Queued Autonomy runs:\n'
cat "$work/run-ids"

deadline=$((SECONDS + ${AUTONOMY_WAIT_SECONDS:-1200}))
while IFS= read -r run_id; do
  while :; do
    if (( SECONDS >= deadline )); then
      echo "Timed out waiting for $run_id; failing the CI job." >&2
      exit 1
    fi
    result=$(post /api/v1/run.get "$(jq -n --arg runId "$run_id" '{runId:$runId}')")
    status=$(jq -er '.status' <<< "$result")
    case "$status" in
      queued|running|retrying) sleep 10 ;;
      passing|failed|unverified|invalid|canceled)
        printf '%s: %s\n' "$run_id" "$status"
        if ! jq -e '.verdict == "passed" and .validity == "valid"' <<< "$result" > /dev/null; then
          echo "Autonomy gate failed for $run_id." >&2
          exit 1
        fi
        break ;;
      *) echo "Unexpected run status: $status" >&2; exit 1 ;;
    esac
  done
done < "$work/run-ids"
echo 'Every Autonomy run passed.'

Salvesta seadistus faili bitrise.yml. Määra ülal kirjeldatud töövoo muutujad, seejärel vali pärast eelvaate juurutamist Start build → web. Kloonimissamm töötab Bitrise’is; kohalik CLI kasutab juba kloonitud hoidlat.

bitrise.yml
format_version: '13'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
workflows:
  web:
    meta:
      bitrise.io:
        stack: linux-docker-android-22.04
        machine_type_id: standard
    steps:
      - activate-ssh-key@4:
          run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
      - git-clone@8:
          run_if: '{{getenv "BITRISE_IO" | eq "true"}}'
      - script@1:
          title: Autonomy
          inputs:
          - content: |-
              #!/usr/bin/env bash
              set -euo pipefail
              set +x
              : "${PREVIEW_URL:?Set the deployed preview URL}"
              curl --fail --silent --show-error --retry 12 \
                --retry-delay 5 --retry-connrefused --max-time 20 \
                "$PREVIEW_URL" > /dev/null
              attempt="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)"
              export AUTONOMY_REQUEST_ID="bitrise:${BITRISE_BUILD_SLUG:-local}:${BITRISE_TRIGGERED_WORKFLOW_ID}:$attempt"
              export AUTONOMY_BRANCH="${BITRISE_GIT_BRANCH:-$(git branch --show-current)}"
              export AUTONOMY_COMMIT_SHA="$(git rev-parse HEAD)"
              bash .ci/autonomy.sh web

Kohaliku runner’i kasutamiseks paigalda Bitrise CLI, seejärel salvesta järgmine sisu faili .bitrise.secrets.yml faili bitrise.yml kõrvale. Asenda kõik neli näidisväärtust oma API-võtme, juurutuse URL-i, plaani ID ja ligipääsetava eelvaate-URL-iga:

.bitrise.secrets.yml
envs:
- AUTONOMY_API_KEY: 'aut_REPLACE_WITH_ORG_KEY'
  opts:
    is_expand: false
- AUTONOMY_API_URL: 'https://your-deployment.convex.site'
  opts:
    is_expand: false
- AUTONOMY_TEST_PLAN_ID: 'REPLACE_WITH_TEST_PLANS_ID'
  opts:
    is_expand: false
- PREVIEW_URL: 'https://your-preview.example.com'
  opts:
    is_expand: false

Käivita järgmised käsud hoidla juurkaustas. Hoia saladuste fail versioonihaldusest väljas. Kohalik CLI töötab sinu masinas; meta stack’i valik kehtib ainult majutatud build’idele.

printf '\n.bitrise*\n' >> .gitignore
chmod 600 .bitrise.secrets.yml
bitrise setup
bitrise run web

Mobiiliartefakti üleandmine

Kasuta ülaltoodud .ci/autonomy.sh faili. See küsib üleslaadimise URL-i, saadab binaarfaili käsuga PUT, nõuab puhast skannimistulemust ja käivitab testi saadud salvestus-ID-ga. Build ja üleslaadimine kasutavad sama töökausta; töövoogude vahelist artefakti edastamist pole vaja seadistada.

iOS

See täielik bitrise.yml alternatiiv kasutab macOS-i Xcode’i stack’i. Määra AUTONOMY_TEST_PLAN_ID väärtuseks iOS-i plaani ID ja APP_IDENTIFIER väärtuseks selle bundle’i ID. Asenda ios/MyApp.xcodeproj, MyApp ja valmiva .app faili nimi oma projekti, jagatud skeemi ja toote nimega. Kui rakendus kasutab workspace’i, asenda -project ios/MyApp.xcodeproj valikuga -workspace ios/MyApp.xcworkspace. Hoia olemasolevad sõltuvuste paigaldamise sammud enne xcodebuild käsku.

Ehita Simulatori .app ja paki see ZIP-failiks; seadmele mõeldud .ipa siia ei sobi. Ka üleslaadimine ja otsuse ootamine toimuvad macOS-il ning kulutavad selle build’i aega.

bitrise.yml
format_version: '13'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
workflows:
  ios:
    meta:
      bitrise.io:
        stack: osx-xcode-26.4.x
        machine_type_id: g2.mac.medium
    steps:
      - activate-ssh-key@4:
          run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
      - git-clone@8:
          run_if: '{{getenv "BITRISE_IO" | eq "true"}}'
      - script@1:
          title: Autonomy
          inputs:
          - content: |-
              #!/usr/bin/env bash
              set -euo pipefail
              set +x
              xcodebuild -project ios/MyApp.xcodeproj -scheme MyApp \
                -configuration Release -sdk iphonesimulator \
                -destination 'generic/platform=iOS Simulator' \
                -derivedDataPath .build/ios CODE_SIGNING_ALLOWED=NO build
              mkdir -p .build/artifacts
              ditto -c -k --sequesterRsrc --keepParent \
                .build/ios/Build/Products/Release-iphonesimulator/MyApp.app \
                .build/artifacts/MyApp.app.zip
              export ARTIFACT_PATH="$PWD/.build/artifacts/MyApp.app.zip"
              attempt="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)"
              export AUTONOMY_REQUEST_ID="bitrise:${BITRISE_BUILD_SLUG:-local}:${BITRISE_TRIGGERED_WORKFLOW_ID}:$attempt"
              export AUTONOMY_BRANCH="${BITRISE_GIT_BRANCH:-$(git branch --show-current)}"
              export AUTONOMY_COMMIT_SHA="$(git rev-parse HEAD)"
              bash .ci/autonomy.sh ios

Android

See täielik bitrise.yml alternatiiv kasutab Linuxi Androidi stack’i. Määra AUTONOMY_TEST_PLAN_ID väärtuseks Androidi plaani ID ja APP_IDENTIFIER väärtuseks selle rakenduse ID. Eeldatud on Androidi projekt kaustas android/, hoidlasse lisatud Gradle’i wrapper ja moodul app. Kui kasutad teist moodulit või build’i varianti, muuda koos kausta, ülesannet ja APK teed. Säilita olemasoleva build’i nõutud JDK ja Android SDK versioonid.

bitrise.yml
format_version: '13'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
workflows:
  android:
    meta:
      bitrise.io:
        stack: linux-docker-android-22.04
        machine_type_id: standard
    steps:
      - activate-ssh-key@4:
          run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
      - git-clone@8:
          run_if: '{{getenv "BITRISE_IO" | eq "true"}}'
      - script@1:
          title: Autonomy
          inputs:
          - content: |-
              #!/usr/bin/env bash
              set -euo pipefail
              set +x
              (cd android && bash ./gradlew --no-daemon assembleDebug)
              export ARTIFACT_PATH="$PWD/android/app/build/outputs/apk/debug/app-debug.apk"
              attempt="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)"
              export AUTONOMY_REQUEST_ID="bitrise:${BITRISE_BUILD_SLUG:-local}:${BITRISE_TRIGGERED_WORKFLOW_ID}:$attempt"
              export AUTONOMY_BRANCH="${BITRISE_GIT_BRANCH:-$(git branch --show-current)}"
              export AUTONOMY_COMMIT_SHA="$(git rev-parse HEAD)"
              bash .ci/autonomy.sh android

Bitrise pakub praegu tasuta Hobby paketis macOS Medium ja Linux Medium masinaid, 300 krediiti kuus ning 90-minutilist build’i ajalimiiti. Näited valivad vastavalt g2.mac.medium ja standard. Kohalik bitrise run ios vajab endiselt sinu enda Maci koos Xcode’iga; macOS-i stack’i valimine YAML-is ei loo kaug-Maci. Enne majutatud mobiili build’i kontrolli allesolevaid krediite. Vaata Bitrise’i hindu.

Konveieri peatamine otsuse alusel

Skript kuvab iga järjekorda lisatud käivituse ID ja küsib tulemust aadressilt POST /api/v1/run.get. Järjekorda lisamine kinnitab ainult päringu vastuvõtmist. Töövoog õnnestub ainult siis, kui kõigil käivitustel on verdict: "passed" ja validity: "valid". Ebaõnnestunud, kinnitamata, vigane, tühistatud, tundmatu, aegunud või HTTP-veaga tulemus kukutab Script-sammu läbi ja peatab järgmised tavalised sammud. Ära lisa sellele sammule is_skippable: true.

Vaikimisi oodatakse 20 minutit; vajaduse korral suurenda AUTONOMY_WAIT_SECONDS väärtust Bitrise’i build’i ajalimiidi piires. Ootamise aegumine ei tühista Autonomy käivitust. Ava käivitus kuvatud ID abil Runs vaates, et uurida tõendeid. Iga töövoo käivitus loob build’i slug’i ja töövoo ID kõrvale uue UUID, nii et korduskatse või kohalik käivitus lisab järjekorda uue testi.

Haru- ja sündmusstrateegia

Näited on käsitsi käivitatavad töövood ilma automaatse päästikuta, et seadistamine ei avaldaks API-võtit ebausaldusväärsele koodile. Alusta väikese smoke-plaaniga, seejärel seadista Bitrise’is push-päästik usaldusväärsele staging’i- või väljalaskeharule. Lisa Autonomy samm selles töövoos juurutuse järele, säilitades harufiltrid. Jäta suuremad plaanid ajastatud või käsitsi käivitustele.

Hoia saladused pull request’i build’idele, sealhulgas fork’idest tulevatele, kättesaamatuna. Käivita QA ülevaadatud koodil pärast selle jõudmist usaldusväärsesse harru või käivita ülevaadatud commit’i build käsitsi. Ära lülita sisse saladuste avaldamist pull request’idele, et katkist retsepti tööle saada. Haru ja commit’i metaandmed saadetakse Autonomyle; see retsept ei loo pull request’i kommentaari.

Pakkuja viited

On this page