You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:14:52