El entorno de compilación build-environment
Obtenga información sobre el entorno de compilación especializado en el que los usuarios de Cloud Manager generan y prueban su código.
Detalles del entorno details
Los entornos de compilación de Cloud Manager tienen los atributos siguientes.
-
El entorno de compilación está basado en Linux, derivado de Ubuntu 22.04.
-
Apache Maven 3.9.4 está instalado.
-
Las versiones de Java instaladas son JDK 8u401 y JDK 11.0.22 de Oracle.
/usr/lib/jvm/jdk1.8.0_401
/usr/lib/jvm/jdk-11.0.22
-
De forma predeterminada, la variable de entorno
JAVA_HOME
está configurada en/usr/lib/jvm/jdk1.8.0_401
, que contiene JDK 8u401 de Oracle. Consulte la sección Versión JDK de ejecución de Maven alternativa para obtener más información. -
Hay algunos paquetes de sistema adicionales instalados que son necesarios.
bzip2
unzip
libpng
imagemagick
graphicsmagick
-
Se pueden instalar otros paquetes en el momento de la compilación, tal como se describe en la sección Instalación de paquetes de sistema adicionales.
-
Cada compilación se realiza en un entorno en buen estado. El contenedor de compilación no mantiene ningún estado entre las ejecuciones.
-
Maven siempre se ejecuta con estos tres comandos:
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 se configura a nivel de sistema con un archivo
settings.xml
, que incluye automáticamente el repositorio de artefactos de Adobe público usando un perfil denominadoadobe-public
. Consulte el Repositorio de Maven público de Adobe para obtener más información. -
Node.js 18 está disponible para canalizaciones front-end.
jacoco-maven-plugin
, la versión utilizada debe ser al menos 0.7.5.201505241946
.Repositorios de Maven HTTPS https-maven
La versión 2023.10.0 de Cloud Manager inició una actualización móvil del entorno de compilación (que finalizó con la versión 2023.12.0), que incluía una actualización a Maven 3.8.8. Un cambio significativo introducido en Maven 3.8.1 ha sido una mejora de la seguridad destinada a mitigar posibles vulnerabilidades. En concreto, Maven ahora deshabilita de forma predeterminada todas las duplicaciones de http://*
inseguras, tal como se describe en las Notas de la versión de Maven.
Como resultado de esta mejora de seguridad, algunas personas pueden tener problemas durante el paso de compilación, especialmente al descargar artefactos de repositorios Maven que utilizan conexiones HTTP no seguras.
Para garantizar una experiencia sin problemas con la versión actualizada, Adobe recomienda actualizar los repositorios de Maven para que utilicen HTTPS en lugar de HTTP. Este ajuste se ha llevado a cabo para adaptarse a la adopción creciente de la industria de protocolos de comunicación seguros y ayuda a mantener un proceso de compilación seguro y fiable.
Uso de una versión de Java específica using-java-version
De forma predeterminada, los proyectos se crean mediante el proceso de compilación de Cloud Manager con el JDK de Oracle 8. Los clientes que deseen utilizar un JDK alternativo tienen dos opciones.
Cadenas de herramientas de Maven maven-toolchains
El complemento de Cadenas de herramientas de Maven permite a los proyectos seleccionar un JDK específico (o cadena de herramientas) para utilizarlo en el contexto de complementos Maven con conocimiento de cadenas de herramientas. Esto se hace en el archivo pom.xml
del proyecto especificando un valor de proveedor y de versión. Una sección de muestra del archivo pom.xml
es la siguiente:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>11</version>
<vendor>oracle</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
Esto hará que todos los complementos Maven con conocimiento de herramientas utilicen la versión 11 del JDK de Oracle.
Al utilizar este método, Maven se sigue ejecutando con el JDK predeterminado (Oracle 8) y la variable de entorno JAVA_HOME
no cambia. Por lo tanto, comprobar o aplicar la versión de Java a través de complementos como el Complemento Apache Maven Enforcer no funciona y estos complementos no deben utilizarse.
Las combinaciones de proveedor/versión disponibles actualmente son:
Versión alternativa del JDK de ejecución de Maven alternate-maven
También es posible seleccionar Oracle 8 u 11 como JDK para toda la ejecución de Maven. A diferencia de las opciones de cadenas de herramientas, esto cambia el JDK utilizado para todos los complementos, a menos que también se establezca la configuración de cadenas de herramientas, en cuyo caso esta se sigue aplicando a los complementos de Maven compatibles con ella. Como resultado, funcionará el comprobar y aplicar la versión de Java mediante el Complemento Apache Maven Enforcer.
Para ello, cree un archivo con el nombre .cloudmanager/java-version
en la rama del repositorio de Git utilizada por la canalización. Este archivo puede tener el contenido 11
o 8
. Se omite cualquier otro valor. Si se especifica 11
, se usa Oracle 11 y la variable de entorno JAVA_HOME
se establece en /usr/lib/jvm/jdk-11.0.22
. Si se especifica 8
, se utiliza Oracle 8 y la variable de entorno JAVA_HOME
se establece en /usr/lib/jvm/jdk1.8.0_401
.
Variables del entorno environment-variables
Variables de entorno estándar standard-environ-variables
En algunos casos, puede que sea necesario variar el proceso de compilación en función de la información acerca del programa o la canalización.
Por ejemplo, al utilizar una herramienta como gulp para la minificación de JavaScript, es posible que prefiera diferentes niveles de minificación para los entornos de desarrollo frente a los de ensayo y producción.
Para ello, Cloud Manager añade variables de entorno estándar al contenedor de compilación para cada ejecución.
CM_BUILD
true
BRANCH
CM_PIPELINE_ID
CM_PIPELINE_NAME
CM_PROGRAM_ID
CM_PROGRAM_NAME
ARTIFACTS_VERSION
Disponibilidad de variables de entorno estándar availability
Las variables de entorno estándar se pueden usar en varios lugares.
Creación, previsualización y publicación de entornos author-preview-publish
Tanto las variables de entorno normales como los secretos se pueden usar en los entornos de creación, previsualización y publicación.
Dispatcher dispatcher
Con Dispatcher solo se pueden usar variables de entorno normales. Los secretos no se pueden usar.
Sin embargo, las variables de entorno no se pueden usar en directivas IfDefine
.
Configuraciones de OSGi osgi
Tanto las variables de entorno normales como los secretos se pueden utilizar en las configuraciones OSGi.
Variables de canalización pipeline-variables
En algunos casos, el proceso de compilación puede depender de variables de configuración específicas que no serían adecuadas para colocarse en el repositorio de Git o que necesitarían variar entre ejecuciones de canalización que utilicen la misma rama.
Cloud Manager permite que estas variables se configuren mediante la API de Cloud Manager o la CLI de Cloud Manager por canalización. Las variables pueden almacenarse como texto sin formato o cifrarse en reposo. En cualquier caso, las variables están disponibles en el entorno de compilación como una variable de entorno a la que se puede hacer referencia desde dentro del archivo pom.xml
u otros scripts de compilación.
Para establecer una variable mediante la CLI, ejecute un comando similar al siguiente.
$ aio cloudmanager:set-pipeline-variables PIPELINEID --variable MY_CUSTOM_VARIABLE test
Las variables actuales se pueden enumerar mediante un comando similar al siguiente.
$ aio cloudmanager:list-pipeline-variables PIPELINEID
Las variables deben cumplir ciertas limitaciones.
- Los nombres de las variables solo pueden contener caracteres alfanuméricos y el guion bajo (
_
).- Por convención, los nombres deberían estar en mayúsculas.
- Hay un límite de 200 variables por canalización.
- Cada nombre debe tener menos de 100 caracteres.
- Cada valor de cadena debe tener menos de 2048 caracteres.
- Cada valor
secretString
debe tener menos de 500 caracteres.
Cuando se utiliza dentro de un archivo pom.xml
de Maven, suele resultar útil asignar estas variables a las propiedades de Maven mediante una sintaxis similar a la siguiente.
<profile>
<id>cmBuild</id>
<activation>
<property>
<name>env.CM_BUILD</name>
</property>
</activation>
<properties>
<my.custom.property>${env.MY_CUSTOM_VARIABLE}</my.custom.property>
</properties>
</profile>
Instalación de paquetes de sistema adicionales installing-additional-system-packages
Para funcionar completamente, algunas compilaciones requieren que se instalen paquetes de sistema adicionales. Por ejemplo, una compilación puede invocar un script de Python o Ruby y, como resultado, necesita tener instalado un intérprete de idioma adecuado. Esto se puede hacer llamando a la función exec-maven-plugin
para invocar APT. Esta ejecución debe envolverse generalmente en un perfil Maven específico de Cloud Manager. Por ejemplo, para instalar Python puede hacer lo siguiente:
<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>
Esta técnica también se puede utilizar para instalar paquetes específicos del idioma. Es decir, usar gem
para RubyGems o pip
para paquetes Python.