Gitlab CI替换文件

时间:2018-06-12 07:35:53

标签: regex gitlab

我们有时很难为客户在缓存时更新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

有人可以帮助我或想出更好的主意吗?

1 个答案:

答案 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