Configurar um projeto setting-up-your-project
Saiba como configurar o seu projeto para gerenciá-lo e implantá-lo com o Cloud Manager.
Editar projetos existentes modifying-project-setup-details
Os projetos do AEM existentes precisam seguir algumas regras básicas para serem compilados e implantados com sucesso com o Cloud Manager.
- 
                  
Os projetos devem ser criados usando o Apache Maven.
 - 
                  
É necessário que haja um arquivo
pom.xmlna raiz do repositório Git.- Esse arquivo 
pom.xmlpode se referir a quantos submódulos (que, por sua vez, podem ter outros módulos derivados) forem necessários. - Você pode adicionar referências a repositórios de artefatos Maven adicionais em seu arquivos 
pom.xml. - O acesso a repositórios de artefatos protegidos por senha é suportado quando configurado. No entanto, o acesso a repositórios de artefatos protegidos pela rede não é permitido.
 
 - Esse arquivo 
 - 
                  
Pacotes de conteúdo implantáveis são descobertos pela varredura de arquivos de pacote de conteúdo (.zip) contidos em um diretório chamado
target.- Qualquer número de submódulos pode produzir pacotes de conteúdo.
 
 - 
                  
Os artefatos do Dispatcher que podem ser implantados são descobertos ao verificar arquivos
zipque continham subdiretórios detargetnomeados comoconfeconf.d. - 
                  
Se houver mais de um pacote de conteúdo, a ordem de implantação dos pacotes não será garantida.
 - 
                  
Se uma ordem específica for necessária, as dependências do pacote de conteúdo poderão ser usadas para definir a ordem.
 - 
                  
Os pacotes podem ser ignorados na implantação.
 
Ativar perfis do Maven no Cloud Manager activating-maven-profiles-in-cloud-manager
Em alguns casos limitados, pode ser necessário variar um pouco o processo de criação ao executar no Cloud Manager, comparado à quando ele é executado em estações de trabalho de desenvolvedor. Para estes casos, perfis Maven podem ser usados para definir como o processo de criação deve ser diferente em ambientes distintos, incluindo o Cloud Manager.
Para ativar um perfil do Maven no ambiente de build do Cloud Manager, é necessário procurar a CM_BUILD variável de ambiente. Por outro lado, um perfil destinado a ser usado somente fora do ambiente de build do Cloud Manager deve ser ativado procurando a ausência dessa variável.
Por exemplo, se você quiser gerar uma mensagem simples apenas quando o build for executado no Cloud Manager, faça o seguinte:
        <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) ou em um ambiente de desenvolvimento integrado (IDE).Se você quiser gerar uma mensagem simples somente quando o build for executado fora do Cloud Manager, faça o seguinte:
        <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>
            Suporte ao repositório do Maven protegido por senha password-protected-maven-repositories
Os artefatos de um repositório do Maven protegido por senha devem ser usados com cuidado, pois o código implantado dessa maneira não está totalmente sujeito às verificações de qualidade aplicadas pelos portais de qualidade do Cloud Manager. A Adobe também aconselha implantar as fonte de Java e todo o código-fonte do projeto junto com o binário.
Para usar um repositório do Maven protegido por senha a partir do Cloud Manager, especifique a senha (e, opcionalmente, o nome de usuário) como uma variável de pipeline secreta e faça referência a esse segredo dentro de um arquivo chamado .cloudmanager/maven/settings.xml no repositório Git. Esse arquivo segue o esquema do Arquivo de configurações Maven.
Quando o processo de build do Cloud Manager é iniciado, o elemento <servers> desse arquivo é mesclado com o arquivo settings.xml padrão fornecido pelo Cloud Manager. Servidores personalizados não devem usar IDs de servidor que comecem com adobe e cloud-manager. Esses IDs são considerados reservados. O Cloud Manager espelha somente os IDs de servidor que correspondem a um dos prefixos especificados ou ao ID central padrão.
Com esse arquivo definido, a ID do servidor seria referenciada de dentro de um elemento <repository> e/ou <pluginRepository>, que está dentro do arquivo pom.xml. Geralmente, estes elementos <repository> e/ou <pluginRepository> ficariam contidos dentro de um perfil específico do Cloud Manager, embora isso não seja estritamente necessário.
Por exemplo, se o repositório estiver em https://repository.myco.com/maven2, o nome de usuário que o Cloud Manager deve usar é cloudmanager e a senha é secretword.
Primeiro, defina a senha como um segredo no pipeline:
$ aio cloudmanager:set-pipeline-variables PIPELINEID --secret CUSTOM_MYCO_REPOSITORY_PASSWORD secretword
            Em seguida, faça referência ao seguinte no arquivo .cloudmanager/maven/settings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://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>
            E, por fim, referencie o ID do servidor dentro do arquivo pom.xml:
<profiles>
    <profile>
        <id>cmBuild</id>
        <activation>
                <property>
                    <name>env.CM_BUILD</name>
                </property>
        </activation>
        <build>
            <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>
        </build>
    </profile>
</profiles>
            Implantar fontes deploying-sources
É uma boa prática implantar as fontes Java junto com o binário em um repositório Maven.
Configure o maven-source-plugin no seu projeto:
        <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>
            Implantar fontes do projeto deploying-project-sources
É uma boa prática implantar toda a fonte do projeto juntamente com o binário em um repositório do Maven. Dessa forma, é possível reconstruir o artefato exato.
Configure o maven-assembly-plugin no seu projeto:
        <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>
            Ignorar pacotes de conteúdo skipping-content-packages
