Unscharfe Lichter

Automatisieren des Freigabeprozesses

Ein Problem?

Hier bei FloQast ist eine der wichtigsten Aufgaben eines SDET die Abwicklung des Release-Prozesses. Im Großen und Ganzen bedeutet dies, dass Änderungen von Entwicklern zeitnah in die Produktion überführt werden, während gleichzeitig sichergestellt wird, dass die Änderungen ordnungsgemäß funktionieren und keine Fehler verursachen. Der Prozess umfasst in der Regel die folgenden manuellen Schritte:

  1. Vergewissern Sie sich, dass Ihre Veröffentlichung die nächste ist, indem Sie das Veröffentlichungs-Dashboard überprüfen.
  2. Machen Sie eine Ankündigung auf dem entsprechenden Kanal.
  3. Aktualisieren Sie den Ticketstatus von "Bereit für QA " auf " QA Review".
  4. Stellen Sie die aktualisierten Repositorys nacheinander bereit.
  5. Führen Sie die entsprechenden Regressionssuites nacheinander aus.
  6. Analysieren Sie die Regressionsergebnisse, eines nach dem anderen.
  7. Testen Sie die Änderungen bei Bedarf manuell.
  8. Genehmigungskommentar zum Ticket hinzufügen.
  9. Aktualisieren Sie den Ticketstatus von QA Review auf QA Approved.
  10. Aktualisieren Sie den Ticketstatus von QA Approved auf Staging Review.
  11. Aktualisieren des Ticketstatus von " Staging Review" auf " Staging Approved".
  12. Machen Sie eine Ankündigung auf dem entsprechenden Kanal.
  13. Aktualisierung des ITSM-Status von TODO auf In Progress.
  14. Hinzufügen von für die Inszenierung zugelassenen Etiketten zu relevanten PRs.
  15. Führen Sie relevante PRs zusammen.
  16. Warten Sie auf den Abschluss der Produktionsbereitstellung.
  17. Aktualisierung des ITSM-Status von " In Bearbeitung " auf " In Prüfung".
  18. Führen Sie die entsprechenden Smoke-Suites nacheinander aus.
  19. Analysieren Sie die Rauchergebnisse, eins nach dem anderen.
  20. Genehmigungskommentar zum Ticket hinzufügen.
  21. Aktualisieren Sie den Ticketstatus von "Staging Approved" auf " Done".
  22. Aktualisieren Sie den Ticketstatus von " In Prüfung" auf " Genehmigt".
  23. Aktualisieren Sie den Ticketstatus von Genehmigt auf Erledigt.

In den letzten Monaten haben wir diese manuellen Schritte unter die Lupe genommen und nach Möglichkeiten gesucht, diesen Prozess so weit wie möglich zu automatisieren - mit großem Erfolg. Es ist uns gelungen, ein Skript zu erstellen, das den Freigabeprozess (größtenteils) automatisieren kann und etwa 70 % der oben beschriebenen Schritte abdeckt. Je nach Umfang der Freigabe kann dies zu einer Zeitersparnis von etwa 2 bis 3 Stunden führen, und auch das häufige Umschalten von Kontexten wird reduziert. Diese Automatisierung sollte es den SDETs ermöglichen, sich in Zukunft auf wichtigere Dinge zu konzentrieren.

Abklatschen!

Lösung!

Das Skript verarbeitet Freigaben mithilfe einer Warteschlangenstruktur, und Freigabedateien schieben eine Vielzahl vordefinierter Aktionen in die Warteschlange. Freigabedateien werden pro Entwicklungsteam definiert, wodurch das Skript eine gewisse Flexibilität erhält. Der Ablauf ist in etwa wie folgt:

// Initialize queue

const queue = []

// Load queue w/ actions

queue.push({
    type: ['JIRACOMMENT', 'approve changes on production'],
    payload: {
        // ...
    }
})

queue.push({
    type: ['JIRATRANSITION', 'move jira ticket from [STAGING APPROVED] -> [DONE]'],
    payload: {
        // ...
    }
})

// Execute action(s)

while (!_.isEmpty(queue)) {
    // Pull action off the queue and execute it
}

Diese individuellen Versionsdateien müssen nur einmal definiert werden, so dass sich die SDETs bei ihren täglichen Versionsaufgaben nur auf die Aktualisierung der relevanten Konfigurationsdateien konzentrieren müssen. Derzeit gibt es zwei Ebenen von Konfigurationsdateien: eine für die allgemeine Konfiguration, die für alle Releases erforderlich ist, und eine, die einzelne Teams verwenden können, um benutzerdefinierte Konfigurationswerte hinzuzufügen. Diese beiden Konfigurationsdateien werden zu einem einzigen Objekt zusammengeführt, das in die Veröffentlichungsdatei eingefügt wird. Dieser Prozess sieht in etwa so aus:

// Common config

module.exports = {
    POD: process.env.POD,
    JIRA_USERNAME: process.env.JIRA_USERNAME,
    JIRA_API_TOKEN: process.env.JIRA_API_TOKEN,
    JENKINS_USERNAME: process.env.JENKINS_USERNAME,
    JENKINS_API_TOKEN: process.env.JENKINS_API_TOKEN,
    JIRA: 'https://floqast.atlassian.net/browse/FQ-32950',
    ITSM: 'https://floqast.atlassian.net/browse/ITSM-12819',
    COMPONENTS: [
        'www-close',
        'gl_sap'
    ],
    BRANCH: 'FQ-32950-setup-lambda-placeholder-routes'
}


// Team config

module.exports = {
    BUSINESS_CENTRAL_API_REGRESSION: false,
    GL_SDK_REGRESSION: false,
    CLOUD_CONNECT_REGRESSION: false,
    FILE_PARSING_UI_REGRESSION: false,
    MAIN_REGRESSION: true,
    SMOKE_REGRESSION: true
}


// Merging the two configs

const store = {
    ...config.COMMON, 
    ...config[`${_.toUpper(process.env.POD)}`]
}

Nach der Definition einer Freigabedatei und dem Ausfüllen der entsprechenden Konfigurationsdateien führt ein SDET den folgenden Befehl aus:

foo@bar:~$ make release

Die Ausgabe sieht dann in etwa so aus:

Ausgabe
Willkommen in der Zukunft

Nächste Schritte

Da wir uns entschieden haben, dieses Skript nach dem Opt-in-Prinzip zu nutzen, verbreiten wir es langsam in FloQast. Wir hoffen, wertvolles Feedback von der kleinen Gruppe von Teams zu erhalten, die derzeit Teil des Pilotprozesses sind, bevor wir den Rest von QE an Bord holen.

Daniel Vargas

Daniel ist ein Senior SDET bei FloQast mit einer Leidenschaft für die Automatisierung von allem! Außerhalb der Arbeit verbringt er gerne Zeit mit seiner Familie und spielt Retro-Videospiele.



Zurück zu Blog