Ambiente di build build-environment

Scopri l’ambiente di build di Cloud Manager e come genera e verifica il codice.

TIP
Questo documento descrive l’ambiente di build di Cloud Manager per lo sviluppo del progetto AEM as a Cloud Service. Per informazioni dettagliate sulle piattaforme client supportate da AEM as a Cloud Service per l'authoring dei contenuti, consulta il documento Piattaforme client supportate.

Dettagli dell’ambiente di build build-environment-details

Cloud Manager genera e verifica il codice mediante un ambiente di build specializzato.

  • Le versioni Java installate sono Oracle JDK 11.0.22, Oracle JDK 17.0.10 e Oracle JDK 21.0.4.
  • IMPORTANTE: Per impostazione predefinita, la variabile di ambiente JAVA_HOME è impostata su /usr/lib/jvm/jdk1.8.0_401, che contiene Oracle JDK 8u401. Questo valore predefinito deve essere ignorato se i progetti AEM Cloud utilizzano JDK 21 (preferito), 17 o 11. Per ulteriori dettagli, consulta la sezione Impostazione della versione JDK di Maven.

  • È necessario installare anche alcuni pacchetti di sistema aggiuntivi.

    • bzip2
    • unzip
    • libpng
    • imagemagick
    • graphicsmagick
  • Altri pacchetti possono essere installati in fase di build come descritto nella sezione Installazione di pacchetti di sistema aggiuntivi.

  • Ogni build viene eseguita in un ambiente pulito, con il contenitore di build che non mantiene alcuno stato tra le esecuzioni.

  • Maven viene sempre eseguito con i tre comandi riportati di seguito.

    • 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 è configurato a livello di sistema con un file settings.xml, che include automaticamente l’archivio di artefatti pubblico di Adobe utilizzando un profilo denominato adobe-public. Per ulteriori informazioni, consulta Archivio Maven pubblico di Adobe.

NOTE
Sebbene Cloud Manager non definisca una versione specifica del jacoco-maven-plugin, la versione utilizzata deve essere 0.7.5.201505241946 o superiore.

Archivi Maven HTTPS https-maven

Cloud Manager versione 2023.10.0 ha iniziato un aggiornamento continuo dell’ambiente di build (completandolo con la versione 2023.12.0), che includeva un aggiornamento a Maven 3.8.8. Come modifica significativa introdotta in Maven 3.8.1 è stato apportato un miglioramento della sicurezza volto a mitigare potenziali vulnerabilità. In particolare, Maven ora disabilita tutte le corrispondenze http://* non sicure per impostazione predefinita, come descritto nelle note sulla versione di Maven.

Come risultato di questo miglioramento sulla sicurezza, alcuni utenti potrebbero riscontrare problemi durante la fase di build, in particolare durante il download di artefatti dagli archivi Maven che utilizzano connessioni HTTP non sicure.

Per garantire un’esperienza fluida con la versione aggiornata, Adobe consiglia agli utenti di aggiornare gli archivi Maven per utilizzare HTTPS invece di HTTP. Questo adeguamento è in linea con la crescente tendenza del settore verso protocolli di comunicazione sicuri e contribuisce a mantenere un processo di creazione sicuro e affidabile.

Utilizza una versione Java specifica using-java-support

Il processo di build di Cloud Manager utilizza il JDK di Oracle 8 per generare i progetti per impostazione predefinita, ma i clienti di AEM Cloud Service devono impostare la versione JDK di esecuzione Maven su 21 (preferita), 17 o 11.

Impostare la versione JDK di Maven alternate-maven-jdk-version

Per impostare il JDK di esecuzione Maven, crea un file denominato .cloudmanager/java-version nel ramo dell’archivio Git utilizzato dalla pipeline. Modificare il file in modo che contenga solo il testo, 21 o 17. Anche se Cloud Manager accetta il valore 8, questa versione non è più supportata per i progetti AEM Cloud Service. Qualsiasi altro valore viene ignorato. Se si specifica 21 o 17, viene utilizzato Oracle Java 21 o Oracle Java 17.

Prerequisiti per la migrazione alla creazione con Java 21 o Java 17 prereq-for-building

Per migrare alla build con Java 21 o Java 17, devi prima eseguire l’aggiornamento alla versione più recente di SonarQube. Per informazioni dettagliate, consulta le note sulla versione di Cloud Manager 2025.1.0.

