Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Internal Apps Can Be Beautiful Too

Avatar for pdamonkey pdamonkey
September 06, 2018

Internal Apps Can Be Beautiful Too

A walkthrough of My Jenkins internal app I built to help improving our build and test cycle and how internal apps can benefit from the same quality and effort given to our production apps. This also uses an internal Vapor service to improve the communication between the app and the Jenkins server. This was given as a Lightning Talk at iOSDevUK 2018.

Avatar for pdamonkey

pdamonkey

September 06, 2018

More Decks by pdamonkey

Other Decks in Programming

Transcript

  1. Who am I? Matthew Gallagher iOS Chapter Lead for the

    My Sky team Worked at Sky since 2015 My Jenkins Matthew Gallagher © Sky UK, September 2018
  2. Stage 1: Initial requirements Build from any branch Build using

    selected configuration (Debug / Release) Deploy onto any device (Enterprise) Build once, deploy onto many devices (OTA) De-couple testers from Xcode Allow build to be triggered and installed remotely View build issues / logs Matthew Gallagher © Sky UK, September 2018
  3. Stage 2: Improve Jenkins Add parameters to Jenkins The branch

    (String) parameter Allow any branch to be built The configuration (Choice) parameter Pass selection into Fastlane Update the Fastfile to use correct configuration How to reduce the feedback cycle Introducing the Sample App Match the bundle identifier to Main app Custom Fastlane Actions to automate the work Matthew Gallagher © Sky UK, September 2018
  4. Stage 3: Cleaner API Jenkins API: (495 characters) /api/json?tree=jobs[name,description,url,color,actions[parameterDefinition s[description,name,type,choices,defaultParameterValue[name,value]]],health

    Report[description,score],nextBuildNumber,queueItem[*],lastBuild[number,id ,fullDisplayName,timestamp,duration,estimatedDuration,result,building,queu eId,artifacts[*],actions[causes[userId,userName],parameters[*],lastBuiltRe vision[SHA1]]],lastSuccessfulBuild[number,timestamp,duration],lastFailedBu ild[number,timestamp,duration], scm[userRemoteConfigs[url]]] My API: (13 characters) /api/ios/jobs Matthew Gallagher © Sky UK, September 2018
  5. Stage 4: Resolving problems along the way Problem with Proxy

    settings using Swift on Linux A workaround for now https://github.com/vapor/vapor/issues/1723 Authentication Currently have Azure Active Directory working well https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code Store keys securely Going to look into Vault and create a Swift wrapper https://www.vaultproject.io Matthew Gallagher © Sky UK, September 2018
  6. Stage 6: Further requirements ✅ Accessibility (Dynamic text, Voice over)

    ✅ Git branch selection (filtering, scopes) ✅ Allow running builds to be cancelled ✅ Allow failed builds to be re-tried ✅ Expand access to other team members (BA, PO) ✅ Different error states ✅ Send push notification when build succeeds Allow access to other Sky teams Report build issue from within the app Matthew Gallagher © Sky UK, September 2018
  7. Thank you! Make sure you put that amazing knowledge and

    quality into your internal apps too! Stay in Touch: @pdamonkey [email protected] linkedin.com/in/pdamonkey Matthew Gallagher © Sky UK, September 2018