Jef*_*ave 3 gitlab gitlab-pages
我有一个在 GitLab Pages 上托管的普通 JavaScript 应用程序。最近,我一直在进行更改和错误修复,这些更改和错误修复已经破坏了网站,直到推送更改后我才注意到。
为了减少用户遇到错误的机会,我想在单独的文件夹中发布两个站点:
public/:master分支; 官方网站public/staging/:staging分支; 每晚构建我希望它们对应于两个不同的分支:master和staging
阅读GitLab CI for GitLab Pages 后,听起来这甚至是不可能的。我希望我读错了。
default:
image: node:latest
test:
stage: test
script:
- npm install
- node test.js
only:
- staging
- master
staging:
stage: deploy
environment: staging
script:
- mkdir -p public/staging
- cp -r www public/staging
artifacts:
paths:
- public
only:
- staging
pages:
stage: deploy
environment: production
script:
- mkdir -p public
- cp -r www public
artifacts:
paths:
- public
only:
- master
Run Code Online (Sandbox Code Playgroud)
这可能吗?是否可以从两个不同的分支部署两个不同的文件夹?
有趣的是,可以从任何分支机构发帖,但不能从任何工作发帖。
为此,我需要进行两项更改:
GitLab 具有缓存文件夹的能力。通常,这用于通过缓存下载的驱动程序来加速构建。我没有理由不能使用它来存储public文件夹。这样,当我对 进行更改时staging,我会记住应用程序的状态root:
cache:
paths:
- public
Run Code Online (Sandbox Code Playgroud)
下一个技巧是将页面发布到适当的文件夹,具体取决于当前正在构建的分支。为此,我们可以查看GitLab CI/CD 环境变量;尤其:
CI_COMMIT_REF_SLUG: 当前分支CI_DEFAULT_BRANCH:默认分支(master)知道这两个值后,我们可以做一些事情bash来确定将内容写入的正确位置。
pages:
stage: deploy
script:
- dir="$CI_COMMIT_REF_SLUG"
- if [ "$CI_COMMIT_REF_SLUG" == "$CI_DEFAULT_BRANCH" ]; then dir=""; fi;
- dir="public/$dir"
- echo "Deploying to $dir"
- mkdir -p $dir
- cp -r www $dir
artifacts:
paths:
- public
only:
- staging
- master
Run Code Online (Sandbox Code Playgroud)
不要忘记将页面限制为仅staging和master。
警告
我对此并不满意。
我认为最好将缓存维护在完全不同的地方,并在稍后阶段将它们复制进去,但每次都完全重写公共文件夹。
当前的解决方案会随着时间的推移而变得臃肿,但基本思想是合理的。
| 归档时间: |
|
| 查看次数: |
5712 次 |
| 最近记录: |