Я бы хотел использовать GitLab CI с файлом .gitlab-ci.yml для запуска разных этапов с отдельными скриптами. На первом этапе создается инструмент, который необходимо использовать на более позднем этапе для выполнения тестов. Я объявил сгенерированный инструмент как артефакт.

Теперь, как я могу использовать этот инструмент на более позднем этапе работы? Какой правильный путь и какие файлы будут вокруг него?

Например, на первом этапе создаются артефакты / bin / TestTool / TestTool.exe, и этот каталог содержит другие необходимые файлы (библиотеки DLL и другие). Мой файл .gitlab-ci.yml выглядит так:

releasebuild:
  script:
    - chcp 65001
    - build.cmd
  stage: build
  artifacts:
    paths:
      - artifacts/bin/TestTool/

systemtests:
  script:
    - chcp 65001
    - WHAT TO WRITE HERE?
  stage: test

Сборка и тесты запускаются в Windows, если это необходимо.

ygoe

Ответов: 3

Ответы (3)

Если вы хотите, чтобы foo / был доступен на следующем этапе, И он находится в вашем .gitignore, вам нужно указать его в артефактах этапа, который его создает, или, как описано в здесь, используйте untracked: true.

Это сработало для меня (без зависимостей на следующем этапе)

   artifacts:
     paths:
       - foo/
     expire_in: 1 hour

Кстати относительно: expire_in: 1 час часть:
Я читал по адресу https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2133, нет способа заставить артефакты автоматически истекать при завершении конвейера, а срок хранения по умолчанию был на удивление долгим (30 дней по умолчанию) - отсюда и временная кладжа, от которой нужно избавиться их - см. https://docs.gitlab.com/ee/ci/yaml/

Используйте зависимости. На этом этапе тестирования конфигурации будут загружены неотслеживаемые файлы, которые были созданы на этапе сборки:

build:
  stage: build
  artifacts:
    untracked: true
  script:
    - ./Build.ps1

test:
  stage: test
  dependencies: 
    - build
  script:
    - ./Test.ps1

Поскольку по умолчанию передаются артефакты со всех предыдущих этапов, нам просто нужно определить этапы в правильном порядке. Пожалуйста, попробуйте приведенный ниже пример, который может помочь в понимании.

image: ubuntu:18.04

stages:
  - build_stage
  - test_stage
  - deploy_stage

build:
  stage: build_stage
  script:
    - echo "building..." >> ./build_result.txt
  artifacts:
    paths:
    - build_result.txt
    expire_in: 1 week

unit_test:
  stage: test_stage
  script:
    - ls
    - cat build_result.txt
    - cp build_result.txt unittest_result.txt
    - echo "unit testing..." >> ./unittest_result.txt
  artifacts:
    paths:
    - unittest_result.txt
    expire_in: 1 week

integration_test:
  stage: test_stage
  script:
    - ls
    - cat build_result.txt
    - cp build_result.txt integration_test_result.txt
    - echo "integration testing..." >> ./integration_test_result.txt
  artifacts:
    paths:
    - integration_test_result.txt
    expire_in: 1 week

deploy:
  stage: deploy_stage
  script:
    - ls
    - cat build_result.txt
    - cat unittest_result.txt
    - cat integration_test_result.txt

enter image description here

И в случае передачи артефактов между заданиями на разных этапах, мы можем использовать зависимости вместе с артефакты для передачи артефактов, как описано в документе .

И еще один пример попроще:

image: ubuntu:18.04

build:
  stage: build
  script:
    - echo "building..." >> ./result.txt
  artifacts:
    paths:
    - result.txt
    expire_in: 1 week

unit_test:
  stage: test
  script:
    - ls
    - cat result.txt
    - echo "unit testing..." >> ./result.txt
  artifacts:
    paths:
    - result.txt
    expire_in: 1 week

deploy:
  stage: deploy
  script:
    - ls
    - cat result.txt

2022 WebDevInsider