我在Gitlab的CI中看到一些奇怪的行为。
我有一个写入文件的单元测试,例如:
def test_data(self):
data = 123
with open('data/model.pkl', 'wb') as fout:
pickle.dump(data, fout)
当它在本地运行时可以通过,但是当它在Gitlab的CI管道上运行时会失败,并显示以下错误:
FileNotFoundError: [Errno 2] No such file or directory: 'data/model.pkl'
我对此感到困惑,因为如果丢失了文件,应该编写文件来创建文件,但是我想也许./data
文件夹被排除在外了,即使它包含在我的仓库中,所以我将测试更改为:>
def test_data(self):
data = 123
if not os.path.exists('data')
os.makedirs('data')
with open('data/model.pkl', 'wb') as fout:
pickle.dump(data, fout)
再次,该方法在本地运行良好,但是在Gitlab上,它现在在os.makedirs('data')
行中失败,显示为:
[Errno 2] No such file or directory: 'data'
这是怎么回事?看起来Python无法写入本地文件系统。 Gitlab是否仅在只读环境中运行代码?我该如何解决?
我的.gitlab-ci.yml
如下:
image: ubuntu:latest
before_script:
- apt-get -yq update
- apt-get -yq install python3-minimal python3.7 python3.7-dev python3-pip
- pip3 install -r requirements-test.txt
test:
script:
- virtualenv -p python3.7 .env
- . .env/bin/activate
- pip3 install -r requirements.txt
- tox