我有两个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任务中调整文件名吗?或者有一种方法可以更改发布的工件名称?
1条答案
按热度按时间yfwxisqw1#
Ansible作为一个开源工具的好处是,你可以在代码上达到顶峰。
在这种情况下,可以在
community.general
collection repository中找到表示此模块的文件。有了这个,我们现在可以找到Ansible在方法
_uri_for_artifact
中构建URL的方法。对于你的用例,这可能是上述方法中最有趣的几行:
回到文档中,我们可以看到您只需在URL中指定要构建的
classifier
。所以你缺少的部分是
这让你的任务