Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Forms and Reports 12c - Processes and Automation in Development and Operations

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 44 Anzeige

Forms and Reports 12c - Processes and Automation in Development and Operations

Herunterladen, um offline zu lesen

The current target architecture of IKB's credit and loan management is based on Oracle ADF and SOA and of course the database. But how can you protect in this time your Oracle Forms & Reports longtime investments, can you support their Development Lifecycle by Automation?

Many supporting technologies from the Java environment, such as branching models, automated build and deploy procedures or code review were established with the Oracle technologies and in the course of the regulatory process.

But there is still a large part of the Oracle Forms & Reports that have grown over 25 years and have not yet been replaced. Actually, we hoped that we would no longer need a version higher than 11g. Forms & Reports had been running very stably for years. A bug brought the migration to 12c back into focus to further run supported versions. The regulatory environment did the rest to revise the current processes and, where possible, to automate them.

So how do supporting technologies and automation fit in here?

I will show you a selection of these processes from IKB's development and operations life cycle:

* Installation of application server
* Regular patching
* Packaging of the local development environment
* Requirements documentation
* Branching
* Development
* Code Review
* Merge
* Deployment
* Traceability for Regulatory Purposes

The following tools are used, among others

* Jenkins
* Scripting with Bash and Powershell
* Git
* Bitbucket
* JIRA
* FormsAPI Master

The current target architecture of IKB's credit and loan management is based on Oracle ADF and SOA and of course the database. But how can you protect in this time your Oracle Forms & Reports longtime investments, can you support their Development Lifecycle by Automation?

Many supporting technologies from the Java environment, such as branching models, automated build and deploy procedures or code review were established with the Oracle technologies and in the course of the regulatory process.

But there is still a large part of the Oracle Forms & Reports that have grown over 25 years and have not yet been replaced. Actually, we hoped that we would no longer need a version higher than 11g. Forms & Reports had been running very stably for years. A bug brought the migration to 12c back into focus to further run supported versions. The regulatory environment did the rest to revise the current processes and, where possible, to automate them.

So how do supporting technologies and automation fit in here?

I will show you a selection of these processes from IKB's development and operations life cycle:

* Installation of application server
* Regular patching
* Packaging of the local development environment
* Requirements documentation
* Branching
* Development
* Code Review
* Merge
* Deployment
* Traceability for Regulatory Purposes

The following tools are used, among others

* Jenkins
* Scripting with Bash and Powershell
* Git
* Bitbucket
* JIRA
* FormsAPI Master

Anzeige
Anzeige

Weitere Verwandte Inhalte

Ähnlich wie Forms and Reports 12c - Processes and Automation in Development and Operations (20)

Anzeige

Aktuellste (20)

Anzeige

