我在 GitLab CI 中有以下設定。我有一個腳本,用于使用 php、composer 和 npm 命令構建我的應用程式。
我想用單個Dockerfile.
這是腳本:
#!/bin/bash
if [ "$APP" = "webapp" ]; then
docker exec -t cozact_app composer install && \
docker exec -t cozact_app php artisan down && \
docker exec -t cozact_app php artisan migrate --force && \
docker exec -t cozact_app php artisan storage:link && \
docker exec -t cozact_app php artisan droit:run && \
docker exec -t cozact_app npm install;
fi
if [ "$APP" = "webapp" ] && [ "$ENV" = "test" ]; then
docker exec -t cozact_app npm run dev && \
docker exec -t cozact_app php artisan up;
fi
if [ "$APP" = "webapp" ] && [ "$ENV" = "preprod" ]; then
docker exec -t cozact_app npm run production && \
docker exec -t cozact_app php artisan up;
fi
if [ "$APP" = "webapp" ] && [ "$ENV" = "prod" ]; then
docker exec -t cozact_app npm run production && \
docker exec -t cozact_app php artisan up;
fi
#!/bin/sh
composer install && \
php artisan down && \
php artisan migrate --force && \
php artisan storage:link && \
php artisan droit:run && \
npm install
if [ "$var" = "test" ] ; then
npm run dev && \
php artisan up;
else
npm run production && \
php artisan up;
fi
uj5u.com熱心網友回復:
您可以使用以下 Multi-stage Dockerfile,并將其適應您的用例。
ARG APP_ENVIRONMENT=dev
FROM composer:latest as vendor
COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install && \
php artisan down && \
php artisan migrate --force && \
php artisan storage:link && \
php artisan droit:run && \
FROM node:latest as frontend
RUN mkdir -p /app/public
COPY package.json webpack.mix.js package.lock /app/
COPY resources/assets/ /app/resources/assets/
WORKDIR /app
RUN npm install && \
npm run $APP_ENVIRONMENT
FROM php:7.2-apache-stretch
COPY . /var/www/html
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY --from=frontend /app/public/js/ /var/www/html/public/js/
COPY --from=frontend /app/public/css/ /var/www/html/public/css/
COPY --from=frontend /app/mix-manifest.json /var/www/html/mix-manifest.json
這個 Dockerfile 由 3 個階段組成:
- 供應商:它獲取composer包并運行php artisan命令(我不是laravel專家。所以請確保只保留
php artisan應該在構建期間而不是在運行期間運行的php artisan命令。需要在運行期間運行的命令應該去在一個CMD或ENTRYPOINT最后一個階段) - 前端:獲取 JavaScript 檔案,下載包并構建靜態檔案
- 運行階段的最后一個階段,它復制影像中的代碼并從早期階段獲取前端和供應商檔案。
Dockerfile 接受一個構建引數
APP_ENVIRONMENT,您可以在 CLI 中傳遞該引數來控制您正在構建的環境。
然后gitlab-ci.yml你可以運行一個
docker build --build-arg APP_ENVIRONMENT=production .
在您身上,gitlab-ci.yml您將擁有以下內容:
job:
variables:
DEPLOY_VARIABLE: "default-deploy"
rules:
- if: $CI_COMMIT_REF_NAME == "dev"
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables: # Override DEPLOY_VARIABLE defined
API_ENVIRONMENT: "production" # at the job level.
script:
- docker build -t --build-arg API_ENVIRONMENT=${API_ENVIRONMENT} "some-tag" .
uj5u.com熱心網友回復:
這是 gitlab-ci 中 composer install 顯示的問題
此問題與 composer.json 檔案中提到的部分有關,我確實對其進行了評論以使其對我有用,但我不知道是否會由于此省略而導致任何進一步的問題
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455315.html
標籤:码头工人 码头工人撰写 dockerfile 开发运维 gitlab-ci
上一篇:同一應用程式的不同實體的集成測驗
下一篇:Gitlab-ci運行mysqldocker并將其連接錯誤ERROR2003(HY000):Can'tconnecttoMySQLserveron'localhost'(
