如何通过 REST 区分 AEM 发布节点和作者节点 API

How to tell an AEM publish node and author node apart via REST API

我一直在使用包管理器命令将 AEM 包部署到创作节点,作为持续部署管道的一部分。我现在将其扩展为直接部署到发布节点。我需要(根据节点所有者)以稍微不同的方式执行此操作。

因为我正在对这些交互进行编程并且必须支持一大堆节点,所以我想知道管道是否可以调用某个端点,该端点对作者或发布者来说是独一无二的,这样我就可以检测到这次选择了哪个大约?

对于上下文,这是我正在拨打的电话的示例。

curl -u admin:admin -X POST http://localhost:4502/crx/packmgr/service/.json/etc/packages/my_packages/samplepackage.zip?cmd=uninstall

很遗憾,除了包管理器之外,我(还)不熟悉 AEM API。我从 AEM CQ5 Tutorials 得到了这个例子,但没有发现其他直接有用的东西,也许是因为我不确定 REST API 与哪种节点有关。

如果我能找到一个便宜且无害的 GET,并且是独一无二的,我会被分类。

我已经使用这个 SlingSettings API 来获取吊索运行模式,您可以使用它来确定它是 author 还是 publish。这是一个非常轻量级的调用。

http(s):<host:port>/system/console/status-slingsettings.json

AEM 提供与运行模式无关的包部署方式,除非您对这些实例进行了不同的部署。

在大多数一般用例中,作者和发布的部署包相同,部署路径也相同,唯一不同的是主机。我们构建了一个单独的 pom 项目用于部署目的,它可以直接将任何类型的包推送到指定为 CI Job param 的任何节点。在我们的例子中,我们仅将其用于部署完整的应用程序包。

POM 看起来像这样 -

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>cms-parent</artifactId>
        <groupId>com.myproject.cms</groupId>
        <version>1.0.2</version>
    </parent>

    <artifactId>cms-deploy</artifactId>
    <groupId>com.myproject.cms.deploy</groupId>
    <packaging>pom</packaging>
    <version>1.0.0</version>
    <name>
        AEM :: Deploy
    </name>

    <properties>
        <app.cms.myproject.complete.version>1.0.0-SNAPSHOT</app.cms.myproject.complete.version>
    </properties>

    <build>
        <plugins>
            <!-- additionally deploy three further content-packages which are not part of the complete-package -->
            <plugin>
                <groupId>com.day.jcr.vault</groupId>
                <artifactId>content-package-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <!-- override the default execution defined in the cq-parent by binding it to some invalid phase -->
                        <id>default-package</id>
                        <goals>
                            <goal>package</goal>
                        </goals>
                        <phase>foobar</phase>
                    </execution>
                    <execution>
                        <!-- override the default execution for install-package, which is called whenever you call deploy -->
                        <id>install-package</id>
                        <goals>
                            <goal>install</goal>
                        </goals>
                        <phase>foobar</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <profiles>

        <profile>
            <id>install-myproject-complete</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>content-package-maven-plugin</artifactId>
                        <groupId>com.day.jcr.vault</groupId>
                        <executions>
                            <!-- deploy the scripts and classes (part of the release) -->
                            <execution>
                                <id>install-myproject-complete</id>
                                <goals>
                                    <goal>install</goal>
                                </goals>
                                <configuration>
                                    <artifactId>myproject-complete</artifactId>
                                    <groupId>com.myproject.cms.msites</groupId>
                                    <version>${app.cms.myproject.complete.version}</version>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

您可以在 CI 中创建一个 Maven 项目(我将 Jenkins 称为 CI,您可以适应您的服务器)并将其设置为接受 hostdeployment version

下一步是配置 源代码管理 以指向您的 SCM 中的上述 pom 项目并配置 maven 构建步骤 -

在目标和选项中指定 - 对于作者部署 -

-U clean install -Pinstall-myproject-complete -Dcrx.host=${host}-author.mysite.com -Dcrx.port=4502 -e -Dapp.cms.myproject.complete.version=${version}

用于发布部署 -

-U clean install -Pinstall-myproject-complete -Dcrx.host=${host}-publish.mysite.com -Dcrx.port=4503 -e -Dapp.cms.myproject.complete.version=${version}

这是 base 配置,您可以进一步自定义它以接受整个 node_name/ip 以及端口信息以保持单个部署管道