Forms and Reports 12c - Processes and Automation in Development and Operations

  1. 1. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Forms & Reports 12c - Prozesse & Automatisierung in Development & Operations 18.11.2020 - Torsten Kleiber    1
  2. 2. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Was macht unser Unternehmen?    2.1
  3. 3. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Was mache ich? Torsten Kleiber So ware-Architekt, DevOps Kreditpla orm Seit 22 Jahren bei der IKB 26 Jahre Erfahrung Development & Development Tools Development Lifecycle Architektur & Infrastruktur Datenbank PL/SQL Fusion Middleware ADF SOA Mediator Forms & Reports Kontakt     2.2
  4. 4. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Warum Automatisierung? Aufwand zu komplex? Deine Branche ist nicht reguliert? Du brauchst nicht die aktuellsten Versionen? Noch keinen Server-Crash gehabt? Du hast eine aktuelle Installa onsdokumenta on? Mit allen Patches, Konfigura onen und Workarounds? Du hast auch noch den, der die Dokumenta on versteht? Jeder weiß, wie er entwickeln und kompilieren muss? Dann brauchst Du wohl keine Automa sierung!? Vielleicht kann sich das aber ganz schnell ändern! Wäre es dann nicht schön, wenn alles trotzdem klappen würde?    2.3
  5. 5. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Warum noch Forms & Reports? Kreditpla orm - Technologiemix in ste ger Migra on ab 1996 bis ca. 2003 von Cobol nach Forms & Reports ab 2013 bis heute von Forms & Reports nach ADF meist im Rahmen von fachlichen Projekten in Forms & Reports Wartung und kleinteilige Entwicklung dadurch viele Module noch nicht migriert oder abgeschaltet 11g sollte letzte Version sein → nun kein Support mehr Risiko für die Bank → Migra on nach 12.2.1.4    2.4
  6. 6. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Server - Konfigurationsmanagementtools  z.B. Puppet, Chef, Ansible, etc.  Abstrak onslayer über Betriebssystem  reentrant (unterbrechbar und wiedereintri sfähig)  teilweise deklara v  teilweise idempotent (gleiches Ergebnis auch bei mehrfacher Ausführung, Zielbeschreibung)  nicht für alle Betriebssysteme, z.B. Windows  wenige offizielle Module für Fusion Middleware  kaum offizielle Module für Forms & Reports  kaum private Module  erfüllen diese meine Anforderungen? → nein  wenn nicht, will ich diese entwickeln? → vielleicht  unterstützt mein Infrastruktur-Provider das Tool? → nein  wrapper hell (potenzielle neue Fehler, Implemen erungsverzögerung)    3.1
  7. 7. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Shell-Skripting (Bash) Server alle Linux (SLES) 11g → Aufruf aus JDeveloper, ANT, SSH, Shell-Skrip ng 12c → Aufruf aus Jenkins, Shell-Skrip ng Betriebssystem-Kommandos: cat, rsync, sed, ssh etc. Namens-Konven onen (Umgebung, Version) Port-Konven onen Betrieb verschiedener Umgebungen und Versionen auf einem Server möglich Nutzung von Variablen oder Generierung von Dateien    3.2
  8. 8. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Bash - Fehlerbehandlung Was passiert in diesem Skript? cd directory rm -rf * Wenn directory nicht exis ert, wird alles im aktuellen Verzeichnis gelöscht, besser: cd directory || exit $? Sollen mehrere Ak onen ausgeführt werden: if ! cd directory; then ret_code = $? echo "Verzeichnis existiert nicht" exit $ret_code    3.3
  9. 9. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Bash - Inputs Das aufgerufene Programm fordert eine Eingabe, hat aber keine Übergabeparameter für diesen? export YOUR_USER=weblogic; export YOUR_PASSWORD=weblogic1 Einfache Variante: Datei (mit Zeilenumbruch!) echo -e "${YOUR_USER}n${YOUR_PASSWORD}n" > input.txt command -f < input.txt input.txt weblogic weblogic1 Sichere Variante: Datei mit Mustern und passende(r/n) Antwort(en) echo -e "expect "Please enter weblogic password: "nsend "${YOUR_PASSWORD}r";n" > input.txt command expect -f input.txt input.txt expect "Please enter weblogic password: " send "weblogic1r";    3.4
  10. 10. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Server Skripting und Steuerung manueller Skript-Start möglich besser Automa sierungs-Server Infrastruktur für Logging, Passwortverwaltung, Scheduling etc. bei uns Jenkins Parametrisierter Start (Aufru yp, Zielserver, abhängige Parameter)    4.1
  11. 11. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Initialisierung Generierung der Jenkins-Pipeline-Parameter Setzen des Ausführungsmodus für Skripte    4.2
  12. 12. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Verteilen Skripte Administration Template-Skripte für Environment, Start und Stop Umbenennen der Template-Skripte für Version/Umgebung rename VERSIONDIR "${VERSIONDIR}" ./*VERSIONDIR* Ersetzen von Versions-/Umgebungs-spezifischen Parametern in den Skripten sed -i "s/VERSIONDIR/${VERSIONDIR}/g" ./* Synchronisieren angepasster Skripte mit Ziel-Server rsync --archive --delete --include="*FR_${ENVIRONMENT}*" --include="*FR_${VERSIONDIR}_${ENVIRONMENT}*" --exclude="*" . "${HOST_NAME}":"${HOST_ADMIN_DIR}"    4.3
  13. 13. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Verteilen Skripte Installation Template-Skripte für Installa on, Konfigura on, Deinstalla on Template-Dateien und -Dateifragmente für z.B. RCU-Tablespaces Antwortdateien für Silent-Installa on Weblogic-Konfigura on per WLST Reports-URL Keys REPORTS_/FORMS_PATH Key-Mapping SQL-Net Ersetzen von Versions-/Umgebungs-spezifischen Parametern und Passworten sed -i "s/VERSIONDIR/${VERSIONDIR}/g" ./* Synchronisieren angepasster Skripte mit Ziel-Server rsync --archive --delete . "${HOST_NAME}":"${INSTALL_DIR}"    4.4
  14. 14. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Server Installation Ausführen der Installa on per SSH auf dem Zielserver Übergabe von Environmentvariablen als Parameter ssh "${HOST_NAME_SHORT}" "${INSTALL_DIR}"/install.sh "${FMW_VERSION_STRING}" "${JDK_VERSION_STRING}" "${JDK_VERSION_FILE}" "${DBA_USER}" "${DBA_PASSWORD}" "${RCU_CONNECT_STRING}" "${RCU_FR_PASSWORD}" "${WL_USER}" "${WL_PASSWORD}"    5.1
  15. 15. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Java if [ -d "${JAVA_HOME}" ] && [ "$("${JAVA_HOME}"/bin/java -version 2>&1 | awk -F '"' '/version/ {print $2}')" == "${JDK_VERSION_STRING}" ]; then echo "Installation JDK ${JDK_VERSION_STRING}: Installation existiert bereits!" else echo "Installation JDK ${JDK_VERSION_STRING}: wird installiert" pushd "${ORACLE_BASE}" || exit $? rm -rf "${JAVA_HOME}" tar zxf "${BINARIES_DIR}"/jdk-"${JDK_VERSION_FILE}"-linux-x64.tar.gz || exit $? mv jdk"${JDK_VERSION_STRING}" "${JAVA_HOME}" || exit $? popd || exit $? echo "Installation JDK ${JDK_VERSION_STRING}: erfolgreich installiert" fi idempotent/reentrant 1 Wenn Java 2 in der übergebenen Version installiert ist 3 kann die Installa on übersprungen werden, 4 sonst die gewünschte Version 5 immer im selben Verzeichnis installieren, um später patchen zu können. 1 2 3 4 5    5.2
  16. 16. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Fusion Middleware Infrastructure if [ -d "${ORACLE_HOME}" ]; then echo "Installation Fusion Middleware Infrastructure ${FMW_VERSION_STRING}: Installation existiert bereits!" else echo "Installation Fusion Middleware Infrastructure: wird installiert" if "${JAVA_HOME}"/bin/java -jar "${BINARIES_DIR}"/fmw_"${FMW_VERSION_STRING}"_infrastructure.jar -silent -responseFile "${PWD}"/infrastructure.rsp; then echo "Installation Fusion Middleware Infrastructure ${FMW_VERSION_STRING}: erfolgreich installiert" else echo "Installation Fusion Middleware Infrastructure ${FMW_VERSION_STRING}: Fehler " $?; exit 1 fi fi 1 Wenn Fusion Middleware Infrastructure installiert ist 2 kann die Installa on übersprungen werden, 3 sonst die gewünschte Version silent installieren. 1 2 3    5.3
  17. 17. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Forms und Reports if [ -d "${ORACLE_HOME}"/forms ]; then echo "Installation Forms und Reports ${FMW_VERSION_STRING}: Installation existiert bereits!" else echo "Installation Forms und Reports ${FMW_VERSION_STRING}: wird installiert" if "${BINARIES_DIR}"/fmw_${FMW_VERSION_STRING}_fr_linux64.bin -silent -responseFile "${PWD}"/fr.rsp; then echo "Installation Forms und Reports ${FMW_VERSION_STRING}: erfolgreich installiert" else echo "Installation Forms und Reports ${FMW_VERSION_STRING}: Fehler " $?; exit 1 fi fi 1 Wenn Forms & Reports installiert ist 2 kann die Installa on übersprungen werden, 3 sonst die gewünschte Version silent installieren. 1 2 3    5.4
  18. 18. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Repository Creation 1 Wenn das Repository schon installiert ist, Installa on überspringen, 2 sonst die Tablespaces vorbereiten, 3 die Passworte in eine temporäre Übergabedatei schreiben, 4 das Repository installieren, ein Semaphore erzeugen und die temporäre Datei löschen. if [ -f "${INSTALL_DIR}"/rcu_installed_successfully.lok ]; then echo "Installation RCU ${FMW_VERSION_STRING}: Installation existiert bereits!" else echo "Installation RCU ${FMW_VERSION_STRING}: wird installiert" "${ORACLE_HOME}"/bin/sqlplus "${EASY_CONNECT_STRING}" @rcu_tablespaces.sql PRODUCTUPPERVERSIONDIR ENVIRONMENT || exit $? echo "${DBA_PASSWORD}" > "${INSTALL_DIR}"/pw.txt echo "${RCU_FR_PASSWORD}" >> "${INSTALL_DIR}"/pw.txt echo "" >> "${INSTALL_DIR}"/pw.txt if "${ORACLE_HOME}"/oracle_common/bin/rcu -silent -createRepository -connectString "${RCU_CONNECT_STRING}" -dbUser "${DBA_USER}" -dbRole SYSDBA -useSamePasswordForAllSchemaUsers true -schemaPrefix PRODUCTLOWERVERSIONDIR -component MDS -component STB -component -component IAU -component IAU_APPEND -component IAU_VIEWER -component WLS -f < "${INSTALL_DIR}"/pw.txt; then echo "Installation RCU ${FMW_VERSION_STRING}: erfolgreich installiert" touch "${INSTALL_DIR}"/rcu_installed_successfully.lok rm "${INSTALL_DIR}"/pw.txt else echo "Installation RCU ${FMW_VERSION_STRING}: Fehler " $?; rm "${INSTALL_DIR}"/pw.txt; exit 1 fi fi 1 2 3 4    5.5
  19. 19. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Erstellen Domain Aufruf von config.sh war in 11g silent möglich. 12c: Enhancement Request rejected - Derzeit nur manueller Step in Jenkins Pipeline. In Prüfung: WLST Skrip ng , , . The Configura on Wizard cannot be run in silent mode … in this release. 2707214: Steps For 12 2 1 Forms And Reports Silent Config Dirk Nachbar Robert Crames Jan Peter Timmermann    5.6
  20. 20. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Server Patching pushd "${INSTALL_DIR}" || exit $? echo "Patching" for PATCH_ZIP_PATH in "${BINARIES_DIR}"/p????????_*; do PATCH_ZIP_FILE=`basename "${PATCH_ZIP_PATH}"` || exit $? PATCH_NUMBER=$(echo "${PATCH_ZIP_FILE}" | cut -d'p' -f 2 | cut -d'_' -f 1) || exit $? PATCH_ALREADY_INSTALLED=`opatch lsinventory | grep "${PATCH_NUMBER}"` if [ -z "${PATCH_ALREADY_INSTALLED}" ]; then if [[ ! -d ${PATCH_NUMBER} ]]; then unzip -q "${PATCH_ZIP_PATH}" || exit $? fi pushd "${PATCH_NUMBER}" || exit $? opatch apply -silent || exit $? popd || exit $? fi done popd || exit $? 1 Für alle Patches im synchronisierten Binary-Verzeichnis: 2 Wenn der Patch noch nicht installiert ist, 3 falls noch nicht geschehen, 4 diesen entpacken 5 und anwenden. 1 2 3 4 5    6
  21. 21. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Server Konfiguration Sehr individuell für Deine Erfordernisse Deshalb hier nur Beispiele Ziel auch hier Reentranz und Idempotenz Die gesamte Konfigura on kann bei einzelnen Änderungen erneut komple laufen.    7.1
  22. 22. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms WebLogic Skrip ng per WLST (WebLogic Scrip ng Tool) "${ORACLE_HOME}"/oracle_common/common/bin/wlst.sh config.py config.py #!/usr/bin/python edit() startEdit() cd('/Servers/WLS_FORMS/Log/WLS_FORMS') cmo.setNumberOfFilesLimited(true) cmo.setFileCount(10) cmo.setFileMinSize(65535) activate() exit() 1 Konfiguriere für WLS_FORMS.log eine Log Rota on, 2 wobei maximal 10 Dateien 3 mit einer Größe von 64k behalten werden. 1 2 3    7.2
  23. 23. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Dateien formsweb.cfg cp "${FORMS_CONFIG}"/formsweb.cfg{,.backup."$(date +%Y%m%d_%H%M%S)"} || exit $? sed -i "/# ### IKB-Erweiterungen ### #/,$ d" "${FORMS_CONFIG}"/formsweb.cfg || exit $? sed -i "s/jpi_classid=.*/jpi_classid=clsid:CAFEEFAC-0018-0000-FFFF-ABCDEFFEDCBA/g" "${FORMS_CONFIG}"/formsweb.cfg || exit $? sed -i "s/.*jpi_codebase=.*/# jpi_codebase=.*/g" "${FORMS_CONFIG}"/formsweb.cfg || exit $? sed -i "s/jpi_mimetype=.*/jpi_mimetype=application/x-java-applet;version=1.8/g" "${FORMS_CONFIG}"/formsweb.cfg || exit $? cat ikb.formsweb.cfg >> "${FORMS_CONFIG}"/formsweb.cfg || exit $? 1 Backup der aktuellen Datei, 2 en ernen aller bisherigen Erweiterungen der IKB, 3 neueste installierte 1.8 Java Version auf dem Client ansprechen 4 und hinzufügen aller weiteren IKB Ergänzungen am Dateiende. 1 2 3 4    7.3
  24. 24. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms IDE Betriebssystem des Endanwenders in der IKB ist Windows Integra onen KreDa mit Office und Betriebssystem Entwicker muss diese Integra onen testen können also auch Entwicklung auf Windows vorkonfigurierte IDE für Entwickler erforderlich    8.1
  25. 25. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Paketierung IDE muss unabhängig vom Pake erer silent installierbar sein, z.B. ab einem definierten Zeitpunkt bei nächstem Rechnerstart abhängig von Installa on anderer Pakete Integra on in So ware-Bereitstellungsprozess des Providers Skrip ng per Powershell und Steuerung über Microso System Center Configura on Manager (SCCM) Inventarisierung So wareverteilung Lizenzüberwachung Repor ng PowerShell App Deployment Toolkit    8.2
  26. 26. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Forms und Reports aktuell Test der Anwendung auf 12c Applica on Server Entwicklungs-Datenbank wird nachts kopiert Compile/Deploy 11g Module gegen 12c Applica on Server wenn möglich, Development weiter 11g bis Rollout Applica on Server 12c produk v 11g ist per pake ert 12c Pake erung gerade gestartet Idee: analog zu Linux Server incl. Konfigura on kein DBA-Connect für RCU für zentrale Datenbanken Idee: lokale XE Datenbank für Infrastructure Repository PowerShell App Deployment Toolkit    8.3
  27. 27. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Oracle XE Datenbank [string]$appEXEFile = "setup.exe" [string]$AppEXEInstArgs = '/s /v"RSP_FILE=' + $DirSupportFiles + 'XEInstall.rsp" /v"/L*v ' + $InstallLog +'" /v"/qn"' [string]$AppEXEFileUninst = "setup.exe" [string]$AppEXEUninstArgs = '/s /x /v"/qn /Lv ' + $UnInstallLog + '"' # Pre-Installation Expand-Archive -LiteralPath "$dirSupportFiles$AppSourceZip" -DestinationPath "$dirFiles" # Post-Installation $timeout = New-TimeSpan -Minutes 30 $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() do { $str = Select-String -Path $InstallLog -Pattern "Der Installationsvorgang wurde erfolgreich abgeschlossen." } while ($str -eq $null -and $stopwatch.elapsed -lt $timeout) if ($str -eq $null) {Throw New-Object System.FormatException "Installation nicht erfolgreich"} 1 Variablen für Silent-Installa ons- 2 und Deinstalla ons-Rou nen und Parameter 3 Entpacken der Installa ons-Datei 4 Prüfen Logdatei auf Meldung zur erfolgreichen Installa on. Den Löwenanteil macht bereits das erweiterte Framework. 1 2 3 4    8.4
  28. 28. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Development LifeCycle Code von ADF, SOA, Forms & Reports in Git versioniert KreDa wird agil nach KanBan entwickelt Anforderungen in JIRA im Backlog gesammelt, konzep oniert und priorisiert INVEST-Kriterien und Abhängigkeiten berücksich gen Freigegebene Issues in Reihenfolge abarbeiten    9.1
  29. 29. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Branchingmodell Monorepo für alle KreDa-Technologien, Entwicklung in einem Branch/Issue möglich Trunk-Based Development Code beginnend mit dem Integra onstest im Master (=trunk) eingecheckt kein Cherry Picking, Änderungen laufen durch alle Umgebungen Con nous Integra on durch kurzlebige Feature-/Bugfix-Branches Release-Branch für Bugfixes Entwicklungs-Branches für Features (aus Master) und Bugfixes (aus Release)    9.2
  30. 30. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Build & Deployment as Code Mul -Branch-Pipeline abgelegt als Code im KreDa-Git-Repository Shared Libraries Module in separatem Repository Ausführungsumfang abhängig von Branchtyp, z.B. kein Deployment in Feature-Branches Declara ve Pipeline wegen Lesbarkeit  automa scher Build aller Branches und Pull Requests In Pipeline nur Struktur mit Shell-Skript-Aufrufen Skripte ebenfalls in Git versioniert    9.3
  31. 31. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Jenkinsfile stage ("Forms Build Linux") { agent { label 'FR_LINUX_3' } options { skipDefaultCheckout true } steps { deleteDir() unstash 'forms' ikbFormsBuildLinux(db_instance: env.BUILD_DB_INSTANCE, fr_instance: '3', version: '11.1.2.2.0') } post { always { archiveArtifacts artifacts: 'kreda/forms/linux/log/*.err', allowEmptyArchive: true } } } Auszug aus ~ 1200 Zeilen Pipeline as Code 1 Auf dem Forms & Reports Server Entwicklung 2 wird der Git-Checkout übersprungen. 3 Die Sicherung des vorher erfolgten Checkouts wird entpackt und 4 das Shared Library Modul für den Forms Build parametrisiert aufgerufen. 5 Fehlerdateien werden als Artefakt bereitgestellt. 1 2 3 4 5    9.4
  32. 32. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Shared Library Module Forms Compile #!/usr/bin/env groovy def call(Map config = [:]) { env.DB_INSTANCE = config.db_instance env.FR_INSTANCE = config.fr_instance env.FMW_VERSION_STRING = config.version dir('kreda/forms') { withCredentials([ usernamePassword(credentialsId: 'ikb' + config.db_instance, usernameVariable: 'FR_USER', passwordVariable: 'FR_PASSWORD'), ]) { sh '. forms_compile_linux.sh' } } } 1 Die Variablen aus der Pipeline werden in Umgebungs-Variablen übernommen. 2 Aus dem Forms-Source-Code Verzeichnis wird 3 mit den Kompilierungs-Creden als für die Entwicklungsumgebung 4 das Skript für die Kompilierung der Forms aufgerufen. 1 2 3 4    9.5
  33. 33. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Skript Forms Compile #!/bin/bash . /usr/local/oracle/FR_"${FR_INSTANCE}".env USER_ID="${FR_USER}"/"${FR_PASSWORD}"@IKB"${DB_INSTANCE}"; export USER_ID if [[ "${FMW_VERSION_STRING}" == "11.1.2.2.0" ]]; then FRMCMP_PATH="${ORACLE_INSTANCE}"/bin else FRMCMP_PATH="${DOMAIN_HOME}"/config/fmwconfig/components/FORMS/instances/forms1/bin fi; export FRMCMP_PATH declare -i RETURN_CODE=0 pushd modules || exit 1 for i in *.fmb ; do if "${FRMCMP_PATH}"/frmcmp_batch.sh module="$i" userid="${USER_ID}" batch=yes module_type=form compile_all=yes; then mv "${i%.*}.fmx" ../run || exit 1 else mv "${i%.*}.err" ../linux/log RETURN_CODE+=1 fi done popd || exit 1 exit ${RETURN_CODE} 1 Setzen Environment inclusive Datenbank-Verbindung und Compiler-Pfad 2 Generierung der Module und Verschieben von Artefakten oder Fehlerprotokollen. 3 Returncode ist die Anzahl der fehlerha kompilierten Module. 1 2 3    9.6
  34. 34. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Entwicklung 1.  WebHooks: Repository-Änderungen triggern Jenkins Builds 2.  Pro Issue Erzeugen zentraler Feature- oder Bugfix-Branch 3.  Start neuer Jenkins Build 4.  Checkout des zentralen Branch in lokale Umgebung 5.  Entwicklung, Test und lokaler Commit 6.  Git Hook für Jira-Issue in Commit-Message 7.  Push Änderungen in zentralen Branch 8.  Start neuer Jenkins Build 9.  Anlage Pull Request zur Übertragung in Ziel-Branch 10.  Start neuer Jenkins Build incl. Test-Merge 11.  Push weiterer Änderungen mit neuen Jenkins Builds    9.7
  35. 35. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Code Review Pull Request ist Voraussetzung für Code Review Review von textbasiertem Code direkt in Bitbucket Forms und Reports sind aber Binärdateien kein externes Di ool in Bitbucket aufru ar   Auschecken des Feature-Branches  Aufruf aus Git direkt git difftool <commit_start>..<commit_end> <path/to/file>  oder im Soucetree Git-Log Anzeige im FormsApiMaster Diff-Konfigura on in Git für FormsApiMaster    9.8
  36. 36. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Merge bei KreDa für Änderungen ist mindestens ein Reviewer nö g müssen alle Reviewer zus mmen müssen 2 erfolgreiche Builds vorliegen (Branch und Pull-Request)  → Konfigura on Merge Checks in Bitbucket Merge Checks Konfigura on / im Pull Request   Merge → neuer Jenkins Build Zielbranch  Löschen Branch → löscht Jenkins Builds Jenkins Builds Master neu, Branch und Pull Request gelöscht Merge- analog Diff-Konfigura on in Git    9.9
  37. 37. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Deployment Integrations-Test  Erzeugen Kommentar in JIRA mit Einsatz-Version  paralleler Compile gegen Windows/Linux  iden fizieren von Betriebssystem-bedingten Fehlern  Nach Compile wartet Jenkins-Build auf Freigabe  Nur berech gte Personen können freigeben  Lock der Umgebung gegen neue Builds  Nach Freigabe erneuter Compile mit Deployment  Windows Artefakte in Netzwerkverzeichnis verteilt  Entwickler muss nur geänderte Module lokal generieren  andere liegen im FORMS_/REPORTS_PATH  Restart Applica on Server wg. Forms-Cache  Kennzeichnung Commits mit Einsatzdatum/Umgebung  Integra ons-Test durch Entwickler    9.10
  38. 38. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Deployment per Synchronisation Linux Compile Server → Applica on Server rsync im Betriebssytem meist enthalten Windows Compile Server → Netzwerkverzeichnis Netzwerkverzeichnis im FORMS_PATH des Entwicklers cwRsync im Pfad Windows Compile Server installiert rsync --archive --delete --include='*.plx' --include='*.mmx' --include='*.fmx' --exclude='*' . //%UNC_FR_MODULE_PATH% || exit 1 rsync --archive --delete --include='*.plx' --include='*.mmx' --include='*.fmx' --exclude='*' . "${1}":"${FR_MODULE_PATH}" || exit    9.11
  39. 39. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Deployment Abnahme-Test  Nach Deployment Integra ons-Test wartet Jenkins-Build auf Freigabe  Nur berech gte Personen können freigeben  Lock der Umgebung gegen neue Builds  Nach Freigabe erneuter Compile mit Deployment  Restart Applica on Server wg. Forms-Cache  Kennzeichnung Commits mit Einsatzdatum/Umgebung  Abnahme-Test durch Fachabteilung  Dokumenta on Test und Abnahme in JIRA    9.12
  40. 40. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Deployment Produktion  Nach Deployment Abnahme-Test wartet Jenkins-Build auf Freigabe  anhand abgenommener Issues einzusetzenden Jenkins-Build festlegen  Nur Release Manager können freigeben  Lock der Umgebung gegen neue Builds  Nach Freigabe erneuter Compile mit Deployment  Auslagerung gelöschter Programme durch Sync  Restart Applica on Server wg. Forms-Cache  Kennzeichnung Commits mit Einsatzdatum/Umgebung  Produk ve Nutzung der Anwendungs-Version    9.13
  41. 41. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Nachvollziehbarkeit  Tags in Bitbucket Commit-Historie  Reviewer & Builds in Bitbucket PR-Historie  Branches, Commits und PR’s am JIRA-Issue  Branch & Commit an Jenkins Pipeline    9.14
  42. 42. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Fazit Automa sierung ist nicht einfach Automa sierung ist aber auch mit Forms & Reports möglich Auch bei verschiedensten Anwendungsfällen hil bei wiederkehrenden fehleranfälligen Prozessen Automa sierung ist selbst auch Programmierung Skripten mit IDE’s mit Code-Vervollständigung & -Analyse Versioniere deinen Automa sierungs-Code Habe also mindestens dieselben Ansprüche an die Automa sierung wie an die Programmierung selbst!    10
  43. 43. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Q&A    11
  44. 44. Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons Forms & Reports 12c - Prozesse & Automa sierung in Development & Opera ons @develishdevelop #DOAG2021 #AutomateOracleForms Referenzen by by by by gray vehicle being fixed inside factory using robot machines Lenny Kuhne Roboter und Zahlen leadec red le ers neon light Simone Secci So ware Development Life Wikimedia Commons    12

×