You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python脚本在Jenkins中将文件夹移动至另一文件夹下

解决Jenkins文件夹跨层级复制/移动的问题

你遇到的错误是因为python-jenkins库的copy_job方法在处理文件夹时,要求源与目标必须处于同一父目录下。直接将folder2复制到folder1/folder2时,源的父目录是deployment,目标的父目录是folder1,不符合该方法的限制,因此报错。

以下是两种可行的解决办法:

方法一:先复制到同层级临时目录,再移动到目标路径

这种方式更贴近“移动”的需求,先复制原文件夹到同层级临时位置,再通过Jenkins的移动API将其转移到目标目录:

import jenkins
import requests
from requests.auth import HTTPBasicAuth

# 初始化Jenkins连接
jenkins_url = "https://comp.com/"
server = jenkins.Jenkins(jenkins_url, username="xxxx", password="******")
auth = HTTPBasicAuth("xxxx", "******")

# 1. 将folder2复制到同层级临时目录
temp_folder = "deployment/temp_folder2"
server.copy_job("deployment/folder2", temp_folder)

# 2. 调用Jenkins移动API,将临时文件夹移到folder1下并重命名为folder2
move_data = {
    "from": "job/deployment/job/temp_folder2",
    "to": "job/deployment/job/folder1/job/folder2",
    "json": '{"redirectTo": "."}'
}
response = requests.post(f"{jenkins_url}/moveItem", data=move_data, auth=auth)
response.raise_for_status()  # 确保请求成功

# 3. (可选)删除原folder2
server.delete_job("deployment/folder2")

方法二:递归复制文件夹内的所有任务

如果只需要迁移文件夹内的任务,可先在目标位置创建空文件夹,再逐个复制原文件夹下的任务:

import jenkins

jenkins_url = "https://comp.com/"
server = jenkins.Jenkins(jenkins_url, username="xxxx", password="******")

# 1. 在folder1下创建folder2文件夹(若已存在则跳过)
folder_config = '''<?xml version='1.1' encoding='UTF-8'?>
<com.cloudbees.hudson.plugins.folder.Folder plugin="folder@6.7.0">
  <description></description>
  <properties/>
  <folderViews class="com.cloudbees.hudson.plugins.folder.views.DefaultFolderViewHolder">
    <views>
      <hudson.model.AllView>
        <owner class="com.cloudbees.hudson.plugins.folder.Folder" reference="../../.."/>
        <name>All</name>
        <filterExecutors>false</filterExecutors>
        <filterQueue>false</filterQueue>
        <properties class="hudson.model.View$PropertyList"/>
      </hudson.model.AllView>
    </views>
    <tabBar class="hudson.views.DefaultViewsTabBar"/>
  </folderViews>
  <healthMetrics>
    <com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric>
      <nonRecursive>false</nonRecursive>
    </com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric>
  </healthMetrics>
  <icon class="com.cloudbees.hudson.plugins.folder.icons.StockFolderIcon"/>
</com.cloudbees.hudson.plugins.folder.Folder>
'''

try:
    server.create_job("deployment/folder1/folder2", folder_config)
except jenkins.JenkinsException:
    pass

# 2. 获取folder2下的所有任务并逐个复制到目标文件夹
jobs = server.get_jobs(folder_path="deployment/folder2")
for job in jobs:
    job_name = job["name"]
    source_path = f"deployment/folder2/{job_name}"
    target_path = f"deployment/folder1/folder2/{job_name}"
    server.copy_job(source_path, target_path)

# 3. (可选)删除原folder2
server.delete_job("deployment/folder2")

注意事项

  • 确保操作的Jenkins账号拥有创建、复制、删除文件夹/任务的权限
  • 替换代码中的Jenkins地址、用户名、密码为实际信息
  • 方法二中的文件夹配置XML需匹配你Jenkins的folder插件版本,可通过现有文件夹的/config.xml页面获取

内容的提问来源于stack exchange,提问作者Heinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:45:35