Durante la migrazione dell’applicazione a una nuova versione di build Java e a una nuova versione di runtime, esegui un test completo negli ambienti di sviluppo e staging prima di implementarla nell’ambiente di produzione.

Si consiglia la seguente strategia di distribuzione:

  1. Esegui il SDK locale con Java 21, scaricabile da https://experience.adobe.com/#/downloads, e distribuisci l’applicazione su di esso e convalidane la funzionalità. Verificare nei registri che non siano presenti errori, che indicano problemi con il caricamento della classe o la tessitura del bytecode.
  2. Configura un ramo nell’archivio Cloud Manager per utilizzare Java 21 come versione Java di build, configura una pipeline DEV per utilizzare questo ramo ed esegui la pipeline. Eseguire i test di convalida.
  3. Se funziona, configura la pipeline stage/prod per utilizzare Java 21 come versione Java di build ed esegui la pipeline.
Informazioni su alcune funzioni di traduzione translation-features

Le seguenti funzioni potrebbero non funzionare correttamente se distribuite in fase di esecuzione Java 21 e Adobe prevede di risolverle entro l’inizio del 2025:

  • Errore di XLIFF (formato file di interscambio localizzazione XML) durante l'utilizzo di Traduzione umana.
  • I18n (internazionalizzazione) non gestisce correttamente le lingue ebraico (he), indonesiano (in) e yiddish (yi) a causa di modifiche nel costruttore Locale nelle versioni Java più recenti.

Requisiti di runtime runtime-requirements

Il runtime Java 21 viene utilizzato per le build con Java 21 e Java 17 e verrà gradualmente applicato anche alle build Java 11 (vedi la nota seguente). Per ricevere l’aggiornamento Java 21, un ambiente deve trovarsi in una versione di AEM 17098 o più recente. Per garantire la compatibilità, sono necessari i seguenti adeguamenti.

Gli aggiornamenti della libreria possono essere applicati in qualsiasi momento, in quanto rimangono compatibili con le versioni Java precedenti.

  • Versione minima di ASM:
    Aggiornare l'utilizzo del pacchetto Javaorg.objectweb.asm, spesso incluso in org.ow2.asm.* artefatti, alla versione 9.5 o successiva per garantire il supporto per i runtime JVM più recenti.

  • Versione minima di Groovy:
    Aggiornare l'utilizzo dei pacchetti Java org.apache.groovy o org.codehaus.groovy alla versione 4.0.22 o successiva per garantire il supporto per i runtime JVM più recenti.

    Questo bundle può essere incluso indirettamente aggiungendo dipendenze di terze parti come Groovy Console di AEM.

  • Versione minima di Aries SPIFly:
    Aggiornare l'utilizzo del pacchetto Java org.apache.aries.spifly.dynamic.bundle alla versione 1.3.6 o successiva per garantire il supporto per i runtime JVM più recenti.

AEM Cloud Service SDK è compatibile con Java 21 e può essere utilizzato per convalidare la compatibilità del progetto con Java 21 prima di eseguire una pipeline Cloud Manager.

  • Modifica un parametro runtime:
    Quando si esegue AEM localmente con Java 21, gli script iniziali (crx-quickstart/bin/start o crx-quickstart/bin/start.bat) non riescono a causa del parametro MaxPermSize. Per risolvere il problema, rimuovere -XX:MaxPermSize=256M dallo script o definire la variabile di ambiente CQ_JVM_OPTS, impostandola su -Xmx1024m -Djava.awt.headless=true.

    Questo problema è stato risolto con AEM Cloud Service SDK versione 19149 e successive.

IMPORTANT
Quando .cloudmanager/java-version è impostato su 21 o 17, il runtime Java 21 viene distribuito. Il runtime Java 21 è pianificato per il rollout graduale in tutti gli ambienti (non solo in quelli il cui codice è generato con Java 11) a partire da martedì 4 febbraio 2025. Il rollout inizierà con le sandbox e gli ambienti di sviluppo e quindi verrà eseguito in tutti gli ambienti di produzione ad aprile 2025. I clienti che desiderano adottare il runtime Java 21 precedente possono contattare Adobe all'indirizzo aemcs-java-adopter@adobe.com.

Requisiti di tempo di creazione build-time-reqs

