归档 Jenkins 管道工件的最佳实践是什么
What is the best practice for archiving Jenkins pipeline artifacts
我看到您可以将目标添加到 Maven Pom 以将工件归档到 repo 管理器,例如 nexus
https://www.baeldung.com/maven-deploy-nexus
distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
但 Jenkins 还允许您从管道本身执行此操作
https://wiki.jenkins.io/plugins/servlet/mobile?contentId=96076078#content/view/96076078
freeStyleJob('NexusArtifactUploaderJob') {
steps {
nexusArtifactUploader {
nexusVersion('nexus2')
protocol('http')
nexusUrl('localhost:8080/nexus')
groupId('sp.sd')
version('2.4')
repository('NexusArtifactUploader')
credentialsId('44620c50-1589-4617-a677-7563985e46e1')
artifact {
artifactId('nexus-artifact-uploader')
type('jar')
classifier('debug')
file('nexus-artifact-uploader.jar')
}
artifact {
artifactId('nexus-artifact-uploader')
type('hpi')
classifier('debug')
file('nexus-artifact-uploader.hpi')
}
}
}
}
这两种方法有什么区别,一种更常用吗?
主要区别在于,如果您使用 Maven,则可以使用 mvn deploy
从本地计算机手动将工件添加到 Nexus。所以这真的归结为你想如何创建最终用于生产的工件。根据我的经验,执行此操作的首选方法是使用 Jenkins。使用 Jenkins 的优势在于您 link 您的新版本可以构建到其他活动,并且可以在满足特定条件时触发发布,而不是手动启动构建。此外,您最终会在同一平台上构建所有版本,并且如果每个开发人员都从他们自己的计算机构建此类版本,则可以避免计算机之间的差异。
但您可能仍然需要maven 配置。 Jenkins 可能会使用此信息找到 URL 以将工件上传到(您的示例没有说明 Jenkins 如何找到 Nexus),有时上传 SNAPSHOT 版本或其他一些不适用于的临时版本很有用生产。在您的示例中,您仅为上传 SNAPSHOT 版本定义了 Nexus,我猜这是故意执行的,以强制执行禁止从本地计算机上传最终版本的规则。
顺便说一句,在您的 pom.xml
中定义存储库并不意味着会自动上传任何内容。只有当您对 pom 中定义的存储库执行 mvn deploy
时,才会上传某些内容。
我看到您可以将目标添加到 Maven Pom 以将工件归档到 repo 管理器,例如 nexus
https://www.baeldung.com/maven-deploy-nexus
distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
但 Jenkins 还允许您从管道本身执行此操作
https://wiki.jenkins.io/plugins/servlet/mobile?contentId=96076078#content/view/96076078
freeStyleJob('NexusArtifactUploaderJob') {
steps {
nexusArtifactUploader {
nexusVersion('nexus2')
protocol('http')
nexusUrl('localhost:8080/nexus')
groupId('sp.sd')
version('2.4')
repository('NexusArtifactUploader')
credentialsId('44620c50-1589-4617-a677-7563985e46e1')
artifact {
artifactId('nexus-artifact-uploader')
type('jar')
classifier('debug')
file('nexus-artifact-uploader.jar')
}
artifact {
artifactId('nexus-artifact-uploader')
type('hpi')
classifier('debug')
file('nexus-artifact-uploader.hpi')
}
}
}
}
这两种方法有什么区别,一种更常用吗?
主要区别在于,如果您使用 Maven,则可以使用 mvn deploy
从本地计算机手动将工件添加到 Nexus。所以这真的归结为你想如何创建最终用于生产的工件。根据我的经验,执行此操作的首选方法是使用 Jenkins。使用 Jenkins 的优势在于您 link 您的新版本可以构建到其他活动,并且可以在满足特定条件时触发发布,而不是手动启动构建。此外,您最终会在同一平台上构建所有版本,并且如果每个开发人员都从他们自己的计算机构建此类版本,则可以避免计算机之间的差异。
但您可能仍然需要maven 配置。 Jenkins 可能会使用此信息找到 URL 以将工件上传到(您的示例没有说明 Jenkins 如何找到 Nexus),有时上传 SNAPSHOT 版本或其他一些不适用于的临时版本很有用生产。在您的示例中,您仅为上传 SNAPSHOT 版本定义了 Nexus,我猜这是故意执行的,以强制执行禁止从本地计算机上传最终版本的规则。
顺便说一句,在您的 pom.xml
中定义存储库并不意味着会自动上传任何内容。只有当您对 pom 中定义的存储库执行 mvn deploy
时,才会上传某些内容。