Aktivera Maven-profiler i Cloud Manager
I vissa begränsade fall kan du behöva ändra din byggprocess något när du kör i Cloud Manager jämfört med när du kör på arbetsstationer för utvecklare. I dessa fall kan Maven-profiler användas för att definiera hur bygget ska vara olika i olika miljöer, inklusive Cloud Manager.
Aktivering av en Maven-profil i Cloud Manager-byggmiljön bör göras genom att söka efter CM_BUILD
miljövariabeln. På samma sätt bör en profil som bara är avsedd att användas utanför Cloud Manager byggmiljö göras genom att man söker efter denna variabel som saknas.
Om du till exempel bara vill visa ett enkelt meddelande när bygget körs i Cloud Manager gör du följande:
<profile>
<id>cmBuild</id>
<activation>
<property>
<name>env.CM_BUILD</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>initialize</phase>
<configuration>
<target>
<echo>I'm running inside Cloud Manager!</echo>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
-PcmBuild
) eller i den integrerade utvecklingsmiljön (IDE).Om du bara vill få ut ett enkelt meddelande när bygget körs utanför Cloud Manager gör du följande:
<profile>
<id>notCMBuild</id>
<activation>
<property>
<name>!env.CM_BUILD</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>initialize</phase>
<configuration>
<target>
<echo>I'm running outside Cloud Manager!</echo>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Använd en lösenordsskyddad Maven-databas i Cloud Manager
Så här använder du en lösenordsskyddad Maven-databas i Cloud Manager:
- Ange lösenordet (och eventuellt användarnamnet) som en hemlig pipeline-variabel.
- Referera sedan till den hemligheten i en fil med namnet
.cloudmanager/maven/settings.xml
i Git-databasen, som följer schemat för Maven Settings File .
När Cloud Manager byggprocess startar:
-
Elementet
<servers>
i den här filen sammanfogas i standardfilensettings.xml
som tillhandahålls av Cloud Manager.- Server-ID:n som börjar med
adobe
ochcloud-manager
betraktas som reserverade. Använd dem inte på anpassade servrar. - Cloud Manager speglar endast de server-ID:n som matchar specifika prefix eller standard-ID:t
central
. Alla andra server-ID:n undantas från spegling.
- Server-ID:n som börjar med
-
När den här filen är på plats refereras server-ID:t inifrån ett
<repository>
- och/eller<pluginRepository>
-element ipom.xml
-filen. -
I allmänhet ingår dessa
<repository>
- och<pluginRepository>
-element i en Cloud Manager-specifik profil, även om det inte är absolut nödvändigt att inkludera dem.
Låt oss till exempel säga att databasen är på https://repository.myco.com/maven2
, att användarnamnet som Cloud Manager ska använda är cloudmanager
och att lösenordet är secretword
. Gör så här:
-
Ange lösenordet som en hemlighet i pipeline.
$ aio cloudmanager:set-pipeline-variables PIPELINEID --secret CUSTOM_MYCO_REPOSITORY_PASSWORD secretword`
-
Referera den här hemligheten från filen
.cloudmanager/maven/settings.xml
i följande:<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="https://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>myco-repository</id> <username>cloudmanager</username> <password>${env.CUSTOM_MYCO_REPOSITORY_PASSWORD}</password> </server> </servers> </settings>
-
Referera slutligen till server-ID:t i filen
pom.xml
:<profiles> <profile> <id>cmBuild</id> <activation> <property> <name>env.CM_BUILD</name> </property> </activation> <repositories> <repository> <id>myco-repository</id> <name>MyCo Releases</name> <url>https://repository.myco.com/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>myco-repository</id> <name>MyCo Releases</name> <url>https://repository.myco.com/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories> </profile> </profiles>
Distribuera källor
Det är en god vana att driftsätta Java-källorna tillsammans med binärfilen i en Maven-databas.
Konfigurera maven-source-plugin i projektet för att göra det.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
Distribuera projektkällor
Det är en god vana att driftsätta hela projektkällan tillsammans med binärfilen i en Maven-databas. På så sätt kan den återskapa den exakta artefakten.
Konfigurera maven-assembly-plugin i ditt projekt på följande sätt:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>project-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>project</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
Hoppar över innehållspaket
I Cloud Manager kan byggen producera valfritt antal innehållspaket. Det kan av olika skäl vara önskvärt att skapa ett innehållspaket men inte distribuera det. Ett exempel inträffar när innehållspaket byggs enbart i testsyfte eller när ett annat steg i byggprocessen paketerar om dem. Det vill säga ett underpaket till ett annat paket.
Cloud Manager letar efter egenskapen cloudManagerTarget
i egenskaperna för det inbyggda innehållspaketet för att hantera de här scenarierna. Om den här egenskapen är inställd på none
hoppas paketet över och distribueras inte.
Mekanismen för att ange den här egenskapen beror på hur bygget skapar innehållspaketet. Med till exempel filevault-maven-plugin
konfigurerar du plugin-programmet enligt följande.
<plugin>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>filevault-package-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<properties>
<cloudManagerTarget>none</cloudManagerTarget>
</properties>
<!-- other configuration -->
</configuration>
</plugin>
content-package-maven-plugin
har en liknande konfiguration.
<plugin>
<groupId>com.day.jcr.vault</groupId>
<artifactId>content-package-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<properties>
<cloudManagerTarget>none</cloudManagerTarget>
</properties>
<!-- other configuration -->
</configuration>
</plugin>
Bygg återanvändning av felaktigheter
I många fall distribueras samma kod till flera AEM miljöer. När det är möjligt undviker Cloud Manager att återskapa kodbasen när det upptäcker att samma Git-implementering används i flera fullständiga pipeline-körningar.
När en körning startas extraheras den aktuella HEAD-implementeringen för förgreningsflödet. Hash för implementeringen visas i användargränssnittet och via API:t. När byggsteget har slutförts lagras de resulterande artefakterna baserat på den implementeringshashen och kan återanvändas i efterföljande pipeline-körningar.
Paket återanvänds i alla rörledningar om de ingår i samma program. När du söker efter paket som kan återanvändas ignorerar AEM grenar och återanvänder artefakter över grenar.
När en återanvändning sker ersätts stegen för bygg- och kodkvalitet effektivt med resultaten från den ursprungliga körningen. Loggfilen för byggsteget innehåller artefakter och körningsinformation som användes för att skapa dem från början.
Här följer ett exempel på sådana loggutdata.
The following build artifacts were reused from the prior execution 4 of pipeline 1 which used commit f6ac5e6943ba8bce8804086241ba28bd94909aef:
build/aem-guides-wknd.all-2021.1216.1101633.0000884042.zip (content-package)
build/aem-guides-wknd.dispatcher.cloud-2021.1216.1101633.0000884042.zip (dispatcher-configuration)
Loggen för kodkvalitetssteget innehåller liknande information.
Exempel
Exempel 1
Tänk på att ditt program har två utvecklingspipelines:
- Pipeline 1 på grenen
foo
- Pipeline 2 på gren
bar
Båda grenarna har samma implementerings-ID.
- När du kör Pipeline 1 skapas paketen normalt.
- När du sedan kör Pipeline 2 återanvänds de paket som skapats med Pipeline 1.
Exempel 2
Programmet har två grenar:
- Gren
foo
- Gren
bar
Båda grenarna har samma implementerings-ID.
- En utvecklingspipeline skapar och kör
foo
. - Därefter byggs och körs
bar
av en produktionspipeline.
I det här fallet återanvänds artefakten från foo
för produktionsflödet eftersom samma implementeringshash identifierades.
Avmarkera
Om du vill kan återanvändningsbeteendet inaktiveras för specifika pipelines genom att pipeline-variabeln CM_DISABLE_BUILD_REUSE
anges till true
. Om den här variabeln anges extraheras implementeringshash-koden och de resulterande artefakterna sparas för senare användning, men återanvändning av tidigare lagrade artefakter hoppas över. Tänk på följande scenario om du vill förstå detta:
- En ny pipeline skapas.
- Pipelinen körs (körning nr 1) och den aktuella HEAD-implementeringen är
becdddb
. Körningen är klar och de resulterande artefakterna sparas. - Variabeln
CM_DISABLE_BUILD_REUSE
har angetts. - Pipelinen körs igen utan att koden ändras. Även om det finns lagrade artefakter som är associerade med
becdddb
, återanvänds de inte på grund av variabelnCM_DISABLE_BUILD_REUSE
. - Koden ändras och pipeline körs. HEAD implementering är nu
f6ac5e6
. Körningen är klar och de resulterande artefakterna sparas. - Variabeln
CM_DISABLE_BUILD_REUSE
har tagits bort. - Pipelinen körs igen utan att koden ändras. Eftersom det finns lagrade artefakter associerade med
f6ac5e6
, återanvänds dessa artefakter.