#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 }}"
(обратите внимание на кавычки) решило мою проблему!