Laravel-Ci.md
Translated by ChatGTP
Laravel ci
範例專案:Laravel-crawler
docker-compose.yml
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
command: bash -c "php artisan serve --host=0.0.0.0 --port=8998 & npm run dev"
ports:
- 5174:5174
- 8998:8998
networks:
- crawler_network
volumes:
- .:/application
depends_on:
- mysql
mysql:
image: mysql
ports:
- 3308:3306
networks:
- crawler_network
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
MYSQL_DATABASE: laravel
volumes:
- mysql_data:/var/lib/mysql
networks:
crawler_network:
volumes:
mysql_data:
Dockerfile
FROM php:8.1.0
# Add docker php extension installer script
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions \
&& install-php-extensions @composer \
calendar \
exif \
ffi \
mysqli \
pdo \
pdo_mysql \
gd
ENV NODE_VERSION=16.13.0
RUN apt install -y curl
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
WORKDIR /application
.gitlab-ci.yml
image: docker
services:
- docker:dind
variables:
CI_IMAGE: $CI_REGISTRY_IMAGE/dave-test-image:latest
GITLAB_REGISTRY_USERNAME: gitlab+deploy-token-1611692
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: laravel
stages:
- build
- test
build_job:
stage: build
only:
variables:
- $CI_COMMIT_MESSAGE =~ /build-image/
- $CI_COMMIT_TAG =~ /build-image/
before_script:
- docker login $CI_REGISTRY -u $GITLAB_REGISTRY_USERNAME -p $GITLAB_REGISTRY_PASSWORD
script:
- docker build -t $CI_IMAGE .
- docker push $CI_IMAGE
test_job:
stage: test
image: $CI_IMAGE
services:
- mysql:8.0
variables:
MYSQL_ROOT_PASSWORD: laravel
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
script:
- bash scripts/gitlab-ci.sh
- composer install
- php artisan key:generate
- php artisan optimize
- php artisan migrate:install
- php artisan migrate
- php artisan test
gitlab-ci.sh
執行需要部署此專案所需的任何內容,例如這裡我需要為 Laravel 專案建立一個 .env
檔案。
cat <<EOT >> .env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=laravel
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
EOT
可以複製 Git 中的檔案(例如
.env-gitlab
),並使用腳本來複製它,如果需要放置令牌和密碼等機密信息,應該放置於 Gitlab CI 變數中。
Gitlab runner 設定
使用 Docker runner 執行 Git 專案,並使用 Docker in Docker 建置映像檔,安裝相關設置並運行測試,如果測試通過,則可以看到管線成功,如果測試未通過,則管線失敗。