如何在Ansible中修复maven_artifact ZIP下载任务?

nbnkbykc  于 2023-10-17  发布在  Maven
关注(0)|答案(1)|浏览(117)

我有两个Jenkins管道。第一个是使用Maven构建一个项目。
其中一个插件创建了一些脚本的ZIP。
下面是 * pom.xml * 部分

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
            <id>script</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <finalName>script-${project.version}</finalName>
                <appendAssemblyId>true</appendAssemblyId>
                <descriptors>
                    <descriptor>src/main/assembly/script.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

xml* 指定要ZIP的目录和要排除的文件

<formats>
    <format>zip</format>
</formats>
<fileSets>
    <fileSet>
        <directory>${project.basedir}/src/scripts</directory>
        <filtered>true</filtered>
        <directoryMode>755</directoryMode>
        <fileMode>755</fileMode>
         <lineEnding>unix</lineEnding>
        <outputDirectory></outputDirectory>
        <excludes>
            <exclude>
            **/*.log
            </exclude>
        </excludes>
    </fileSet>
</fileSets>

在构建结束时,artifactPublisher将ZIP发布到带有mvn deploy的Nexus存储库。
下面是日志:

[withMaven] artifactsPublisher - Archive artifact target/checkout/target/script-2.0.0-script.zip under com/company/artifact_id/2.0.0/artifact_id-2.0.0-script.zip

现在我有一个部署管道,需要用Ansible下载这个工件。
下面是下载ZIP的任务

- maven_artifact:
    group_id: "{{maven_grpid}}"
    artifact_id: artifact_id
    extension: zip
    version: "{{ zip_version }}"
    repository_url: "{{ nexus_repo }}"
    username: "{{ nexus_user }}"
    password: "{{ nexus_password }}"
    dest: '{{ install_path }}/script/artifact_id-{{ zip_version }}-script.tmp'
    verify_checksum: change
    mode: '0770'
    validate_certs: false
  become: yes

这会失败,因为它没有为ZIP文件构建正确的URL

Failed to download artifact com.company:artifact_id:zip:2.0.0 because of HTTP Error 404: com/company/artifact_id/2.0.0/artifact_id-2.0.0.zipfor URL https://nexus_url/repository/maven-releases/com/company/artifact_id/2.0.0/artifact_id-2.0.0.zip

文件的正确URL是:

https://nexus_url/repository/maven-releases/com/company/artifact_id/2.0.0/artifact_id-2.0.0-script.zip

artifactPublisher部分所示。
我试着用{{ zip_version }}-script在Ansible中调整版本,文件名是正确的,但是URL中的版本被搞砸了。
我该怎么弥补?我可以在Ansible任务中调整文件名吗?或者有一种方法可以更改发布的工件名称?

yfwxisqw

yfwxisqw1#

Ansible作为一个开源工具的好处是,你可以在代码上达到顶峰。
在这种情况下,可以在community.general collection repository中找到表示此模块的文件。
有了这个,我们现在可以找到Ansible在方法_uri_for_artifact中构建URL的方法。
对于你的用例,这可能是上述方法中最有趣的几行:

if artifact.classifier:
    return posixpath.join(self.base, artifact.path(), artifact.artifact_id + "-" + version + "-" + artifact.classifier + "." + artifact.extension)

回到文档中,我们可以看到您只需在URL中指定要构建的classifier
所以你缺少的部分是

classifier: script

这让你的任务

- maven_artifact:
    group_id: "{{ maven_grpid }}"
    artifact_id: artifact_id
    classifier: script
    extension: zip
    version: "{{ zip_version }}"
    repository_url: "{{ nexus_repo }}"
    username: "{{ nexus_user }}"
    password: "{{ nexus_password }}"
    dest: '{{ install_path }}/script/artifact_id-{{ zip_version }}-script.tmp'
    verify_checksum: change
    mode: '0770'
    validate_certs: false
  become: yes

相关问题