如何用Docker容器迁移Jenkins CI/CD流水线至GitHub Actions?Dockerfile报错求助
从Jenkins CI/CD迁移到GitHub Actions(含Dockerfile错误修复)
一、修复Dockerfile的核心错误
你的报错集中在php:5.6-fpm阶段,以下是针对性修复方案:
1. 替换PHP 5.6的APT源
PHP 5.6已停止官方维护,默认源无法获取依赖,需替换为Debian Jessie归档源:
# FPM runner FROM php:5.6-fpm # 替换为可用的归档源 RUN echo "deb http://archive.debian.org/debian jessie main" > /etc/apt/sources.list && \ echo "deb http://archive.debian.org/debian jessie-updates main" >> /etc/apt/sources.list && \ echo "Acquire::Check-Valid-Until \"false\";" > /etc/apt/apt.conf.d/99no-check-valid-until WORKDIR /var/www RUN ls -la && apt-get update && \ apt-get install -y gnupg2 libzip-dev && \ docker-php-ext-install pdo_mysql zip && \ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2. 调整文件复制与权限顺序
先复制项目文件再设置权限,避免后续依赖复制覆盖权限配置:
# 先复制项目根文件 COPY . . # 再从多阶段构建中复制依赖 COPY --from=node /var/www/node_modules node_modules COPY --from=composer /var/www/vendor vendor # 设置存储目录权限 RUN chown -R www-data:www-data app/storage && \ chmod -R 775 app/storage
3. 优化Artisan命令执行逻辑
构建阶段通常无.env配置文件,需添加条件判断或跳过优化命令:
# 仅在存在.env文件时执行框架优化,或直接移除这两步(建议在容器启动时执行) RUN if [ -f .env ]; then \ php artisan clear-compiled && \ php artisan optimize; \ fi
4. 简化Composer构建阶段
利用官方composer:1.8.4镜像的内置环境,简化依赖安装流程:
FROM composer:1.8.4 as composer WORKDIR /var/www # 先复制锁文件,利用Docker缓存 COPY composer.json composer.lock* ./ USER www-data RUN composer install \ --no-interaction \ --no-plugins \ --no-scripts \ --prefer-dist \ --no-autoloader # 复制代码后生成自动加载文件 COPY app app RUN composer dump-autoload
二、配置GitHub Actions流水线
创建.github/workflows/cd.yml文件,替代Jenkins流水线的构建、测试、推送流程:
name: CI/CD Pipeline # 触发条件:推送到主分支或PR到主分支 on: push: branches: [ main, master ] pull_request: branches: [ main, master ] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 初始化Docker Buildx uses: docker/setup-buildx-action@v3 - name: 构建Docker镜像 run: docker build -t my-app:${{ github.sha }} . - name: 运行项目测试(示例) run: docker run --rm my-app:${{ github.sha }} php artisan test # 可选:推送镜像到Docker仓库 - name: 登录Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - name: 推送镜像到仓库 run: | docker tag my-app:${{ github.sha }} your-docker-account/my-app:${{ github.sha }} docker tag my-app:${{ github.sha }} your-docker-account/my-app:latest docker push your-docker-account/my-app:${{ github.sha }} docker push your-docker-account/my-app:latest
内容的提问来源于stack exchange,提问作者JohnKas72
相关产品推荐
相关产品推荐

