Build-omgeving build-environment
Meer informatie over de Cloud Manager-ontwikkelomgeving en hoe deze uw code bouwt en test.
Omgevingsdetails samenstellen build-environment-details
Cloud Manager bouwt en test uw code gebruikend een gespecialiseerde bouwstijlmilieu.
- De ontwikkelomgeving is gebaseerd op Linux en is afgeleid van Ubuntu 22.04.
- Apache Maven 3.9.4 is geïnstalleerd.
- Adobe adviseert gebruikers hun Geweven bewaarplaatsen bij te werken om HTTPS in plaats van HTTP te gebruiken.
- De geïnstalleerde Java-versies zijn Oracle JDK 11.0.22, Oracle JDK 17.0.10 en Oracle JDK 21.0.4.
-
BELANGRIJK: Door gebrek, wordt de
JAVA_HOMEmilieuvariabele geplaatst aan/usr/lib/jvm/jdk1.8.0_401, die Oracle JDK 8u401 bevat. Dit gebrek zou voor de Projecten van de Wolk van AEM moeten worden met voeten getreden om JDK 21 (aangewezen), 17, of 11 te gebruiken. Zie Plaatsend de Geweven sectie van de Versie JDK voor meer details. -
Er zijn enkele extra systeempakketten geïnstalleerd die nodig zijn.
bzip2unziplibpngimagemagickgraphicsmagick
-
Andere pakketten kunnen bij bouwstijltijd zoals die in de sectie wordt beschreven worden geïnstalleerd die de Extra Pakketten van het Systeem installeert.
-
Elke bouwstijl loopt in een schone milieu, met de bouwstijlcontainer die geen staat tussen uitvoeringen behoudt.
-
Maven wordt altijd uitgevoerd met de volgende drie opdrachten.
mvn --batch-mode org.apache.maven.plugins:maven-dependency-plugin:3.1.2:resolve-pluginsmvn --batch-mode org.apache.maven.plugins:maven-clean-plugin:3.1.0:clean -Dmaven.clean.failOnError=falsemvn --batch-mode org.jacoco:jacoco-maven-plugin:prepare-agent package
-
Maven wordt geconfigureerd op systeemniveau met een
settings.xml-bestand. Dit bestand bevat automatisch de openbare Adobe-gegevensopslagruimte met een profiel met de naamadobe-public. (Zie Openbare Bewaarplaats van Adobe voor meer details).
jacoco-maven-plugin op, maar de vereiste versie is afhankelijk van de Java-versie van het project. Voor Java 8 moet de versie van de insteekmodule minstens 0.7.5.201505241946 zijn, terwijl voor nieuwere Java-versies mogelijk een recentere versie nodig is.Door HTTPS aangebrachte opslagruimten https-maven
Cloud Manager versie 2023.10.0 begon een het rollen update aan het bouwstijlmilieu (die met versie 2023.12.0) voltooide, die een update aan Geweven 3.8.8 omvatte. Een belangrijke wijziging die werd aangebracht in Maven 3.8.1 was een verbetering van de beveiliging die bedoeld was om potentiële kwetsbaarheden te beperken. Specifiek, maven maakt nu alle onveilige http://* spiegels door gebrek onbruikbaar, zoals die in de Gemaakt versienota's worden geschetst.
Als gevolg van deze beveiligingsuitbreiding kunnen sommige gebruikers problemen ondervinden tijdens de constructiestap, met name wanneer ze artefacten downloaden van Geweven opslagplaatsen die onveilige HTTP-verbindingen gebruiken.
Voor een vlotte ervaring met de bijgewerkte versie raadt Adobe gebruikers aan hun Geweven opslagplaatsen bij te werken om HTTPS in plaats van HTTP te gebruiken. Deze aanpassing sluit aan op de groeiende verschuiving van de industrie naar veilige communicatieprotocollen en helpt een veilig en betrouwbaar bouwproces in stand te houden.
Een specifieke Java-versie gebruiken using-java-support
In het Cloud Manager-ontwikkelproces wordt standaard gebruikgemaakt van de Oracle 8 JDK om projecten te maken, maar klanten van AEM Cloud Service moeten de JDK-versie van Maven voor uitvoering instellen op 21 (voorkeur), 17 of 11.
De Maven JDK-versie instellen alternate-maven-jdk-version
Als u de Git-uitvoeringsmodus JDK wilt instellen, maakt u een bestand met de naam .cloudmanager/java-version in de vertakking Git-opslagplaats die door de pijplijn wordt gebruikt. Bewerk het bestand zodat het alleen de tekst 21 of 17 bevat. Hoewel Cloud Manager ook de waarde 8 accepteert, wordt deze versie niet meer ondersteund voor AEM Cloud Service-projecten. Eventuele andere waarden worden genegeerd. Wanneer 21 of 17 wordt opgegeven, wordt Oracle Java 21 of Oracle Java 17 gebruikt.
Vereisten voor migratie naar gebouwen met Java 21 of Java 17 prereq-for-building
Cloud Manager gebruikt nu SonarQube 9.9 om te bouwen met Java 21 of Java 17. Dit is compatibel met deze Java-versies. Deze wijziging is geïntroduceerd in Cloud Manager release 2025.1.0. Er is geen actie van de klant vereist om SonarQube te upgraden. Voor meer details en om de verandering te begrijpen, zie de Nota's van de Versie voor Cloud Manager 2025.1.0 .
Wanneer u uw toepassing naar een nieuwe Java-versie (build) en een nieuwe runtimeversie migreert, moet u deze grondig testen in ontwikkelings- en werkgebiedomgevingen voordat u de toepassing implementeert naar productie.
Adobe beveelt de volgende implementatiestrategie aan:
- Voer uw lokale SDK uit met Java 21, dat u kunt downloaden van https://experience.adobe.com/#/downloads, en implementeer uw toepassing in dit programma en valideer de functionaliteit ervan. Controleer de logboeken dat er geen fouten zijn, die op problemen met het laden van klassen of bytecode het weven wijzen.
- Configureer een vertakking in uw Cloud Manager-opslagplaats om Java 21 te gebruiken als Java-versie voor de ontwikkelingstijd, configureer een DEV-pijpleiding om deze vertakking te gebruiken en de pijpleiding uit te voeren. Voer uw validatietests uit.
- Als het goed kijkt, vorm uw stadium/staafpijpleiding om Java 21 als versie van bouwstijltijdJava te gebruiken en de pijpleiding in werking te stellen.
Enkele vertaalfuncties translation-features
De volgende functies werken mogelijk niet correct wanneer deze worden geïmplementeerd in de Java 21-runtime, en Adobe verwacht deze functies begin 2025 te kunnen oplossen:
XLIFF(XML Localization Interchange File Format) mislukt bij gebruik van Human Translation.I18n(Internationalisatie) behandelt de taallandinstellingen Hebreeuws (he), Indonesisch (in) en Jiddisch (yi) niet correct als gevolg van wijzigingen in de constructor Locale in nieuwere Java-versies.
Runtime-vereisten runtime-requirements
De Java 21-runtime is toegepast op alle in aanmerking komende omgevingen, omgevingen in AEM versie 17098 of hoger die aan de onderstaande criteria voldoen. Als een omgeving niet aan de criteria voldoet, is het belangrijk om aanpassingen aan te brengen om prestaties, beschikbaarheid, en veiligheid te verzekeren.
-
Minimale versie van ASM:
Werk het gebruik van het pakket van Javaorg.objectweb.asmbij, vaak gebundeld inorg.ow2.asm.*artefacten, aan versie 9.5 of hoger om steun voor nieuwere JVM runtimes te verzekeren. -
Minimale versie van Groovy:
Werk het gebruik van de Java-pakkettenorg.apache.groovyoforg.codehaus.groovybij naar versie 4.0.22 of hoger om ondersteuning voor nieuwere JVM-runtimes te garanderen.Deze bundel kan indirect worden omvat door dergebiedsdelen zoals de Console van AEM Groovy toe te voegen.
-
Minimale versie van Aries SPIFly:
Werk het gebruik van het Java-pakketorg.apache.aries.spifly.dynamic.bundlebij naar versie 1.3.6 of hoger om ondersteuning voor nieuwere JVM-runtimes te garanderen.
De AEM Cloud Service SDK ondersteunt Java 21 en biedt u de mogelijkheid om de compatibiliteit van uw project met Java 21 te controleren voordat u een Cloud Manager-pijpleiding uitvoert.
-
geef een runtime parameter uit:
Wanneer AEM lokaal wordt uitgevoerd met Java 21, mislukken de beginscripts (crx-quickstart/bin/startofcrx-quickstart/bin/start.bat) vanwege de parameterMaxPermSize. Als remedie verwijdert u-XX:MaxPermSize=256Muit het script of definieert u de omgevingsvariabeleCQ_JVM_OPTSen stelt u deze in op-Xmx1024m -Djava.awt.headless=true.Dit probleem is opgelost in AEM Cloud Service SDK versie 19149 en hoger.
.cloudmanager/java-version in te stellen op 21 of 17 . Contact Adobe in aemcs-java-adopter@adobe.com als u vragen hebt.Vereisten voor de buildtijd build-time-reqs
De volgende aanpassingen zijn vereist om het project te kunnen bouwen met Java 21 en Java 17. Ze kunnen al worden bijgewerkt voordat u Java 21 en Java 17 uitvoert, omdat ze compatibel zijn met oudere Java-versies.
Klanten van AEM Cloud Service wordt aangeraden hun projecten zo snel mogelijk met Java 21 te maken om te profiteren van nieuwe taalfuncties.
-
Minimale versie van
bnd-maven-plugin:
Werk het gebruik vanbnd-maven-pluginnaar versie 6.4.0 bij om ondersteuning voor nieuwere JVM-runtimes te garanderen.Versies 7 of hoger zijn niet compatibel met Java 11 of lager. Een upgrade naar die versie wordt daarom afgeraden.
-
Minimale versie van
aemanalyser-maven-plugin:
Werk het gebruik vanaemanalyser-maven-pluginnaar versie 1.6.6 of hoger bij om ondersteuning voor nieuwere JVM-runtimes te garanderen. -
Minimale versie van
maven-bundle-plugin:
Werk het gebruik vanmaven-bundle-pluginnaar versie 5.1.5 of hoger bij om ondersteuning voor nieuwere JVM-runtimes te garanderen.Versie 6 of hoger is niet compatibel met Java 11 of lager. Een upgrade naar die versie wordt daarom niet aanbevolen.
-
de gebiedsdelen van de Update in
maven-scr-plugin:maven-scr-pluginis niet rechtstreeks compatibel met Java 21 of Java 17. U kunt echter wel descriptorbestanden genereren door de ASM-afhankelijkheidsversie bij te werken in de plug-inconfiguratie, zoals in het volgende voorbeeld wordt getoond:
<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>
Omgevingsvariabelen - standaard environment-variables
U kunt het noodzakelijk vinden om het bouwstijlproces te variëren dat op informatie over het programma of de pijpleiding wordt gebaseerd.
Als JavaScript bijvoorbeeld tijdens het maken van een product als gulp miniaturen maakt, hebben verschillende miniatuurniveaus de voorkeur voor verschillende omgevingen. Een ontwikkelingsbuild zou een lichtere minificatie kunnen gebruiken in vergelijking met ophaling en productie.
Om dit te steunen, voegt Cloud Manager deze standaardmilieuvariabelen aan de bouwstijlcontainer voor elke uitvoering toe.
CM_BUILDtrueBRANCHCM_PIPELINE_IDCM_PIPELINE_NAMECM_PROGRAM_IDCM_PROGRAM_NAMEARTIFACTS_VERSIONCM_AEM_PRODUCT_VERSIONOmgevingsvariabelen - pijpleiding pipeline-variables
Uw bouwstijlproces zou specifieke configuratievariabelen kunnen vereisen die niet in de bewaarplaats van het Git zouden moeten worden opgeslagen. Bovendien, kunt u deze variabelen tussen pijpleidingsuitvoeringen moeten aanpassen gebruikend de zelfde tak.
Zie ook vormen de Variabelen van de Pijpleiding voor meer informatie.
Extra systeempakketten installeren installing-additional-system-packages
Sommige bouwstijlen vereisen extra systeempakketten om volledig te functioneren. Een build kan bijvoorbeeld een Python- of Ruby-script aanroepen en moet een geschikte taalinterpreter hebben geïnstalleerd. Dit installatieproces kan worden beheerd door exec-maven-plugin in uw pom.xml te roepen om APT aan te roepen. Deze uitvoering moet doorgaans worden opgenomen in een Cloud Manager-specifiek Maven-profiel. In dit voorbeeld wordt Python geïnstalleerd.
<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>
Dezelfde techniek kan worden gebruikt om taalspecifieke pakketten te installeren, bijvoorbeeld met gem voor RubyGems of pip voor Python Packages.