构建和部署失败

build & deploy failure

我们正在使用 NunjucksGitLab 来创建和部署我们的项目网站。

直到一个星期前,都没有问题,但突然发现网站的更改在构建和部署后无法生效。

一旦我们修改了某些内容,我们就会 运行 npm run gulp all 如果没有错误,我们会从 dist 文件夹中打开网页,看看是否一切正常。如果我们满意,我们提交并推送,这会自动触发 GitLab CI/CD 作业,几分钟后,实时网站会显示更改。

这是我们 .gitlab-ci.yml

中的代码
before_script:
  ##
  ## Run ssh-agent inside the build environment.
  ##
  - eval $(ssh-agent -s)

  ##
  ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store.
  ##
  - echo "$SSH_PRIVATE_KEY" | ssh-add - > /dev/null

  ##
  ## Create the SSH directory and give it the right permissions.
  ##
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh

  ##
  ## Add Host Keys.
  ##
  - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts

stages: 
  - build
  - deploy

prod_build:
  stage: build
  script:
    - echo "Build"
    - npm install --loglevel verbose
    - npm install natives@1.1.6
    - npm run gulp all
    - ls
  only:
    - master
  tags:
    - Sisyphus
  
prod_deploy:
  stage: deploy
  script:
    - echo "Deploy to webserver"
    - npm install --loglevel verbose
    - npm install natives@1.1.6
    - npm run gulp all
    - rsync -av dist/ blah@blahblah.com:/var/www/blah/ --delete
  allow_failure: false
  environment:
    name: deploy
  only:
  - master
  tags:
    - Sisyphus
  when: always

以上内容没有变化。过去一切都很好。所以,我们不知道为什么最近进程没有更新网站。

这是我们gulpfile.js

的内容
var gulp = require('gulp') ;
var watch = require('gulp-watch') ;
var nunjucksRender = require('gulp-nunjucks-render');
var rev = require('gulp-rev');
var revRewrite = require('gulp-rev-rewrite');
var gulpClean = require('gulp-clean');

function clean() {
  return gulp.src('dist', { read: false, allowEmpty: true })
  // Renders template with nunjucks.
  .pipe( gulpClean() )
}

function renderNunjucks() {
  // Gets .html and .nunjucks files in pages.
  return gulp.src('pages/**/*.+(html|njk)')
  // Renders template with nunjucks.
  .pipe(nunjucksRender({
      path: ['templates', 'pages']
    }))
  // Outputs files in app folder.
  .pipe( gulp.dest('dist') )
}

function copyStatic() {
    return gulp.src('public/**/*')
  .pipe( rev() )
  .pipe( gulp.dest('dist') )
  .pipe( rev.manifest() )
  .pipe( gulp.dest('dist') );
}

function RevRewrite() {
  const manifest = gulp.src('dist/rev-manifest.json');
  return gulp.src('dist/**/*')
  .pipe( revRewrite({ manifest }) )
  .pipe( gulp.dest('dist') );
}

gulp.task('clean', clean);
gulp.task('nunjucks', gulp.series('clean', renderNunjucks))
gulp.task('copy', gulp.series('clean', copyStatic));
gulp.task('rev-rewrite', gulp.series('nunjucks', RevRewrite));
gulp.task('all', gulp.series(clean, gulp.parallel(copyStatic, renderNunjucks), RevRewrite));

当然我们已经查看了 Jobs 日志文件以查看是否有任何错误或危险信号,但似乎一切正常,以 Job succeeded 消息结尾。

可能是什么原因?我们怀疑无法进行适当的清理,因为有时我们比较 dist 和实时网站的页面(通过检查它们)并意识到,例如 index.css 文件是空的,而它应该包含我们放入其中的 css 内容。

我们如何确定这是中断进程的更新还是rsync未同步和清理等...?

尝试在 rsync 命令的末尾添加 checksum

rsync -av dist/ blah@blahblah.com:/var/www/blah/ --delete --checksum

如果您的文件的大小 and/or 日期由于某种原因没有更改,这通常会发生...