gitlab-ci.yml cpp отчет о покрытии - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь реализовать CI, используя Gitlab для проекта c ++.Для начала я добавил простую программу на C ++ hello world, которая компилировалась и запускалась как на моем ПК, так и в Gitlab CI.

Когда я пытаюсь сгенерировать отчет о покрытии для тех же команд, он работает на ПК, но не в Gitlab CI.

Это мой gitlab-ci.yml

# use the official gcc image, based on debian
# can use verions as well, like gcc:5.2
# see https://hub.docker.com/_/gcc/
image: gcc

build:
  stage: build
  # instead of calling g++ directly you can also use some build toolkit like make
  # install the necessary build tools when needed
  # before_script: 
  #   - apt update && apt -y install make autoconf 
  script: 
    - g++ -Wall --coverage -fprofile-arcs -ftest-coverage helloworld.cpp -o mybinary
    - ls
  artifacts:
    paths:
      - mybinary
  # depending on your build setup it's most likely a good idea to cache outputs to reduce the build time
  # cache:
  #   paths:
  #     - "*.o"

# run tests using the binary built before
test:
  stage: test
  script:
    - bash runmytests.sh

coverage:
  stage: deploy
  before_script:
    - apt-get -qq update && apt-get -qq install -y gcovr ggcov lcov
  script:
    - ls
    - g++ -Wall --coverage -fprofile-arcs -ftest-coverage helloworld.cpp -o mybinary
    - ./mybinary
    - ls
    - gcov helloworld.cpp
    - lcov --directory . --capture --output-file coverage.info
    - lcov --remove coverage.info '/usr/*' --output-file coverage.info
    - lcov --list coverage.info
    - genhtml -o res coverage.info

Это сгенерированная ошибка вывода

$ g++ -Wall --coverage -fprofile-arcs -ftest-coverage helloworld.cpp -o mybinary
$ ./mybinary
Hello, World!$ ls
README.md
helloworld.cpp
helloworld.gcda
helloworld.gcno
mybinary
runmytests.sh
$ gcov helloworld.cpp
File 'helloworld.cpp'
Lines executed:100.00% of 3
Creating 'helloworld.cpp.gcov'

File '/usr/local/include/c++/8.1.0/iostream'
No executable lines
Removing 'iostream.gcov'

$ lcov --directory . --capture --output-file coverage.info
Capturing coverage data from .
Found gcov version: 8.1.0
Scanning . for .gcda files ...
geninfo: WARNING: /builds/ganeshredcobra/gshell/helloworld.gcno: Overlong record at end of file!
Found 1 data files in .
Processing helloworld.gcda
geninfo: WARNING: cannot find an entry for helloworld.cpp.gcov in .gcno file, skipping file!
Finished .info-file creation
$ lcov --list coverage.info
Reading tracefile coverage.info
lcov: ERROR: no valid records found in tracefile coverage.info
ERROR: Job failed: exit code 1

Как я могу это исправить?

1 Ответ

0 голосов
/ 16 мая 2018

Решил проблему, изменив имя образа с gcc на ubuntu 16.04, рабочий yml будет выглядеть так

# use the official gcc image, based on debian
# can use verions as well, like gcc:5.2
# see https://hub.docker.com/_/gcc/
image: ubuntu:16.04

build:
  stage: build
  # instead of calling g++ directly you can also use some build toolkit like make
  # install the necessary build tools when needed
  before_script: 
    - apt update && apt -y install make autoconf gcc g++
  script: 
    - g++ -Wall --coverage -fprofile-arcs -ftest-coverage helloworld.cpp -o mybinary
    - ls
  artifacts:
    paths:
      - mybinary
  # depending on your build setup it's most likely a good idea to cache outputs to reduce the build time
  # cache:
  #   paths:
  #     - "*.o"

# run tests using the binary built before
test:
  stage: test
  script:
    - bash runmytests.sh

coverage:
  stage: deploy
  before_script:
    - apt-get -qq update && apt-get -qq install -y make autoconf gcc g++ gcovr ggcov lcov
  script:
    - ls
    - g++ -Wall --coverage -fprofile-arcs -ftest-coverage helloworld.cpp -o mybinary
    - ./mybinary
    - ls
    - gcov helloworld.cpp
    - lcov --directory . --capture --output-file coverage.info
    - lcov --list coverage.info
...