我们有时很难为客户在缓存时更新CSS / JS文件。我们发现的常见黑客是在我们的源代码中附加一个版本标签(style.min.css变为style.min.css?v = 123)。
我们希望将这一变化整合到我们已用于将存储库与托管网站的FTP服务器同步的Gitlab CI / CD管道中。
我想出了以下脚本(注意:我们正在使用docker:最新图片)
stages:
- deploy
before_script:
- apk update
- apk add lftp
deploy:
stage: deploy
script:
- sed -i -E 's/(\.css\?|\.css\")/\.css?v='$CI_JOB_ID'\&\"/g' templates/index.php
- sed -i -E 's/(\.js\?|\.js\")/\.js?v='$CI_JOB_ID'\&\"/g' templates/index.php
- lftp -c "set ftp:ssl-allow no; open -u $FTP_USER,$FTP_PASS $FTP_HOST; mirror -Rv ./ ./gitlab-ci-test --ignore-time --parallel=10 --exclude-glob .git* --exclude .git/"
only:
- master
这个工作正常,除非我们使用css / js文件,这些文件已经在他们的引用中有了某些内容。我想保留它,但是如何......
style.min.css应该变成style.min.css?v = ID(这已经与我上面包含的文件一起工作了)
style.min.css?x = y应该成为style.min.css?v = ID& x = y
有人可以帮助我或想出更好的主意吗?
答案 0 :(得分:0)
首先处理案例style.min.css?x=y
:
s/\.css\?/.css?v='$CI_JOB_ID'&/g
然后处理案例style.min.css
:
s/\.css([^?])/.css?v='$CI_JOB_ID'$1/g