Мой проект Dockerized и позволяет изменять локальный код.
Вот мой сценарий конвейера:
Код: Выделить всё
name: Laravel Run Tests
on:
push:
branches:
- main
pull_request:
types: [opened, reopened, synchronize]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- name: Install PHP dependencies
run: |
cp .env.example .env
cp nginx/conf.d/laravel.conf.example nginx/conf.d/laravel.conf
sudo chown -R www-data:www-data .
sudo chmod -R 777 .
pwd
ls -l
ls -a
ls -a ./nginx/conf.d
cat ./nginx/conf.d/laravel.conf
composer install --no-ansi --no-interaction --no-progress --no-scripts --optimize-autoloader
php artisan key:generate
php artisan config:cache
- name: Install npm dependencies
run: |
npm install
- name: Install Docker Compose
run: |
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
- name: Set up Docker Compose
run: |
docker-compose up -d
sleep 40
docker-compose exec -T app php artisan migrate --force
docker ps
- name: Check file permissions
run: docker-compose exec -T app ls -l /var/www
- name: Check logs of app container
run: docker logs laravel_app
- name: Check logs of webserver container
run: docker logs nginx
- name: Run tests inside Docker container
run: docker-compose exec -T app php artisan test
Код: Выделить всё
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: laravel_app
working_dir: /var/www
volumes:
- ./:/var/www
networks:
- laravel
env_file:
- .env
depends_on:
- db
healthcheck:
test: [ "CMD-SHELL", "curl -f http://localhost || exit 1" ]
interval: 30s
timeout: 10s
retries: 5
restart: unless-stopped
webserver:
image: nginx:1.26.0-alpine
container_name: nginx
ports:
- "8081:80"
volumes:
- ./:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- app
networks:
- laravel
restart: unless-stopped
db:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- dbdata:/var/lib/mysql
ports:
- "3307:3306"
networks:
- laravel
healthcheck:
test: [ "CMD-SHELL", "mysqladmin ping -h localhost -u ${DB_USERNAME} -p${DB_PASSWORD} || exit 1" ]
interval: 30s
timeout: 10s
retries: 5
restart: unless-stopped
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
ports:
- "8082:80"
depends_on:
- db
networks:
- laravel
restart: unless-stopped
networks:
laravel:
volumes:
dbdata:
Код: Выделить всё
FROM php:8.3.7-fpm
RUN apt-get update && apt-get install -y \
git \
unzip \
zip \
nodejs \
netcat-openbsd
RUN docker-php-ext-install pdo_mysql
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
RUN apt-get install -y nodejs
RUN apt-get update && apt-get install -y netcat-openbsd
WORKDIR /var/www
COPY . /var/www
RUN composer install --no-interaction --no-plugins --no-scripts
RUN npm i
COPY init.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/init.sh
CMD ["sh", "/usr/local/bin/init.sh"]
Код: Выделить всё
#!/bin/sh
chown -R www-data:www-data /var/www
until nc -z -v -w30 db 3306; do
echo 'Waiting for database connection...'
sleep 1
done
php artisan migrate
exec php-fpm
На моем локальном компьютере я могу запускать тесты и передайте их с помощью команды:
docker-compose exec -T app php artisan test
Но в моем действии GitHub я получаю 500 ошибка в тесте, который ожидает только ответа 200.
Я внес много изменений, просматривал документацию и даже использовал искусственный интеллект.
Многие инструкции в моем сценарии конвейера являются частью моих исследовательских усилий.
Я новичок, поэтому, возможно, я что-то упускаю, но у меня нет идей.
Я Я новичок на этой платформе и не уверен, уместно ли делиться ссылкой на мой репозиторий, но вот она: https://github.com/Green-Blind/PhoenixPedia
Я несколько раз пытался изменить сценарий моего конвейера действий GitHub.
Сначала я пытался использовать сервисы вместо настройки docker-compose.
Затем я гарантировал, что файлы .env.example и laravel.conf.example были правильно скопированы в .env и laravel.conf.
Я использовал «cat», чтобы проверить имеющуюся информацию.< /p>
Я изменил скрипт для отображения журналов контейнера, а также поэкспериментировал с разрешениями на чтение и запись файлов.
Я попробовал использовать ту же версию docker-compose, что и на моем компьютере.
Я также пытался принудительно выполнить миграцию на случай, если она не была применена должным образом.
Я добавил различные паузы, чтобы убедиться, что мой Файл init.sh может завершиться.
Я действительно застрял в этом вопросе.
Подробнее здесь: https://stackoverflow.com/questions/787 ... pplication