有可能在两个不同的詹金斯之间交换工作吗?我正在寻找一种输出/输入工作的方法。
当前回答
对于那些在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实例(版本1.548)中,配置文件位于:
/var/lib/jenkins/jobs/-the-project-name - / config . xml
属于jenkins用户和jenkins组,拥有644个权限。将文件复制到这里和从这里复制到这里应该可以工作。我没有尝试直接更改它,但已经从这个地方备份了配置,以防项目需要再次设置。
转到Jenkins服务器的首页,点击页面底部的REST API:
创建工作
要创建一个新作业,将config.xml发送到这个URL,查询参数name=JOBNAME。你需要发送一个Content-Type: application/xml报头。如果创建成功,您将获得200状态代码,如果创建失败,则获得4xx/5xx代码。config.xml是Jenkins用于在文件系统中存储项目的格式,因此您可以在Jenkins主目录中看到它们的示例,或者通过从/job/JOBNAME/config.xml中检索现有作业的XML配置。
多亏了Larry Cai的回答,我成功地创建了一个脚本来备份我所有的Jenkins作业。我创建了一个每周运行这个的作业。如果有人发现它有用,这里是:
#!/bin/bash
#IFS for jobs with spaces.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs);
do
java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml;
done
IFS=$SAVEIFS
mkdir deploy
tar cvfj "jenkins-jobs.tar.bz2" ./*.xml
下载插件名非常简单
作业导入插件
输入Remote Jenkins服务器的URL,它将自动导入作业
2021年,进出口过程很痛苦!!
如果你有shell访问两个jenkins实例:旧的和新的,遵循以下步骤来执行成功的作业迁移:
穿着你的旧内裤
在你的旧Jenkins里找到Jenkins家。通常/var/lib/jenkins.如果你使用bitnami: /opt/bitnami/jenkins 在Jenkins家中,进入工作文件夹 您应该看到带有作业名称的文件夹。在这些文件夹中,您只需要config.xml 备份所有需要的作业。只有文件夹和它的config.xml。还有很多其他文件不是必需的。
在你的新詹金斯:
找到詹金斯家 将作业(以前的备份)复制到jobs文件夹 确保这些新文件夹的所有者是用户“jenkins”。如果不使用这个:chown jenkins:jenkins /var/lib/jenkins -R 重启詹金斯 解析:选D
根据赞成票和评论的数量,我可以考虑创建一个新插件的可能性:)
推荐文章
- 如何使用GitHub Org Plugin从jenkins管道(jenkinsfile)触发另一个作业?
- 在GitHub repo上显示Jenkins构建的当前状态
- Hudson支持的JUnit XML格式规范是什么?
- Maven依赖项失败,出现501错误
- 我怎么能让詹金斯CI与Git触发器推到主人?
- 如何从命令行重置Jenkins安全设置?
- 如何在不重启服务器的情况下停止詹金斯上不可阻挡的僵尸工作?
- Jenkins:注释可以添加到Jenkins文件中吗?
- 如何在Jenkins中设置发件人地址?
- 为某些代码关闭声纳
- 如何在Jenkins中设置环境变量?
- 我如何在詹金斯克隆一份工作?
- 如何在本地测试对詹金斯文件所做的更改?
- 在Git中更改电子邮件地址
- 从docker内部运行docker是否可以?