使用Groovy脚本实现Git仓库间文件复制(用于Jenkins任务)
Groovy脚本实现Git仓库克隆、文件复制与跨仓库推送(Jenkins任务适用)
以下是适配Jenkins环境的Groovy脚本,通过Git命令完成从源仓库克隆、指定文件复制、再推送到目标仓库的完整流程:
pipeline { agent any environment { // 配置仓库地址与Jenkins凭证ID(需提前在凭证管理中配置) SRC_REPO_URL = 'https://github.com/example/source-repo.git' TARGET_REPO_URL = 'https://github.com/example/target-repo.git' SRC_CRED_ID = 'source-git-creds' TARGET_CRED_ID = 'target-git-creds' // 指定要复制的文件/目录(相对源仓库根目录的路径,多路径用空格分隔) FILES_TO_COPY = 'docs/ README.md' // 临时工作目录,避免污染Jenkins默认工作区 WORK_DIR = "${env.WORKSPACE}/temp_work" } stages { stage('清理工作区') { steps { sh 'rm -rf ${WORK_DIR} || true' sh 'mkdir -p ${WORK_DIR}' } } stage('克隆源仓库') { steps { withCredentials([usernamePassword( credentialsId: SRC_CRED_ID, usernameVariable: 'SRC_USER', passwordVariable: 'SRC_PWD' )]) { sh """ cd ${WORK_DIR} git clone https://${SRC_USER}:${SRC_PWD}@${SRC_REPO_URL.replace('https://', '')} source-repo """ } } } stage('复制文件到临时目录') { steps { sh """ mkdir -p ${WORK_DIR}/target-files cd ${WORK_DIR}/source-repo cp -r ${FILES_TO_COPY} ${WORK_DIR}/target-files/ """ } } stage('克隆/拉取目标仓库') { steps { withCredentials([usernamePassword( credentialsId: TARGET_CRED_ID, usernameVariable: 'TARGET_USER', passwordVariable: 'TARGET_PWD' )]) { sh """ cd ${WORK_DIR} if [ -d target-repo ]; then cd target-repo git pull origin main else git clone https://${TARGET_USER}:${TARGET_PWD}@${TARGET_REPO_URL.replace('https://', '')} target-repo fi """ } } } stage('复制文件并推送至目标仓库') { steps { withCredentials([usernamePassword( credentialsId: TARGET_CRED_ID, usernameVariable: 'TARGET_USER', passwordVariable: 'TARGET_PWD' )]) { sh """ cd ${WORK_DIR}/target-repo # 复制文件到目标仓库根目录 cp -r ${WORK_DIR}/target-files/* . # 配置Git用户信息(避免Jenkins节点无全局配置导致提交失败) git config user.name "Jenkins CI" git config user.email "jenkins@example.com" # 提交并推送 git add . git commit -m "Sync files from source repo: $(date '+%Y-%m-%d %H:%M:%S')" git push https://${TARGET_USER}:${TARGET_PWD}@${TARGET_REPO_URL.replace('https://', '')} main """ } } } stage('清理临时文件') { steps { sh 'rm -rf ${WORK_DIR}' } } } post { always { echo '任务执行完成,临时工作区已清理' } } }
关键细节说明:
- 凭证安全:脚本使用Jenkins内置的
usernamePassword凭证机制,避免硬编码账号密码,需提前在Jenkins「凭证管理」中添加对应仓库的凭证,并替换SRC_CRED_ID和TARGET_CRED_ID为你的凭证ID。 - 分支适配:示例中默认使用
main分支,若目标仓库使用master或其他分支,需替换脚本中所有main为对应分支名。 - 容错处理:清理阶段添加
|| true避免目录不存在时报错;目标仓库已存在时执行pull而非重复克隆,提升任务执行效率。 - 路径灵活性:
FILES_TO_COPY支持同时复制多个文件或目录,用空格分隔即可,适配不同的同步需求。
内容的提问来源于stack exchange,提问作者Hemanth Kumar
相关产品推荐
相关产品推荐

