构建和部署失败
build & deploy failure
我们正在使用 Nunjucks
和 GitLab
来创建和部署我们的项目网站。
直到一个星期前,都没有问题,但突然发现网站的更改在构建和部署后无法生效。
一旦我们修改了某些内容,我们就会 运行 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 日期由于某种原因没有更改,这通常会发生...
我们正在使用 Nunjucks
和 GitLab
来创建和部署我们的项目网站。
直到一个星期前,都没有问题,但突然发现网站的更改在构建和部署后无法生效。
一旦我们修改了某些内容,我们就会 运行 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 日期由于某种原因没有更改,这通常会发生...