有可能在两个不同的詹金斯之间交换工作吗?我正在寻找一种输出/输入工作的方法。
当前回答
Jenkins有一个相当不错的wiki,尽管对于CI软件新手来说很难阅读……
它们为在服务器之间移动作业提供了一种简单的解决方案
诀窍可能是需要从Jenkins Configuration Page重新加载配置。
更新2020.03.10
詹金科学的格局已经改变了很多…我已经使用工作DSL有一段时间了。 我们有一个SEED Job,它生成其余的Job。
这有助于我们在需要的时候为Jenkins服务器重新创建或移动:) 您还可以为这些文件设置版本,以获得更好的可维护性!
其他回答
最简单的方法,直接访问机器是复制作业文件夹从第一个jenkins到另一个(你可以排除工作区-工作区文件夹),因为整个作业配置存储在磁盘上的xml文件(config.xml在作业路径文件夹)
然后在新的jenkins中只需重新加载配置中的全局设置(管理员权限是必需的)就应该足够了,如果不行,那么你就需要重新启动jenkins工具。
另一种方法是使用上面提到的插件。
编辑:
在这种情况下,你可能也可以排除模块文件夹和管道以及共享库文件夹,如workspace@libs
作业导入插件是这里从另一个Jenkins实例导入作业的简单方法。只需要提供源Jenkins实例的URL。Remote Jenkins URL可以接受以下任何类型的URL:
http://$JENKINS -获取远程实例上的所有作业 http://$JENKINS/job/$JOBNAME -找一份工作 http://$JENKINS/view/$VIEWNAME -获取特定视图中的所有作业
可能使用jenkins命令行是另一种选择,参见https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
create-job:通过将stdin读取为配置XML文件来创建一个新作业。 get-job:将作业定义XML转储到标准输出
所以你可以
java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml
java -jar jenkins-cli.jar -s http://server create-job newmyjob < myjob.xml
它对我来说很好,我习惯存储在我的版本控制系统中
对于那些在Windows世界中可能有或没有Bash可用的人,这里是我对Katu的PowerShell移植和Larry Cai的方法。希望它能帮助到别人。
##### Config vars #####
$serverUri = 'http://localhost:8080/' # URI of your Jenkins server
$jenkinsCli = 'C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar' # Path to jenkins-cli.jar on your machine
$destFolder = 'C:\Jenkins Backup\' # Output folder (will be created if it doesn't exist)
$destFile = 'jenkins-jobs.zip' # Output filename (will be overwritten if it exists)
########################
$work = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())
New-Item -ItemType Directory -Force -Path $work | Out-Null # Suppress output noise
echo "Created a temp working folder: $work"
$jobs = (java -jar $jenkinsCli -s $serverUri list-jobs)
echo "Found $($jobs.Length) existing jobs: [$jobs]"
foreach ($j in $jobs)
{
$outfile = Join-Path $work "$j.xml"
java -jar $jenkinsCli -s $serverUri get-job $j | Out-File $outfile
}
echo "Saved $($jobs.Length) jobs to temp XML files"
New-Item -ItemType Directory -Force -Path $destFolder | Out-Null # Suppress output noise
echo "Found (or created) $destFolder folder"
$destPath = Join-Path $destFolder $destFile
Get-ChildItem $work -Filter *.xml |
Write-Zip -Level 9 -OutputPath $destPath -FlattenPaths |
Out-Null # Suppress output noise
echo "Copied $($jobs.Length) jobs to $destPath"
Remove-Item $work -Recurse -Force
echo "Removed temp working folder"
这并不适用于现有的工作,但是有Jenkins工作生成器。
这允许我们将作业定义保存在yaml文件和git repo中,这是非常可移植的。
推荐文章
- 如何使用GitHub Org Plugin从jenkins管道(jenkinsfile)触发另一个作业?
- 在GitHub repo上显示Jenkins构建的当前状态
- Hudson支持的JUnit XML格式规范是什么?
- Maven依赖项失败,出现501错误
- 我怎么能让詹金斯CI与Git触发器推到主人?
- 如何从命令行重置Jenkins安全设置?
- 如何在不重启服务器的情况下停止詹金斯上不可阻挡的僵尸工作?
- Jenkins:注释可以添加到Jenkins文件中吗?
- 如何在Jenkins中设置发件人地址?
- 为某些代码关闭声纳
- 如何在Jenkins中设置环境变量?
- 我如何在詹金斯克隆一份工作?
- 如何在本地测试对詹金斯文件所做的更改?
- 在Git中更改电子邮件地址
- 从docker内部运行docker是否可以?