我有一个Jenkinsfile声明性管道,它有两个步骤:
第一步是在docker容器内部构建,因为它需要一个特定的应用程序来构建RPM。
第二步是直接在Jenkins奴隶上运行,可以是其他奴隶而不是第一步的奴隶。
为了使用第一步产生的RPM,我目前正在使用stash
和unstash
步骤。如果我不使用它们,第二步就无法访问RPM文件。
RPM文件大约是215MB,超过了建议的100MB限制,所以我想知道是否有更好的解决方案?
pipeline {
agent any
options {
timestamps()
}
stages {
stage('Gradle: build') {
agent {
docker {
image 'some-internal-image'
}
}
steps {
sh """
chmod +x gradlew
./gradlew buildRpm
"""
}
post {
success {
stash name: 'rpm', includes: 'Server/target/myapp.rpm'
}
}
}
stage('Gradle: build docker image') {
steps {
unstash 'rpm'
sh """
chmod +x gradlew
./gradlew buildDockerImage
"""
}
}
}
}
答案 0 :(得分:0)
你可以使用docker的multi-stage build,但我不知道使用Jenkins管道的一个很好的实现。
我们还要存储数百兆字节,以便将其分发给构建代理。我已经尝试将工件上传到S3并从那里再次下载它们,现在可以看到性能有所提高(只是它从Jenkins Master那里获得了负载)。
所以我非常自以为是的建议:一旦遇到性能/负载问题,请保持原样并进行优化。
答案 1 :(得分:0)
您可以使用Artifactory或任何其他二进制存储库管理器..
来自Artifactory的网页:
作为第一个也是唯一的通用Artifact Repository Manager 市场上,JFrog Artifactory完全支持创建的软件包 任何语言或技术。
...
... Artifactory提供端到端,自动化和防弹 用于跟踪从开发到生产的工件的解决方案。