Gitlab pipeline: "k6bin/k6 not found"

#1

Following K6 GitLab example, GitLab does not work as described.
The message is : /bin/sh: eval: line 162: k6bin/k6: not found

Note: we created an S3 bucket to eliminate permissions factor, the curl is downloading from the s3 bucket.

loadtest:
  stage: performance-test
  only:
      - k6
  before_script:
    - mkdir -p k6bin
    - apk add --update curl && rm -rf /var/cache/apk/*
    - |
      if [[ ! -f k6bin/k6 ]]; then
        curl -O -L https://s3-eu-west-1.amazonaws.com/gitlab-test-pipeline-file-store/k6-v0.24.0-linux64.tar.gz;
        tar -xvzf k6-v0.24.0-linux64.tar.gz;
        mv k6-v0.24.0-linux64/k6 k6bin/k6;
      fi
  script:
    - pwd
    - chmod -R a+rwx k6bin/k6
    - ls -lia
    - k6bin/k6 run k6-performance/getSites.js
  tags:
    - DOCKER
    - NOPROXY
    - CLOUD

gitlabOutput

#2

Hi,

can you also pwd in the before_script and maybe ls -l k6bin/ in both ?

#3

Modified yml slightly. Tried it on an Ubuntu 18.04 laptop and k6 file does get recognized and executed without issues. In the pipeline the image is Debian 9.8, and it does not recognize the file.

I got the 32 bit version k6, and put both files in the repo k6bin folder. Both the files show in ls . However, file command does not work on the CI machine with Debian 9.8 on either 32 bit or 64 bit k6 executable.

  • Not a file extract or move problem
  • Not a 32 bit vs 64 bit problem
  • Possible Debian issue(?)
  • Possible file issue from k6 file
loadtest:
  stage: performance-test
  only:
      - k6
  before_script:
    - mkdir -p k6bin
    - pwd
    - apk add --update curl && rm -rf /var/cache/apk/*
    - |
      if [[ ! -f k6bin/k6 ]]; then
        curl -O -L https://s3-eu-west-1.amazonaws.com/gitlab-test-pipeline-file-store/k6-v0.24.0-linux64.tar.gz;
        tar -xvzf k6-v0.24.0-linux64.tar.gz;
        mv k6-v0.24.0-linux64/k6 k6bin/k6;
      fi
    - pwd
  script:
    - pwd
    - chmod -R a+rwx k6bin
    - cd k6bin
    - pwd
    - ls -lia
    - file k632
    - cd ..
    - k6bin/k632 run k6-performance/getSites.js
    - k6bin/k6 run k6-performance/getSites.js
  tags:
    - DOCKER
    - NOPROXY
    - CLOUD

Capture

After this test, tried version 23 of k6, to reduce the guesstimate that this is a k6 file issue. The result is the same. This is most likely a Debian 9.8 CI machine issue.

Does anyone know how to add missing libraries to a Debian 9.8 CI machine so that the k6 executable gets recognized? Or, is there a way to make the k6 executable more compliant with CI machines?

#4

In that last screenshot, the error file: not found happens not because k632 isn’t found, but because the file binary (i.e., /usr/bin/file) isn’t present. Try to remove that line and see what happens.

#5

If we execute it with k6 run the result is ‘/bin/sh: eval: line xxx: k6-bin/k6: not found’ .
The file does not exist per CI Debian.

#6

it definitely won’t work because at this point you are in k6bin so it should be just k6.

Can you also try it with
./k6
or
./k6bin/k6
instead of just the plain path(k6bin/k6) as I remember that debian’s shell was something funky long time ago.

Also trying 32bit version on 64bit machine makes no sense :slight_smile:

#7

No difference.

‘$ ./k6bin/k6 run ./k6-performance/getSites.js
/bin/sh: eval: line 164: ./k6bin/k6: not found’

#8

I’m very confused :confused: I noticed that you mention Debian, yet the test script you’ve pasted uses apk, i.e. it’s on Alpine Linux. If you’re using Alpine, then the k6 binary may not work because of this issue: https://github.com/loadimpact/k6/issues/930

1 Like
#9

I had to solve the problem with your other answer here. Thank you!

https://community.k6.io/t/gitlab-loadimpact-k6-docker-image-unknown-command-sh-for-k6/116