如何将GitLab CI的job artifacts发送到GitHub并解压到指定目录
实现步骤
1. 前置配置
- 登录GitHub生成具有仓库读写权限的Personal Access Token(PAT)
- 进入GitLab对应项目的「设置」-「CI/CD」-「变量」页,添加3个掩蔽变量:
GITHUB_PAT:刚才生成的GitHub PATGITHUB_REPO:目标GitHub仓库的地址后缀,格式为用户名/仓库名GITHUB_TARGET_DIR:GitHub上要存放制品的目标目录,比如dist/release
- 确保GitLab Runner有
git、unzip、curl等基础命令的执行环境
2. 编写.gitlab-ci.yml配置
下面是完整的配置示例,分为构建生成制品、推送制品到GitHub两个阶段:
stages: - build - deploy_github # 构建阶段,生成你的制品 build_job: stage: build script: # 这里替换为你自己的构建命令,比如npm run build、mvn package等 - echo "模拟构建生成制品" - mkdir build_output - echo "构建产物内容" > build_output/result.txt # 定义要归档的制品 artifacts: paths: - build_output/ expire_in: 1 day # 推送阶段,把制品解压后传到GitHub指定目录 deploy_github_job: stage: deploy_github dependencies: - build_job # 自动拉取build_job生成的制品 only: - main # 可自定义触发分支,比如只有main分支构建才推送 script: # 配置git身份 - git config --global user.name "GitLab CI Bot" - git config --global user.email "ci@gitlab.com" # 可选:如果制品是zip包,先解压,这里build_output已经是解压后的目录,可按需调整解压逻辑 # - unzip build_output.zip -d ./temp_artifacts # 浅克隆目标GitHub仓库,减少拉取体积 - git clone --depth 1 https://$GITHUB_PAT@github.com/$GITHUB_REPO.git github_repo - cd github_repo - git checkout main # 替换为你要推送的目标分支 # 清空目标目录旧内容(可选,按需开启) - rm -rf $GITHUB_TARGET_DIR/* # 把制品复制到目标目录 - cp -rf ../build_output/* $GITHUB_TARGET_DIR/ # 提交并推送 - git add $GITHUB_TARGET_DIR - git commit -m "chore: 更新构建制品 来自GitLab pipeline $CI_PIPELINE_ID" || echo "无内容变更,跳过提交" - git push origin main
注意事项
- 如果GitHub仓库开启了分支保护规则,需要将PAT对应的账号加入排除列表,或者给对应账号推送权限
- 制品如果包含二进制文件,注意检查GitHub的文件大小限制,超过限制的大文件建议用Git LFS存储
- 如果不需要保留目标目录的历史文件,提交前可以先执行删除旧文件的操作,避免冗余文件残留
内容的提问来源于stack exchange,提问作者spongy
相关产品推荐
相关产品推荐

