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
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Forms and Reports 12c - Processes and Automation in Development and Operations
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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