SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Más contenido relacionado

La actualidad más candente

Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...QAware GmbH
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatengeKarin Patenge
 
Effective Blueprints for Forms 2 Oracle ADF
Effective Blueprints for Forms 2 Oracle ADFEffective Blueprints for Forms 2 Oracle ADF
Effective Blueprints for Forms 2 Oracle ADFenpit GmbH & Co. KG
 
Visualisierung von fachlichen Informationen mit Oracle ADF
Visualisierung von fachlichen Informationen mit Oracle ADFVisualisierung von fachlichen Informationen mit Oracle ADF
Visualisierung von fachlichen Informationen mit Oracle ADFUlrich Gerkmann-Bartels
 
Codd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
Codd & ACID - ein Ausflug in die Datenbank-Theorie und GeschichteCodd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
Codd & ACID - ein Ausflug in die Datenbank-Theorie und GeschichteMarkus Flechtner
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsStephan Kaps
 
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!adesso AG
 
Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017oraclebudb
 

La actualidad más candente (10)

Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
 
Effective Blueprints for Forms 2 Oracle ADF
Effective Blueprints for Forms 2 Oracle ADFEffective Blueprints for Forms 2 Oracle ADF
Effective Blueprints for Forms 2 Oracle ADF
 
Visualisierung von fachlichen Informationen mit Oracle ADF
Visualisierung von fachlichen Informationen mit Oracle ADFVisualisierung von fachlichen Informationen mit Oracle ADF
Visualisierung von fachlichen Informationen mit Oracle ADF
 
Amazon Redshift
Amazon RedshiftAmazon Redshift
Amazon Redshift
 
Enterprise APEX
Enterprise APEXEnterprise APEX
Enterprise APEX
 
Codd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
Codd & ACID - ein Ausflug in die Datenbank-Theorie und GeschichteCodd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
Codd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
 
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
 
Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017Oracle Technology Monthly Oktober 2017
Oracle Technology Monthly Oktober 2017
 

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

Anwendungsmodernisierung mit Oracle Application Express (APEX)
Anwendungsmodernisierung mit Oracle Application Express (APEX)Anwendungsmodernisierung mit Oracle Application Express (APEX)
Anwendungsmodernisierung mit Oracle Application Express (APEX)Niels de Bruijn
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Torsten Kleiber
 
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?Trivadis
 
Monitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthMonitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthGerhard Lausser
 
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!Klaus Bild
 
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergSCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergOPITZ CONSULTING Deutschland
 
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenKai Donato
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickAmazee Labs
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development ToolsCadaxo GmbH
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
Frontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeFrontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeNico Steiner
 
Tune up your APEX
Tune up your APEXTune up your APEX
Tune up your APEXMT AG
 
Webinar - SAP Gateway
Webinar  - SAP GatewayWebinar  - SAP Gateway
Webinar - SAP GatewayCadaxo GmbH
 

Similar a Forms and Reports 12c - Processes and Automation in Development and Operations (20)

Anwendungsmodernisierung mit Oracle Application Express (APEX)
Anwendungsmodernisierung mit Oracle Application Express (APEX)Anwendungsmodernisierung mit Oracle Application Express (APEX)
Anwendungsmodernisierung mit Oracle Application Express (APEX)
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
 
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
 
Monitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthMonitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_health
 
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
 
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergSCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
 
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
 
Drupal 7 Einblick und Ausblick
Drupal 7 Einblick und AusblickDrupal 7 Einblick und Ausblick
Drupal 7 Einblick und Ausblick
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
 
DOAG 2010: ADF Faces RC Best Practice
DOAG 2010: ADF Faces RC Best PracticeDOAG 2010: ADF Faces RC Best Practice
DOAG 2010: ADF Faces RC Best Practice
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
APEX 5.0, und sonst?
APEX 5.0, und sonst?APEX 5.0, und sonst?
APEX 5.0, und sonst?
 
Frontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeFrontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 Bestellsysteme
 
Tune up your APEX
Tune up your APEXTune up your APEX
Tune up your APEX
 
Webinar - SAP Gateway
Webinar  - SAP GatewayWebinar  - SAP Gateway
Webinar - SAP Gateway
 

Más de Torsten Kleiber

Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020Torsten Kleiber
 
Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018Torsten Kleiber
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Torsten Kleiber
 
Agile Oracle database modeling and development
Agile Oracle database modeling and developmentAgile Oracle database modeling and development
Agile Oracle database modeling and developmentTorsten Kleiber
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGTorsten Kleiber
 

Más de Torsten Kleiber (6)

Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020
 
Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
Agile Oracle database modeling and development
Agile Oracle database modeling and developmentAgile Oracle database modeling and development
Agile Oracle database modeling and development
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
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