実現したいこと
config.ymlを作成して、CircleCIでテストを自動で行えるよう設定したい。
最終的にはデプロイの自動化まで設定したい。
発生している問題・分からないこと
CircleCIのconfig.ymlファイルの作成手順について、教えていただきたいです。
Laravel学習中です。アプリケーションを作成し、AWS(EC2)にデプロイしました。テストファイルも作成済みです。
開発環境ではDocker(docker-compose.yml)を用いてphp、nginx、mysql、phpmyadminのコンテナを作成したので、これと同じような手順でビルドできれば良いかなと考えています。
具体的には以下の通りです。
- Docker Compose upでphpとmysqlのコンテナを作成(CIの環境ではnginx、phpmyadminは不要かと思いますので、省略)
- composer install
- .envファイルの設定(Environment Variablesで設定すべき?)
- アプリケーションキーの生成
- データベースのセットアップ
- テストの実行
現状Docker Compose upのところで、以下のようなエラーが発生しています。
FileNotFoundError: [Errno 2] No such file or directory: 'docker': 'docker'
[65] Failed to execute script docker-compose
エラーの解消も必要なのですが、そもそも環境構築の経験や知識がほとんどないので、全く的外れなものを作っているのではないかという気がしています。
大枠としてこのような作成手順で良いのかという観点でアドバイスいただけたらありがたいです。
よろしくお願いいたします。
該当のソースコード
config.yml
1version: 2.1 2 3jobs: 4 build: 5 docker: 6 - image: php:8.1-fpm 7 steps: 8 - checkout 9 10 # Dockerのセットアップ 11 - setup_remote_docker: 12 version: 20.10.7 13 14 # Docker Compose のインストール 15 - run: 16 name: Install Docker Compose 17 command: | 18 curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 19 chmod +x /usr/local/bin/docker-compose 20 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 21 22 # シンボリックリンクの確認 23 - run: 24 name: Verify Symbolic Link 25 command: | 26 if [ -L /usr/bin/docker-compose ]; then 27 echo "Symbolic link exists." 28 ls -l /usr/bin/docker-compose 29 else 30 echo "Symbolic link does not exist." 31 fi 32 33 # Docker Compose のパス確認 34 - run: 35 name: Check Docker Compose Path 36 command: | 37 if command -v docker-compose >/dev/null 2>&1; then 38 echo "Docker Compose is available in PATH" 39 which docker-compose 40 else 41 echo "Docker Compose is not available in PATH" 42 fi 43 44 # Docker Compose がインストールされているか確認 45 - run: 46 name: Check Docker Compose version 47 command: docker-compose --version 48 49 # Docker Compose プロジェクトの構築と起動 50 - run: 51 name: Docker Compose up 52 command: | 53 pwd 54 docker-compose -f docker-compose.yml up -d --build 55 56 # 依存関係のインストール 57 - run: 58 name: Install dependencies 59 command: docker-compose exec php composer install 60 61 # 環境変数ファイルのコピー 62 - run: 63 name: Copy .env 64 command: | 65 cp .env.example .env 66 67 # .envファイルの設定更新 68 - run: 69 name: Update .env for testing 70 command: | 71 sed -i 's/DB_HOST=127.0.0.1/DB_HOST=mysql/' .env && \ 72 sed -i 's/DB_DATABASE=laravel/DB_DATABASE=laravel_db/' .env && \ 73 sed -i 's/DB_USERNAME=root/DB_USERNAME=laravel_user/' .env && \ 74 sed -i 's/DB_PASSWORD=/DB_PASSWORD=laravel_pass/' .env 75 76 # アプリケーションキーの生成 77 - run: 78 name: Generate application key 79 command: docker-compose exec php php artisan key:generate 80 81 # データベースのセットアップ 82 - run: 83 name: Wait for MySQL 84 command: docker-compose exec php sh -c 'while ! mysqladmin ping -hmysql --silent; do sleep 1; done' 85 86 - run: 87 name: Run migrations 88 command: docker-compose exec php php artisan migrate --force 89 90 # PHPUnitテストの実行 91 - run: 92 name: Run tests 93 command: docker-compose exec php ./vendor/bin/phpunit 94 95workflows: 96 version: 2 97 build_and_test: 98 jobs: 99 - build 100
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
docker: - image:
environment: MYSQL_ROOT_PASSWORD: pass MYSQL_DATABASE: laravel MYSQL_USER: laravel
mysqlのイメージを追加すべき?またはdocker-compose.ymlにまとめて記述されているので追加は不要?
補足
Dockerfileとdocker-compose.ymlの内容は以下の通りです。
Dockerfile
FROM php:8.1-fpm COPY php.ini /usr/local/etc/php/ RUN apt update \ && apt install -y default-mysql-client zlib1g-dev libzip-dev unzip libpng-dev libjpeg-dev \ && docker-php-ext-configure gd --with-jpeg \ && docker-php-ext-install pdo_mysql zip gd RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/local/bin/composer \ && composer self-update WORKDIR /var/www
docker-compose.yml
version: '3.8' services: nginx: image: nginx:1.21.1 ports: - "80:80" volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf - ./src:/var/www/ depends_on: - php php: build: ./docker/php volumes: - ./src:/var/www/ mysql: image: mysql:8.0.26 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: laravel_db MYSQL_USER: laravel_user MYSQL_PASSWORD: laravel_pass command: mysqld --default-authentication-plugin=mysql_native_password volumes: - ./docker/mysql/data:/var/lib/mysql - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf platform: linux/amd64 phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=laravel_user - PMA_PASSWORD=laravel_pass depends_on: - mysql ports: - 8080:80 platform: linux/amd64