# #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
Я ни за что на свете не могу понять, что изменилось. Я думал, что это может быть связано с этой проблемой, но у меня нет никаких проблем с сетью, тайм-аутов и т. Д.
Слегка запутанная версия моего .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
Комментарии:
1. Если вы используете общие бегуны GitLab, предоставленные при использовании gitlab.com (в отличие от вашего собственного, автономного экземпляра GitLab), тогда вам следует обратиться в службу поддержки / поднять проблему . Эта ошибка, похоже, никак не связана с вашим определением конвейера.
Ответ №1:
Эта предпоследняя строка ( 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 просто неосознанно запустит его.