No Cloud Manager, as compilações podem produzir qualquer número de pacotes de conteúdo. Por uma variedade de motivos, pode ser desejável produzir um pacote de conteúdo, mas não implantá-lo. Por exemplo, essa abordagem pode ser útil quando você cria pacotes de conteúdo exclusivamente para teste ou quando outra etapa do processo de build refaz o pacote. Ou seja, na forma de um subpacote de outro pacote.
Nessas hipóteses, o Cloud Manager procurará por uma propriedade chamada cloudManagerTarget nas propriedades dos pacotes de conteúdo criados. Se essa propriedade for definida como none, o pacote será ignorado e não será implantado. O mecanismo para definir essa propriedade depende da forma em que o build produz o pacote de conteúdo. Por exemplo, com o filevault-maven-plugin, você configuraria o plug-in da seguinte maneira:
        <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>
            Com o content-package-maven-plugin, o processo é semelhante:
        <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>
            Reutilização de artefato de build build-artifact-reuse
Em muitos casos, um mesmo código é implantado em vários ambientes do AEM. Sempre que possível, o Cloud Manager evitará reconstruir a base de código quando detectar que a mesma confirmação do Git é usada em várias execuções de pipeline de pilha completa.
Quando uma execução é iniciada, é extraído. o commit HEAD atual do pipeline do branch (ramificação). O hash do commit fica visível na interface e por meio da API. Quando a etapa de compilação for concluída com sucesso, os artefatos resultantes serão armazenados com base nesse hash de confirmação e poderão ser reutilizados em execuções de pipeline subsequentes.
Os pacotes serão reutilizados nos pipelines, se estiverem no mesmo programa. Ao procurar pacotes que possam ser reutilizados, o AEM ignora ramificações e reutiliza artefatos entre ramificações.
Quando ocorre uma reutilização, as etapas de compilação e qualidade do código são efetivamente substituídas pelos resultados da execução original. O arquivo de log da etapa do build listará os artefatos e as informações de execução que foram usadas originalmente para criá-los.
Veja a seguir um exemplo do log gerado.
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)
            O log da etapa de qualidade do código conterá informações semelhantes.
Exemplos example-reuse
Exemplo 1 example-1
Considere que seu programa tem dois pipelines de desenvolvimento:
- Pipeline 1 na ramificação 
foo - Pipeline 2 na ramificação 
bar 
Ambas as ramificações estão na mesma ID de confirmação.
- A execução do pipeline 1 primeiro criará os pacotes normalmente.
 - Em seguida, a execução do pipeline 2 reutilizará os pacotes criados pelo pipeline 1.
 
Exemplo 2 example-2
Imagine que o seu programa tem duas ramificações: ramificação foo e ramificação bar.
Ambas as ramificações têm a mesma ID de confirmação.
- Um pipeline de desenvolvimento compila e executa 
foo. - Posteriormente, um pipeline de produção criará e executará 
bar. 
Nesse caso, o artefato de foo será reutilizado para o pipeline de produção, pois o mesmo hash de commit foi identificado.
Recusar opting-out
Se desejado, o comportamento de reutilização pode ser desabilitado para pipelines específicos, definindo a variável de pipeline CM_DISABLE_BUILD_REUSE como true. Se essa variável for definida, o hash de commit ainda será extraído. Os artefatos resultantes são armazenados para uso posterior, mas os artefatos armazenados anteriormente não são reutilizados. Para entender esse comportamento, considere o seguinte exemplo:
- Um novo pipeline é criado.
 - O pipeline é executado (execução nº 1) e a confirmação HEAD atual é 
becdddb. A execução é bem-sucedida e os artefatos resultantes são armazenados. - A variável 
CM_DISABLE_BUILD_REUSEestá definida. - O pipeline é executado novamente sem alterar o código. Embora haja artefatos armazenados associados a 
becdddb, eles não serão reutilizados devido à variávelCM_DISABLE_BUILD_REUSE. - O código é alterado e o pipeline é executado. A confirmação HEAD agora é 
f6ac5e6. A execução é bem-sucedida e os artefatos resultantes são armazenados. - A variável 
CM_DISABLE_BUILD_REUSEé excluída. - O pipeline é executado novamente sem alterar o código. Como há artefatos armazenados associados a 
f6ac5e6, esses artefatos são reutilizados. 
Avisos caveats
- Os artefatos de compilação não são reutilizados em diferentes programas, independentemente de o hash de confirmação ser idêntico.
 - Os artefatos de build são reutilizados no mesmo programa mesmo se a ramificação e/ou o pipeline for diferente.
 - O manuseio de versão do Maven substitui a versão do projeto somente em pipelines de produção. Se o mesmo commit for usado para pipelines de desenvolvimento e produção, e o pipeline de desenvolvimento for executado primeiro, as versões serão implantadas no estágio e na produção inalteradas. No entanto, ainda será criada uma tag nesse caso.
 - Se a recuperação dos artefatos armazenados não for bem-sucedida, a etapa de build será executada como se nenhum artefato tivesse sido armazenado.
 - Variáveis de pipeline diferentes de 
CM_DISABLE_BUILD_REUSEnão são consideradas quando o Cloud Manager decide reutilizar artefatos de build criados anteriormente. 
Desenvolver ódigo com base nas práticas recomendadas develop-your-code-based-on-best-practices
As equipes de engenharia e consultoria da Adobe desenvolveram um conjunto abrangente de práticas recomendadas para desenvolvedores do AEM.