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

如何将GitLab Runner构建产物部署至宿主机Nginx目录

解决GitLab Runner容器内build文件夹复制到宿主机Nginx的问题

1. 先解决找不到build文件夹的核心原因

GitLab Runner的每个Job都是在独立临时容器中运行的,build阶段生成的build/文件夹仅存在于该Job的容器内部,直接在宿主机上自然找不到。要把文件同步到宿主机,必须通过容器目录挂载的方式让Runner容器能直接读写宿主机的Nginx目录。

2. 配置GitLab Runner容器挂载宿主机Nginx目录

启动GitLab Runner容器时,添加宿主机Nginx网页根目录的挂载参数,让容器内的指定路径与宿主机Nginx目录绑定:

docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /usr/share/nginx/html:/runner-nginx-html \  # 宿主机Nginx目录映射到容器内路径
  gitlab/gitlab-runner:latest

替换/usr/share/nginx/html为你实际的宿主机Nginx网页根目录即可。

3. 调整流水线配置完成部署

方案一:新增独立部署阶段(推荐,分离构建与部署逻辑)

修改你的.gitlab-ci.yml,新增deploy阶段并依赖build阶段的产物:

stages:
  - test
  - build
  - test2
  - deploy  # 新增部署阶段

Unit testing:
  stage: test
  script:
    - npm ci
    - npm run test-all
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'

Building and deploy:
  stage: build
  script:
    - npm ci
    - npm run build
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  artifacts:
    paths:
      - build/
    expire_in: 1 week

Auto tests:
  stage: test2
  script:
    - apt-get update
    - apt-get install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb -y
    - cd e2e
    - npm ci
    - npx cypress run
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  artifacts:
    paths:
      - e2e/cypress/screenshots
      - cypress/screenshots
    expire_in: 1 week
  allow_failure: true

Deploy to Nginx:
  stage: deploy
  script:
    - rm -rf /runner-nginx-html/*  # 清空Nginx目录原有内容(可选,按需调整)
    - cp -r build/* /runner-nginx-html/  # 复制build产物到挂载的Nginx路径
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  dependencies:
    - Building and deploy  # 明确依赖build阶段的产物,确保能获取build文件夹

方案二:直接在build阶段完成部署

如果不需要独立部署阶段,可在build阶段的脚本末尾直接添加复制命令:

Building and deploy:
  stage: build
  script:
    - npm ci
    - npm run build
    - rm -rf /runner-nginx-html/*
    - cp -r build/* /runner-nginx-html/
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  artifacts:
    paths:
      - build/
    expire_in: 1 week

4. 权限问题处理

如果执行复制命令时出现权限拒绝:

  • 调整宿主机Nginx目录权限为755,确保容器内用户可读写:sudo chmod -R 755 /usr/share/nginx/html
  • 或修改宿主机目录的所属用户/组,与Runner容器内运行用户一致(默认gitlab-runner用户)

内容的提问来源于stack exchange,提问作者Igor Levin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:33:12