設定專案

修改項目設定詳細資訊

為了能順利透過Cloud Manager建立和部署,現有AEM專案必須遵循一些基本規則:

  • 必須使用Apache Maven建立專案。

  • Git存放庫的根目錄中必須有​pom.xml​檔案。 此​pom.xml​檔案可以引用許多子模組(而這些子模組又可能有其他子模組等) 視需要。

  • 您可以在​pom.xml​檔案中新增對其他Maven工件存放庫的參考。 配置後,支援訪問受密碼保護的對象儲存庫。 但是,不支援訪問受網路保護的對象儲存庫。

  • 掃描名為​target​的目錄中包含的內容包​zip​檔案,可發現可部署的內容包。 任何數量的子模組都可產生內容包。

  • 掃描名為​conf​和​conf.d​的​target​的目錄,可部署的Dispatcher成品即可發現。**

  • 如果有多個內容包,則無法保證包部署的順序。 如果需要特定順序,則可使用內容套件相依性來定義順序。 可以從部署中跳過🔗包。

在Cloud Manager中啟用Maven設定檔

在某些有限的情況下,在Cloud Manager內執行時,您可能需要稍微改變您的建置程式,而不是在開發人員工作站上執行。 針對這些情況,Maven設定檔可用來定義不同環境(包括Cloud Manager)中組建的差異。

請尋找上述的CM_BUILD環境變數,才能在Cloud Manager建置環境中啟動Maven設定檔。 相反地,如果設定檔僅用於Cloud Manager建置環境之外,則應尋找缺少此變數的情況,才能使用此設定檔。

例如,如果您只想在組建在Cloud Manager內執行時輸出簡單訊息,您可以執行以下操作:

        <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)或在整合開發環境(IDE)中啟用它。

如果您只想在組建在Cloud Manager外部執行時輸出簡單訊息,您可以執行以下操作:

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

受密碼保護的Maven儲存庫支援

注意

密碼保護的Maven存放庫中的成品使用時應非常謹慎,因為目前透過此機制部署的程式碼並未透過Cloud Manager品質閘道中實作的所有品質規則執行。 因此,它只應用在少數情況下,以及不系結至AEM的程式碼。 建議您同時使用二進位檔來部署Java來源以及整個專案原始碼。

若要從Cloud Manager使用受密碼保護的Maven存放庫,請將密碼(以及選擇性的使用者名稱)指定為機密管道變數,然後在Git存放庫中名為.cloudmanager/maven/settings.xml的檔案內參照該機密。 此檔案遵循Maven設定檔案架構。 當Cloud Manager建置程式開始時,此檔案中的<servers>元素將合併至Cloud Manager提供的預設settings.xml檔案。 以adobecloud-manager開頭的伺服器ID視為保留,自訂伺服器不應使用。 Cloud Manager不會鏡像符合其中一個前置詞或預設ID central的伺服器ID ​使用此檔案後,將從<repository>和/或<pluginRepository>檔案內的pom.xml元素內引用伺服器ID。 通常,這些<repository>和/或<pluginRepository>元素會包含在Cloud Manager特定設定檔中,儘管這並非嚴格必要。

例如,假設存放庫位於https://repository.myco.com/maven2 ,則Cloud Manager應使用的使用者名稱為cloudmanager ,密碼為secretword

首先,將密碼設為管道上的機密:

$ aio cloudmanager:set-pipeline-variables PIPELINEID --secret CUSTOM_MYCO_REPOSITORY_PASSWORD secretword

然後,從.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>

最後,參考pom.xml檔案內的伺服器ID:

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

部署來源

將Java來源與二進位檔一起部署至Maven存放庫是個不錯的作法。

在您的專案中設定maven-source-plugin:

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

部署專案來源

將整個專案來源與二進位檔一起部署至Maven存放庫是個不錯的作法,這樣就能重建確切的工件。

在您的專案中設定maven-assembly-plugin:

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

跳過內容包

在Cloud Manager中,組建可能會產生任何數量的內容套件。
出於各種原因,可能需要製作內容包,但不要部署它。 例如,在建立僅用於測試的內容包時,這可能非常有用,或者,在構建過程中,將通過另一個步驟重新打包的內容包,即作為另一個包的子包。

為了適應這些情況,Cloud manager將在內建內容包的屬性中 查找名為cloudManagerTarget 的屬性。如果此屬性設定為none,則會跳過該包且不部署。設定此屬性的機制取決於建立內容封裝的方式。例如,使用filevault-maven-plugin時,您可以像這樣設定外掛程式:

        <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時類似:

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

本頁內容