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
相关产品推荐
相关产品推荐

