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:
| Muutuja | Väärtus |
|---|---|
AUTONOMY_API_URL | Sinu juurutuse HTTP baas-URL, näiteks https://your-deployment.convex.site, ilma /api osata. Ära kasuta .convex.cloud aadressi. |
AUTONOMY_TEST_PLAN_ID | Test Plans vaatest kopeeritud ID, mis sisaldab käivitatavaid testjuhtumeid, mitte üksiku testjuhtumi ID. Kasuta igal platvormil eraldi plaani. |
PREVIEW_URL | Ainult veeb: lõplik juurutatud URL ilma sisselogimislehe või eelvaate kaitseta. Selle võib anda ka juurutussamm. |
APP_IDENTIFIER | Ainult mobiil: artefaktile vastav iOS-i bundle’i ID või Androidi rakenduse ID. |
AUTONOMY_WAIT_SECONDS | Valikuline: 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.
#!/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.
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 webKohaliku 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:
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: falseKä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 webMobiiliartefakti ü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.
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 iosAndroid
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.
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 androidBitrise 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.