如何将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
相关产品推荐
相关产品推荐

