Gitlab CI/CD 在“清理项目目录和基于文件的变量”时失败,并显示“错误:作业失败:退出代码 1”

Slu*_*ugQ 11 python powershell gitlab cicd

我的 gitlab 管道已经运行了近六个月,现在意外失败。

之前的每一行都成功运行,然后会发生这种情况:

Setting up curl (7.52.1-5+deb9u16) ...
$ curl -s https://deb.nodesource.com/setup_12.x | bash
Cleaning up project directory and file based variables 
ERROR: Job failed: exit code 1
Run Code Online (Sandbox Code Playgroud)

我一生都无法弄清楚到底发生了什么变化。我认为这可能与此问题有关,但我没有遇到任何网络问题、超时等问题。

我的 .gitlab-ci.yml 的轻度混淆版本。显然,我正在使用 .gitlab-ci.yml 来配置我的管道,并且我还使用共享的 GitLab 运行程序。


image: python:3.6-stretch

variables:
    ACCESS_KEY_ID: **********
    SECRET_ACCESS_KEY: **********

before_script:
  - apt-get update
  - apt-get install -y curl
  - curl -s https://deb.nodesource.com/setup_12.x | bash
  - apt-get install -y nodejs
  - apt-get install -y npm
  - npm install -g serverless
  - pip install  --upgrade awscli
  - python --version
  - nodejs --version

stages:
  - deploy

deploy:
  stage: deploy

  only:
  - master   # We will run the CD only when something is going to change in master branch.

  script:
    - npm install   # Archive the code repository.
    - pip install -r requirements.txt

    - cd services/service1/
    - sls deploy -v --stage production
    - cd ../../

    - cd services/service2/
    - sls deploy -v --stage production
    - cd ../../

    - cd services/service3/
    - sls deploy -v --stage production
    - cd ../../


  environment:
    name: master
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 4

倒数第二行 ( Cleaning up project directory and file based variables ) 始终出现在 CI/CD 作业中,无论通过还是失败。

可能发生的情况是最后一个命令curl -s https://deb.nodesource.com/setup_12.x | bash失败。不幸的是,由于您正在下载删除文件并将其通过管道传输到 bash,因此您的管道很可能开始随机失败,因为该脚本不能保证每次都相同

为了测试它,我创建了一个干净的 ubuntu 虚拟机,并运行该 curl 命令,并收到以下错误:在此输入图像描述

解决这个长期问题的最佳方法是创建一个容器,其中包含 CI 烘焙所需的所有依赖项,并将其存储在 GitLab 项目的容器注册表中,然后每次拉取该容器。这不仅可以节省您的 CI/CD 分钟时间,因为您不必每次都运行安装,而且可以防止您的依赖项发生变化并导致错误的确切问题。还值得注意的是,您在将外部下载的脚本传递给 bash 时应该非常小心,因为该脚本可能会更改为包含任何内容,并且您的 CI 会在不知不觉中运行它。