Действия Github — нет такого файла или каталога ни на одном шаге выполнения

#github #continuous-integration #github-actions

#github #непрерывная интеграция #github-действия

Вопрос:

Я пытаюсь протестировать действия Github для небольшого веб-проекта. У меня есть два проекта в репозитории, и я хочу создать сценарий развертывания только для веб-клиента.

Репозиторий выглядит следующим образом:

 root
|
|-src
|  |-API
|  |
|  |-WebClient
|
|-docs
  

Я хочу запускать скрипты в каталоге WebClient. Когда я пытаюсь войти в ./src/webclient, я получаю сообщение об ошибке no such file or directory

 name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Setup Node.js environment
        uses: actions/setup-node@v2.1.2
        
      - name: Open Web Client Directory
        run: |
          ls -la
          cd ./src/webclient
          ls -la
          
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.
          ls -la

  

Вывод для шага «Открыть каталог веб-клиента»:

 total 28
drwxr-xr-x 5 runner docker 4096 Oct 17 18:05 .
drwxr-xr-x 3 runner docker 4096 Oct 17 18:05 ..
drwxr-xr-x 8 runner docker 4096 Oct 17 18:05 .git
drwxr-xr-x 3 runner docker 4096 Oct 17 18:05 .github
-rw-r--r-- 1 runner docker 6215 Oct 17 18:05 .gitignore
drwxr-xr-x 4 runner docker 4096 Oct 17 18:05 src
/home/runner/work/_temp/43164e53-98ec-41c2-8773-72e94c3453e5.sh: line 2: cd: ./src/webclient: No such file or directory
Error: Process completed with exit code 1.
  

Похоже ls -la , что команда успешно выполняется, но не удается найти каталог ./src/webclient .

Есть ли что-то очевидное, чего мне не хватает? Я попытался изменить команду на cd src/webclient , и это также не удается. Это работает на двух разных локальных компьютерах, одном ubuntu и одном macOS.

Комментарии:

1. Имя каталога WebClient или webclient ? Файловая система чувствительна к регистру, и если она WebClient такая, как вы показываете в первый раз, тогда вам нужно использовать cd src/WebClient вместо cd src/webclient .

Ответ №1:

У меня возникла проблема, когда шаг не выполнялся со следующим, независимо от того, как я его настроил:

Ошибка: нет такого файла или каталога

Оказывается, это потому, что я не проверил репозиторий на предыдущем шаге!

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

 steps:
  - uses: actions/checkout@v2
  

Комментарии:

1. Это то, что кажется настолько очевидным, что должно быть понятнее в документах.

2. - uses: actions/checkout@v2 требуется ли для доступа к файлам, созданным run: dotnet publish ?

3. Это также происходит, если вы пытаетесь echo использовать подкаталог on, и вам не нужен ваш код. Вам необходимо добавить mkdir {dir} в свой прогон перед echo

4. Тот факт, что это ~ 70 голосов, говорит о том, что действия GitHub должны добавлять No Such File or Directory сообщение об ошибке, когда actions/checkout этого не произошло

Ответ №2:

Попробуйте это:

 - name: Open Web Client Directory
  working-directory: src/webclient
  run: |
    ls -la
  

Ответ №3:

Согласно вашим журналам, это, по-видимому, связано с чувствительностью к регистру: вы показываете, что репозиторий содержит src/WebClient (верблюжий регистр!), Но затем вы пытаетесь cd src/webclient (нижний регистр).

В macOS это сработало бы, потому что файловая система по умолчанию не чувствительна к регистру; не уверен, почему это работает в вашей системе Ubuntu, если вы не используете что-то вроде завершения табуляции, которое выполняет оболочку за вас.

Чтобы проверить, что у вас есть в ваших подкаталогах, вы можете выполнить find src вместо ls -la того, чтобы просматривать все дерево каталогов src .

Комментарии:

1. Это была проблема. Мой WSL завершал вкладку для меня. Похоже на PEBCAK класса A!

Ответ №4:

Другое решение, но оно может помочь кому-то другому.

В моем случае я читал секретную переменную с новыми строками, подобными этой:

 echo ${{ secrets.STORE_FILE_BASE64 }} | base64 --decode > ${{ github.workspace }}/android/key.jks
  

Это вызвало «ошибку: нет такого файла или каталога». Изменение на "${{ secrets.STORE_FILE_BASE64 }}" (обратите внимание на кавычки) решило мою проблему!