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

GitLab CI/CD流水线Python脚本生成文件丢失问题求助

解决GitLab CI/CD中Python创建文件无法留存到仓库的问题

问题根源

GitLab CI的运行环境是临时隔离容器,脚本创建的文件默认仅存在于当前Job的运行环境中,不会自动提交到仓库;同时你当前的artifacts配置规则错误,导致文件无法作为流水线产物留存。

解决方案

1. 修正Artifacts配置(留存为流水线产物)

当前artifacts.paths设置为.*,仅匹配隐藏文件,无法捕获你创建的test.txt。修改为:

retrieve-tags:
  stage: build
  script:
  - pip3 install python-gitlab markdown
  - python3 retrieve_tags.py 
  image: python
  artifacts:
    paths: 
      - test.txt  # 若要保留所有非隐藏文件,可替换为 ./*
    expire_in: 1 week  # 可选,设置产物自动过期时间

修改后,文件会作为流水线产物保存,你可在流水线页面的「Artifacts」标签下载查看。

2. 将文件提交推送回GitLab仓库(永久留存到仓库)

若要让文件直接出现在GitLab仓库中,需在CI脚本中添加git提交推送步骤,具体操作如下:

步骤1:调整GitLab CI配置

在script段添加git操作:

retrieve-tags:
  stage: build
  script:
  - pip3 install python-gitlab markdown
  - python3 retrieve_tags.py 
  # 配置Git提交身份
  - git config --global user.name "GitLab CI/CD"
  - git config --global user.email "ci@gitlab.com"
  # 提交文件
  - git add test.txt
  - git commit -m "CI: 自动生成test.txt文件"
  # 推送到仓库(使用CI内置令牌授权)
  - git push https://gitlab-ci-token:$CI_JOB_TOKEN@$CI_REPOSITORY_URL HEAD:$CI_COMMIT_BRANCH
  image: python
  # 可选:保留流水线产物
  artifacts:
    paths: 
      - test.txt

步骤2:确保Python脚本在仓库工作目录创建文件

你的Python脚本中path被隐藏,需确保文件创建在CI克隆仓库的根目录(默认工作目录),可直接用os.getcwd()获取当前路径,避免路径错误:

import os

# 获取CI仓库的工作目录
path = os.getcwd()
file_name = "test.txt"
with open(os.path.join(path, file_name), 'w') as fp:
    fp.write("TAG_CONTENTS")
# with语句会自动关闭文件,无需手动调用fp.close()

print(os.listdir(path))

注意事项

  • 权限验证:确保CI Runner有代码推送权限,可在项目「CI/CD」→「Variables」中确认CI_JOB_TOKEN具备写入权限;若权限不足,可使用个人访问令牌(PAT)替代,PAT需勾选write_repository权限。
  • 避免循环触发:若流水线触发规则为分支推送,提交操作可能导致流水线重复触发,可在commit信息中添加[skip ci],或调整CI触发规则规避。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:56:03