我已经阅读了很多关于 Jenkins 工作 DSL 插件的教程,但我无法弄清楚如何创建一个工作工厂类,而该类又使用另一个生成工作的类。
我已经有很多工作 Groovy 脚本可以直接调用作业工厂并且可以正常工作并且我的作业已正确生成。我需要的是另一个类,它反过来使用以前的作业工厂生成大量作业。
我花了几个小时试图调试这个问题。我很确定它与闭包和实例化工厂对象有关。
package company.factory
import javaposse.jobdsl.dsl.DslFactory
import javaposse.jobdsl.dsl.Job
/**
* Base DSL templates for all Jenkins jobs.
*
*/
class JobFactory {
private DslFactory dslFactory
JobFactory(DslFactory dslFactory) {
this.dslFactory = dslFactory
}
Job generateBaseJob() {
dslFactory.job('TEST-1') {
logRotator(365, -1, 1, -1)
}
}
def generate() {
generateBaseJob()
}
}
Run Code Online (Sandbox Code Playgroud)
将其称为 Groovy 脚本有效:
import company.factory.JobFactory
JobFactory jobfactory = new JobFactory(this)
jobfactory.generate()
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试用另一个类扩展该类时,它失败了。
package company.flow
import company.factory.JobFactory
class DeploymentFlow {
JobFactory jobfactory = new JobFactory(this) …Run Code Online (Sandbox Code Playgroud) 我试图在 RPM 包中捆绑一堆 Perl 模块以便于部署。我尝试了很多工具,但最终选择了 fpm ( https://github.com/jordansissel/fpm )。
因此,我设法为每个必需的 Perl 模块手动构建和安装每个 RPM。我不确定这是正确的。但是我对 RPM 包没有很多经验。但据我所知,这是正确的行为。每个 RPM 包都包含相应 Perl 模块所需的所有依赖项。
问题是当我尝试使用生成的包来安装我的模块时,我遇到了一些冲突。
sudo yum --disablerepo=* localinstall *.rpm
Run Code Online (Sandbox Code Playgroud)
当它尝试安装时:
Transaction Summary
==============================================================================================================================================================================================================
Install 174 Packages
Total size: 45 M
Installed size: 357 M
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Error: Transaction test error:
file /usr/local/lib64/perl5/auto/Moose/Moose.so conflicts between attempted installs of Moose-Exporter-2.2013-1.x86_64 and Moose-2.2013-1.x86_64
file /usr/local/lib64/perl5/auto/Moose/Moose.so conflicts between attempted installs of Moose-Role-2.2013-1.x86_64 and Moose-Exporter-2.2013-1.x86_64 …Run Code Online (Sandbox Code Playgroud)