Per consentire la creazione del progetto con Java 21 e Java 17 sono necessari i seguenti adeguamenti. Possono essere aggiornati anche prima di eseguire Java 21 e Java 17 perché sono compatibili con le versioni Java precedenti.

Si consiglia ai clienti di AEM Cloud Service di creare i progetti con Java 21 il prima possibile per sfruttare le nuove funzioni del linguaggio.

  • Versione minima di bnd-maven-plugin:
    Aggiornare l'utilizzo di bnd-maven-plugin alla versione 6.4.0 per garantire il supporto dei runtime JVM più recenti.

    Le versioni 7 o successive non sono compatibili con Java 11 o versioni precedenti, pertanto non è consigliabile effettuare un aggiornamento a tale versione.

  • Versione minima di aemanalyser-maven-plugin:
    Aggiornare l'utilizzo di aemanalyser-maven-plugin alla versione 1.6.6 o successiva per garantire il supporto dei runtime JVM più recenti.

  • Versione minima di maven-bundle-plugin:
    Aggiornare l'utilizzo di maven-bundle-plugin alla versione 5.1.5 o successiva per garantire il supporto dei runtime JVM più recenti.

    Le versioni 6 o successive non sono compatibili con Java 11 o versioni precedenti, pertanto non è consigliabile effettuare un aggiornamento a tale versione.

  • Aggiorna dipendenze in maven-scr-plugin:
    maven-scr-plugin non è direttamente compatibile con Java 21 o Java 17. Tuttavia, i file descrittori possono essere generati aggiornando la versione della dipendenza ASM nella configurazione del plug-in, come illustrato nell'esempio seguente:

<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>

Variabili di ambiente - standard environment-variables

Potrebbe essere necessario variare il processo di build in base alle informazioni sul programma o sulla pipeline.

Ad esempio, se la minimizzazione di JavaScript si verifica in fase di build utilizzando uno strumento come gulp, è possibile preferire diversi livelli di minimizzazione per vari ambienti. Una build di sviluppo potrebbe utilizzare un livello di minimizzazione più leggero rispetto alla staging e alla produzione.

Per supportare la funzione, Cloud Manager aggiunge le variabili di ambiente standard al contenitore della build per ogni esecuzione.

Nome della variabile
Definizione
CM_BUILD
Sempre impostato su true
BRANCH
Ramo configurato per l’esecuzione
CM_PIPELINE_ID
Identificatore numerico della pipeline
CM_PIPELINE_NAME
Nome della pipeline
CM_PROGRAM_ID
Identificatore numerico del programma
CM_PROGRAM_NAME
Nome del programma
ARTIFACTS_VERSION
Per una pipeline di staging o di produzione, la versione sintetica generata da Cloud Manager
CM_AEM_PRODUCT_VERSION
Versione

Variabili di ambiente - pipeline pipeline-variables

Il processo di build potrebbe richiedere variabili di configurazione specifiche che non devono essere memorizzate nell’archivio Git. Inoltre, potrebbe essere necessario regolare queste variabili tra le esecuzioni della pipeline che utilizzano lo stesso ramo.

Per ulteriori informazioni, vedi anche Configurare le variabili di pipeline.

Installare pacchetti di sistema aggiuntivi installing-additional-system-packages

Alcune build richiedono pacchetti di sistema aggiuntivi per funzionare completamente. Ad esempio, una build può richiamare uno script Python o Ruby e deve disporre di un interprete del linguaggio appropriato installato. È possibile gestire questo processo di installazione chiamando exec-maven-plugin in pom.xml per richiamare APT. Questa esecuzione deve generalmente essere integrata in un profilo Maven specifico per Cloud Manager. In questo esempio viene installato Python.

        <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>

Questa stessa tecnica può essere utilizzata per installare pacchetti per uno specifico linguaggio, ad esempio utilizzando gem per RubyGems o pip per i pacchetti Python.

NOTE
Installando un pacchetto di sistema in questo modo, non lo si installa nell’ambiente di runtime utilizzato per l’esecuzione di Adobe Experience Manager. Se hai bisogno di installare un pacchetto di sistema nell’ambiente AEM, contatta il rappresentante Adobe.
TIP
Per informazioni dettagliate sull’ambiente di creazione front-end, consulta il documento Sviluppo di siti con la pipeline front-end.
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab