Как создать артефакт, чтобы он был доступен для скачивания в .gitlab-ci.yml - PullRequest
1 голос
/ 18 июня 2019

У меня есть конвейер GitLab ci, и я не уверен, как заставить его генерировать артефакт с двоичным файлом, который произошел на этапе сборки.

Вот мой файл yml ...

stages:
  - test
  - build
  - art

image: golang:1.9.2

variables:
  BIN_NAME: example
  ARTIFACTS_DIR: artifacts
  GO_PROJECT: example


before_script:
  - mkdir -p ${GOPATH}/src/${GO_PROJECT}
  - mkdir -p ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}
  - go get -u github.com/golang/dep/cmd/dep
  - cp -r ${CI_PROJECT_DIR}/* ${GOPATH}/src/${GO_PROJECT}/
  - cd ${GOPATH}/src/${GO_PROJECT}

test:
  stage: test


  script:
    # Run all tests
    go test -run ''


build:
  stage: build

  script:
    # Compile and name the binary as `hello`
    - go build -o hello
    # Execute the binary
    - ./hello

art:
  script:
  artifacts:
    paths:
    - ./hello

Фазы тестирования и сборки выполняются нормально, а стадия художественного оформления - нет, когда она добавляется в файл yml.

Я нашел много примеров в сети, но мне трудно преобразовать их вмоя точная ситуация.

Все, что я хочу, чтобы артефакт появился в виде загрузки на конвейере, как в этой ссылке.

Загрузка артефактов

после попытки предложить решение я получаю следующее ...

$ go build -o hello
$ ./hello
Heldfgdfglo 2
Uploading artifacts...
WARNING: ./hello: no matching files                
ERROR: No files to upload                          
Job succeeded

Попытка добавления ..

GOPATH: /go

и ...

- cd ${GOPATH}/src/${GO_PROJECT}

теперь получаю следующую ошибку...

Uploading artifacts...
WARNING: /go/src/example/hello: no matching files  
ERROR: No files to upload                          
Job succeeded

вывод распределяется по запросу ...

 mkdir -p ${GOPATH}/src/${GO_PROJECT}
$ mkdir -p ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}
$ go get -u github.com/golang/dep/cmd/dep
$ cp -r ${CI_PROJECT_DIR}/* ${GOPATH}/src/${GO_PROJECT}/
$ cd ${GOPATH}/src/${GO_PROJECT}
$ go build -o hello
$ pwd
/go/src/example
$ ls -l hello
-rwxr-xr-x. 1 root root 1859961 Jun 19 08:27 hello
$ ./hello
Heldfgdfglo 2
Uploading artifacts...
WARNING: /go/src/example/hello: no matching files  
ERROR: No files to upload                          
Job succeeded

Ответы [ 2 ]

1 голос
/ 19 июня 2019

./hello не соответствует вашему пути артефакта, потому что вы изменили каталог перед запуском скрипта.

Вам необходимо переместить сгенерированный исполняемый файл в исходный рабочий каталог бегуна gitlab, поскольку пути артефактов могут быть только относительно каталога сборки:

build:
  stage: build

  script:
    # Compile and name the binary as `hello`
    - go build -o hello
    # Execute the binary
    - ./hello
    # Move to gitlab build directory
    - mv ./hello ${CI_PROJECT_DIR}

  artifacts:
    paths:
    - ./hello

См. https://gitlab.com/gitlab-org/gitlab-ce/issues/15530

1 голос
/ 18 июня 2019

Вам необходимо указать пути артефактов в задании, которое их создает, поскольку каждое задание запускает новую пустую среду (более или менее с учетом кэша):

build:
  stage: build

  script:
    # Compile and name the binary as `hello`
    - go build -o hello
    # Execute the binary
    - ./hello

  artifacts:
    paths:
    - ./hello
...