Automatisk opplasting av iOS-apper til AirWatch

Dette dokumentet viser hvordan du kan f? satt opp automatisk opplasting og deployment av mobilappen din ved hjelp av AirWatch.

0 Hvordan automatikken virker

Vi har laget en arkitektur-tegning som illustrerer hvordan automatikken virker.

Arkitekturtegning for det automatiske opplegget.
Arkitektur-tegning for hvordan automatisk deployment av iOS-app med AirWatch fungerer. Den gr?-markerte boksen er hva du selv m? definere.

Den gr?-markerte boksen m? du selv definere. Vi har lagt ved en mal under p? hvordan dette kan gj?res.

Her kan du se at det er Jenkins som gj?r storparten av arbeidet. Jenkins blir satt opp til ? overv?ke en viss branch i ditt Git-repo. N?r det da kommer endringer setter den f?rst igang bygging av IPA-filen. Videre starter bygge-jobben en signeringsjobb som ved hjelp av provisjonsfiler og sertifikater vi har f?tt fra Apple signerer appen. N?r signeringen er ferdig setter denne jobben igang enda en Jenkins-jobb som laster opp det ferdige produktet til AirWatch.

N?r den nye versjonen av appen har blitt lastet opp til AirWatch ligger det allerede innstillinger i AirWatch p? hvordan den skal dytte ut appen (On Demand eller Auto) og hvilke enheter appen skal g? til. Dette blir definert ut av en gruppe enheter i AirWatch.

1 Kildekodeh?ndtering

For at automatikken skal v?re mulig ? sette opp m? kildekoden ligge i et Git-repo som p? en eller annen m?te er tilgjengelig fra enten UiO-nett eller verden. GitHub eller BitBucket er gode alternativer.

Jenkins m? ha tilgang til ? lese fra repoet. Du kan gi tilgang ved ? legge inn Jenkins sin offentlige n?kkel.

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv0nN1joH7fGtqNGkVyj8SlbAWp8N7BGt4/2dwka/P8CPMCmvzWEe56ziJQCwAeyB5YbRsswpLsJhhxCU9ynTDX/AxKNe0CXFNb5IObquqfuMQmZRxLdNDHwcLvmRFYvt+QDPG9DDZXXJA4JQYei5ObRjpXD8oM9/XPDj+aZGdn/ukyXryI0dQNeRf+bndkMDQDZ4vGz1212n++3XHEAkLAbbB6nzQzHERGxn4ipEOgyZBB1DNRYZbBGEYatIB9tbhEj54DZDPFhKiy1L+gj6xJMBXR82ZNmWdz7XwH3LBP0Ud5wbdHh5HhngGdQG+kBC1g+51Opo9WJg0k8ewzopQw== jenkins@w3utv-ci01.uio.no

For at dere selv skal ha muligheten til ? sette igang opplasting av en ny versjon m? dere definere en Git-branch som skal brukes. Jenkins vil da kj?re hver gang det pushes nye endringer til denne branchen.

2 Jenkinsfile

P? rot-niv? i Git-repoet m? det lages en fil som heter Jenkinsfile. Denne filen beskriver noe meta-data om appen i tillegg til hvordan ipa-filen bygges. En kan ta utgangspunkt i denne filen.

appName = 'navnet-p?-appen'
mailList = 'din-epostadresse@noe.no'

// Ting du ikke trenger definere (bruker verdiene fra over)
uploadJob = "kd-mlm-app-${appName}-resign"
outputFile = "${appName}.ipa"

node('ios') {
  try {
    checkoutStage()
    buildStage()
    archiveStage()
    deployStage()
  } catch (Exception e) {
    def mailBody = "An error occured while building ${appName}.\n\n${env.BUILD_URL}"

    mail subject: "${appName}: Error while building",
      to: mailList,
      replyTo: mailList,
      body: mailBody
  } finally {
    cleanupStage()
  }
}

def buildStage() {
  stage('Build') {
    // Her legger du inn bygging av ipa-filen din, f.eks. ved bruk av xcodebuild

    // Du kan kj?re shell-kommandoer p? denne m?ten:
    sh "ls"

    // Og med parametre
    minStreng = 'dette er litt tekst'
    sh "echo '${minStreng}'"

    // Pass p? at ipa-filen ender opp i en fil som heter ${outputFile}
  }
}

def checkoutStage() {
  stage('Checkout') {
    checkout scm

    gitSetUser 'Jenkins', 'nobody@uio.no'
  }
}

def cleanupStage() {
  stage('Cleanup') {
    deleteDir()
  }
}

def archiveStage() {
  stage('Archive') {
    archive "${outputFile}"
  }
}

def deployStage() {
  stage('Deploy') {
    build "${uploadJob}"

    def mailBody = "${appName} is resigned and uploaded to AirWatch."

    mail subject: "${appName} resigned and uploaded successfully",
      to: mailList,
      replyTo: mailList,
      body: mailBody
  }
}

def gitSetUser(name, email) {
  sh "git config user.name '${name}'"
  sh "git config user.email '${email}'"
}

def shLine(command) {
  def output = sh script: command, returnStdout: true
  return output.trim()
}

Her er det alts? tre ting du m? fylle ut.

  1. Navnet p? appen din til variabelen appName.
  2. En epostadresse du kan f? feil/suksess-meldinger til i variabelen mailList.
  3. Under build-steget m? du fylle inn de shell-kommandoene du bruker for ? kompilere appen din. Her er det ogs? viktig at ipa-filen du ender opp med heter for eksempel
    minApp.ipa
    hvis navnet p? appen din er ?minApp?.

3 Versjonsstreng

Med denne automatikken s? g?r faktisk alt automatisk. Det er derfor viktig at versjons-strengen til appen din oppdateres hver gang du dytter en ny versjon til den Git-branchen som setter i gang automatikken.

Hvis du ikke oppdaterer versjonsstrengen virker ikke automatikken.

God konvensjon kan v?re ? passe p? at alle endringer til den Git-branchen som setter i gang automatikken g?r gjennom en PR.

4 Alternativt

Hvis du ikke ?nsker helautomasjon rundt dette her og kan leve med at appen kun kan deployes innenfor normal arbeidstid trenger du ikke sette opp alle disse tingene. Da er det nok at du selv kompilerer IPA-filen p? hvilken som helst m?te. Men du m? laste den opp til en et sted hvor den er tilgjengelig over http. Denne URL'en m? ogs? alltid v?re den samme.

5 Kontakt oss

Etter du har g?tt gjennom stegene over er det meste klart. Vi kan da fortsette med ? sette opp all automatikken for deg. Ta dermed kontakt med oss p? det samlede kontaktpunktet for henvendelser rundt mobile apper:

mobil-app@usit.uio.no

5.1 Informasjon vi trenger

  • SSH-URL til Git-repoet hvor du har ?pnet for Jenkins sin offentlige n?kkel.
  • Hva Git-branchen du vil ha automatikk p? heter.
  • Hvilke enheter skal appen bli lagt inn p?? Er alle i Mobilt arbeidsrom?
  • Skal appen rulles ut automatisk p? enhetene eller skal hver bruker kunne velge om de vil installere den eller ikke?
  • Enhetene appen skal brukes p? - skal de ha annen konfigurasjon? For eksempel v?re l?st ned til at det kun er denne appen det er mulig ? ?pne?

Det kan ogs? v?re lurt ? gi en av oss lesetilgang til koden slik at vi kan se gjennom at Jenkinsfile er riktig formulert. Vi kan gi detaljer om brukernavn etter at du har sendt epost.

Publisert 4. jan. 2017 15:20 - Sist endret 5. jan. 2017 10:16