Build-Umgebung build-environment
Erfahren Sie mehr über die Build-Umgebung von Cloud Manager und darüber, wie sie den Code erstellt und testet.
Details der Build-Umgebung build-environment-details
Cloud Manager erstellt und testet Ihren Code mithilfe einer speziellen Erstellungsumgebung.
- Die Build-Umgebung ist Linux-basiert und von Ubuntu 22.04 abgeleitet.
- Apache Maven 3.9.4 ist installiert.
- Adobe empfiehlt Benutzenden, ihre Maven-Repositorys zu aktualisieren, um HTTPS anstelle von HTTP zu verwenden.
- Die installierten Java-Versionen sind Oracle JDK 11.0.22, Oracle JDK 17.0.10 und Oracle JDK 21.0.4.
-
WICHTIG: Standardmäßig ist die Umgebungsvariable
JAVA_HOME
auf/usr/lib/jvm/jdk1.8.0_401
festgelegt, was Oracle JDK 8u401 enthält. Diese Standardeinstellung sollte für AEM-Cloud-Projekte überschrieben werden, damit JDK 21 (bevorzugt), 17 oder 11 verwendet wird. Weitere Einzelheiten finden Sie im Abschnitt Einstellen der Maven JDK-Version. -
Es werden einige zusätzliche erforderliche Systempakete installiert.
bzip2
unzip
libpng
imagemagick
graphicsmagick
-
Andere Pakete können zur Build-Zeit installiert werden, wie im Abschnitt Installieren zusätzlicher Systempakete beschrieben.
-
Jeder Build wird in einer sauberen Umgebung ausgeführt, wobei der Build-Container keinen Status zwischen den Ausführungen behält.
-
Maven wird immer mit den folgenden drei Befehlen ausgeführt.
mvn --batch-mode org.apache.maven.plugins:maven-dependency-plugin:3.1.2:resolve-plugins
mvn --batch-mode org.apache.maven.plugins:maven-clean-plugin:3.1.0:clean -Dmaven.clean.failOnError=false
mvn --batch-mode org.jacoco:jacoco-maven-plugin:prepare-agent package
-
Maven wird auf Systemebene mit einer
settings.xml
-Datei konfiguriert, die automatisch das öffentliche Adobe-Artefakt-Repository enthält und ein Profil namensadobe-public
verwendet. (Weitere Informationen dazu finden Sie im Adobe Public Maven Repository.)
jacoco-maven-plugin
an, aber die erforderliche Version hängt von der Java-Version des Projekts ab. Für Java 8 muss die Plug-in-Version mindestens 0.7.5.201505241946
sein, während neuere Java-Versionen möglicherweise eine neuere Version erfordern.HTTPS-Maven-Repositorys https-maven
Cloud Manager Version 2023.10.0 hat eine rollierende Aktualisierung der Build-Umgebung gestartet (mit Version 2023.12.0 abgeschlossen), die eine Aktualisierung auf Maven 3.8.8 enthielt. Eine wesentliche Änderung, die in Maven 3.8.1 eingeführt wurde, war eine Sicherheitsverbesserung, die darauf abzielte, potenzielle Schwachstellen zu minimieren. Insbesondere deaktiviert Maven nun alle unsicheren http://*
-Spiegelungen standardmäßig, wie in den Maven-Versionshinweisen beschrieben.
Aufgrund dieser Sicherheitsverbesserung können bei einzelnen Benutzenden während des Build-Schritts Probleme auftreten, insbesondere beim Herunterladen von Artefakten aus Maven-Repositorys, die unsichere HTTP-Verbindungen verwenden.
Um ein reibungsloses Erlebnis mit der aktualisierten Version zu gewährleisten, empfiehlt Adobe, dass Benutzende ihre Maven-Repositorys so aktualisieren, dass sie HTTPS anstelle von HTTP verwenden. Diese Anpassung steht im Einklang mit dem wachsenden Trend der Branche hin zu sicheren Kommunikationsprotokollen und trägt zur Aufrechterhaltung eines sicheren und zuverlässigen Build-Prozesses bei.
Verwenden einer bestimmten Java-Version using-java-support
Der Build-Prozess von Cloud Manager verwendet das Oracle 8 JDK, um standardmäßig Projekte zu erstellen. AEM Cloud Service-Kundschaft sollte jedoch die JDK-Version zur Maven-Ausführung auf 21 (bevorzugt), 17 oder 11 festlegen.
Festlegen der Maven-JDK-Version alternate-maven-jdk-version
Erstellen Sie zum Festlegen der JDK-Version zur Maven-Ausführung eine Datei mit dem Namen .cloudmanager/java-version
in der von der Pipeline verwendeten Git-Repository-Verzweigung. Bearbeiten Sie die Datei so, dass sie nur den Text enthält, 21
oder 17
. Cloud Manager akzeptiert zwar auch den Wert 8
, jedoch wird diese Version nicht mehr für AEM Cloud Service-Projekte unterstützt. Alle anderen Werte werden ignoriert. Wenn 21
oder 17
angegeben ist, wird Oracle Java 21 oder Oracle Java 17 verwendet.
Voraussetzungen für die Migration zur Build-Erstellung mit Java 21 oder Java 17 prereq-for-building
Um zur Build-Erstellung mit Java 21 oder Java 17 zu migrieren, müssen Sie zunächst ein Upgrade auf die neueste SonarQube-Version durchführen. Weitere Details finden Sie in den Versionshinweisen für Cloud Manager 2025.1.0.
Wenn Sie Ihre Anwendung auf eine neue Java-Build- und Runtime-Version migrieren, testen Sie sie gründlich in Entwicklungs- und Staging-Umgebungen, bevor Sie sie in der Produktion bereitstellen.
Adobe empfiehlt die folgende Bereitstellungsstrategie:
- Führen Sie Ihr lokales SDK mit Java 21 aus, das Sie unter https://experience.adobe.com/#/downloads herunterladen können, stellen Sie Ihre Anwendung dafür bereit und überprüfen Sie die Funktionalität. Überprüfen Sie die Protokolle auf Fehler, die auf Probleme beim Laden von Klassen oder beim Weben von Bytcodes hinweisen.
- Konfigurieren Sie eine Verzweigung im Cloud Manager-Repository für die Verwendung von Java 21 als Java-Version für die Build-Zeit, konfigurieren Sie eine DEV-Pipeline für die Verwendung dieser Verzweigung und führen Sie die Pipeline aus. Führen Sie Validierungstests durch.
- Wenn alles gut aussieht, konfigurieren Sie Ihre Staging-/Produktions-Pipeline so, dass Java 21 als Java-Version für die Build-Zeit verwendet wird, und führen Sie die Pipeline aus.
Über bestimmte Übersetzungsfunktionen translation-features
Die folgenden Funktionen funktionieren möglicherweise nicht ordnungsgemäß, wenn sie in der Java 21 Runtime bereitgestellt werden, und Adobe geht von einer Korrektur bis Anfang 2025 aus:
XLIFF
(XML Localization Interchange File Format) schlägt bei menschlichen Übersetzungen fehl.I18n
(Internationalisierung) behandelt die Sprachgebietsschemata Hebräisch (he
), Indonesisch (in
) und Jiddisch (yi
) aufgrund von Änderungen im Gebietsschema-Konstruktor in neueren Java-Versionen nicht ordnungsgemäß.
Laufzeitanforderungen runtime-requirements
Die Java 21-Laufzeitumgebung wird für Builds mit Java 21 und Java 17 verwendet und nach und nach auch auf Java 11-Builds angewendet (siehe Hinweis unten). Eine Umgebung muss auf AEM Version 17098 oder neuer ausgeführt werden, um das Java 21-Update zu erhalten. Zur Sicherstellung der Kompatibilität sind die folgenden Anpassungen erforderlich.
Bibliotheksaktualisierungen können jederzeit angewendet werden, da sie mit älteren Java-Versionen kompatibel bleiben.
-
Mindestversion von ASM:
Aktualisieren Sie die Verwendung des Java-Paketsorg.objectweb.asm
, das häufig inorg.ow2.asm.*
Artefakten gebündelt ist, auf Version 9.5 oder höher, um die Unterstützung für neuere JVM-Laufzeiten sicherzustellen. -
Mindestversion von Groovy:
Aktualisieren Sie die Verwendung der Java-Paketeorg.apache.groovy
oderorg.codehaus.groovy
auf Version 4.0.22 oder höher, um die Unterstützung für neuere JVM-Laufzeiten sicherzustellen.Dieses Paket kann indirekt durch Hinzufügen von Abhängigkeiten von Dritten wie der AEM Groovy Console eingeschlossen werden.
-
Mindestversion von Aries SPIFly:
Aktualisieren Sie die Verwendung des Java-Paketsorg.apache.aries.spifly.dynamic.bundle
auf Version 1.3.6 oder höher, um die Unterstützung für neuere JVM-Laufzeiten sicherzustellen.
Die AEM Cloud Service-SDK unterstützt Java 21 und ermöglicht es Ihnen, die Kompatibilität Ihres Projekts mit Java 21 zu überprüfen, bevor Sie eine Cloud Manager-Pipeline ausführen.
-
Laufzeitparameter bearbeiten:
Beim lokalen Ausführen von AEM mit Java 21 schlagen die Startskripte (crx-quickstart/bin/start
odercrx-quickstart/bin/start.bat
) aufgrund des ParametersMaxPermSize
fehl. Entfernen Sie als Abhilfe entweder-XX:MaxPermSize=256M
aus dem Skript oder definieren Sie die UmgebungsvariableCQ_JVM_OPTS
, indem Sie sie auf-Xmx1024m -Djava.awt.headless=true
setzen.Dieses Problem wurde in der AEM Cloud Service SDK-Version 19149 und höher behoben.
.cloudmanager/java-version
auf 21
oder 17
festgelegt ist, wird die Java 21-Laufzeitumgebung bereitgestellt. Die Java 21-Laufzeitumgebung wird seit Dienstag, dem 4. Februar 2025, schrittweise für alle Umgebungen (nicht nur für die Umgebungen, deren Code mit Java 11 erstellt wurde) bereitgestellt. Die Rollouts beginnen mit Sandboxes und Entwicklungsumgebungen, gefolgt von allen Produktionsumgebungen im April 2025. Kundinnen und Kunden, die die Java 21-Laufzeitumgebung früher übernehmen möchten, können sich unter aemcs-java-adopter@adobe.com an Adobe wenden.Anforderungen zur Build-Zeit: build-time-reqs
Die folgenden Anpassungen sind erforderlich, um das Erstellen des Projekts mit Java 21 und Java 17 zu ermöglichen. Sie können sogar vor der Ausführung von Java 21 und Java 17 aktualisiert werden, da sie mit älteren Java-Versionen kompatibel sind.
Kundinnen und Kunden von AEM Cloud Service wird empfohlen, ihre Projekte so früh wie möglich mit Java 21 zu erstellen, um neue Sprachfunktionen nutzen zu können.
-
Mindestversion von
bnd-maven-plugin
:
Aktualisieren Sie die Verwendung desbnd-maven-plugin
auf Version 6.4.0, um die Unterstützung für neuere JVM-Laufzeiten sicherzustellen.Version 7 oder höher ist nicht mit Java 11 oder niedriger kompatibel. Daher wird eine Aktualisierung auf diese Version nicht empfohlen.
-
Mindestversion von
aemanalyser-maven-plugin
:
Aktualisieren Sie die Verwendung desaemanalyser-maven-plugin
auf Version 1.6.6 oder höher, um die Unterstützung für neuere JVM-Laufzeiten sicherzustellen. -
Mindestversion von
maven-bundle-plugin
:
Aktualisieren Sie die Verwendung desmaven-bundle-plugin
auf Version 5.1.5 oder höher, um die Unterstützung für neuere JVM-Laufzeiten sicherzustellen.Version 6 oder höher ist nicht mit Java 11 oder niedriger kompatibel. Daher wird eine Aktualisierung auf diese Version nicht empfohlen.
-
Aktualisieren von Abhängigkeiten in
maven-scr-plugin
:
Dasmaven-scr-plugin
ist nicht direkt mit Java 21 oder Java 17 kompatibel. Es können jedoch Deskriptordateien generiert werden, indem die Version der ASM-Abhängigkeit in der Plug-in-Konfiguration aktualisiert wird, wie im folgenden Beispiel dargestellt:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.26.4</version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-analysis</artifactId>
<version>9.7.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</plugin>
...
</plugins>
...
</build>
...
</project>
Umgebungsvariablen – Standard environment-variables
Je nach den Informationen über das Programm oder die Pipeline kann es notwendig sein, den Build-Prozess zu variieren.
Wenn beispielsweise die Minimierung von JavaScript zur Erstellungszeit mithilfe eines Tools wie Gulp erfolgt, können für verschiedene Umgebungen unterschiedliche Minimierungsstufen als Voreinstellung festgelegt werden. Ein Entwicklungs-Build verwendet möglicherweise eine geringere Minimierungsstufe als Staging und Produktion.
Um dies zu unterstützen, fügt Cloud Manager diese Standard-Umgebungsvariablen bei jeder Ausführung dem Build-Container hinzu.
CM_BUILD
true
(wahr) festgelegtBRANCH
CM_PIPELINE_ID
CM_PIPELINE_NAME
CM_PROGRAM_ID
CM_PROGRAM_NAME
ARTIFACTS_VERSION
CM_AEM_PRODUCT_VERSION
Umgebungsvariablen – Pipeline pipeline-variables
Ihr Build-Prozess erfordert möglicherweise bestimmte Konfigurationsvariablen, die nicht im Git-Repository gespeichert werden sollten. Darüber hinaus müssen Sie diese Variablen möglicherweise zwischen den Pipeline-Ausführungen anpassen, die dieselbe Verzweigung verwenden.
Weitere Informationen finden Sie unter Konfigurieren von Pipeline-Variablen.
Installieren zusätzlicher Systempakete installing-additional-system-packages
Einige Builds erfordern zusätzliche Systempakete, um vollständig zu funktionieren. So ist es z. B. möglich, dass ein Build ein Python- oder Ruby-Skript aufruft, wofür der entsprechende Sprach-Interpreter installiert sein muss. Dieser Installationsprozess kann durch einen Aufruf von exec-maven-plugin
in Ihrer pom.xml
gesteuert werden, um APT aufzurufen. Diese Ausführung sollte im Allgemeinen in einem Cloud Manager-spezifischen Maven-Profil eingeschlossen sein. In diesem Beispiel wird Python installiert.
<profile>
<id>install-python</id>
<activation>
<property>
<name>env.CM_BUILD</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>apt-get-update</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>apt-get</executable>
<arguments>
<argument>update</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>install-python</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>apt-get</executable>
<arguments>
<argument>install</argument>
<argument>-y</argument>
<argument>--no-install-recommends</argument>
<argument>python</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Mit derselben Methode können Sie auch sprachspezifische Pakete installieren, z. B. mit gem
für RubyGems oder mit pip
für Python-Pakete.