2016-12-09 1 views
0

Я использую Browserify для того, чтобы связать мой JS, прежде чем нажимать на мой ретубот Bitbucket, а затем использовать Codeship для тестирования сборки и нажатия на Heroku.Detect Browserify broken build перед тем, как совершать/развертывать

Я использую Node/Express для обслуживания своего приложения, а в моем index.jade у меня есть <script />, указывающий на /dist/index.js.

Несколько раз я ошибочно нажал свой последний код на сломанный вывод Browserify, т.е. содержание /dist/index.js будет:

console.error('cannot find module XYZ')

И я развертывается это мой живой приложение. UH OH.

Я поставил в очень зачаточном тест, который получает бежал на Codeship, который я надеюсь, должны избежать этого в будущем:

var exit = function() { 
    process.exit(1) 
} 
var success = function() { 
    process.exit(0) 
} 
var fs = require('fs') 

var index 
try { 
    index = fs.readFileSync(__dirname + '/../public/dist/index.js', 'utf-8') 
} catch (e) { 
    exit() 
} 

if(!index){ 
    exit() 
} 

var invalid = index.length < 1000 

if(invalid){ 
    return exit() 
} 

success() 

Я просто проверка, если файл существует, и что содержимое файла составляет более 1000 символов.

Не уверен, есть ли на это конкретный ответ, но разумный подход к тому, чтобы убедиться, что сломанный вывод Browserify никогда не получает/развертывается?

ответ

1

Я раньше не использовал Codeship, но использовал другие подобные услуги. Вы не описали, как вы нажимаете - я собираюсь предположить, что вы используете git.

С git это становится легким: напишите крючок pre-push, который прервет нажатие, если что-то не удастся. Вот пример из проекта, я работаю над:

#!/bin/bash 

# the protected branches 
# 
protected_branches='develop master' 

# Check if we actually have commits to push 
# 
commits=`git log @{u}..` 
if [ -z "$commits" ]; then 
    exit 0 
fi 

current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') 

# is the current branch in the list of protected branchs? if so, then run the 
# tests 
# 
if grep -q "$current_branch" <<< "$protected_branches"; then 
    # move into the dir containing the tests 
    # 
    pushd $(git rev-parse --show-toplevel)/contract >/dev/null 
    gulp test 
    RESULT=$? 
    # back to whatever dir we were in before 
    # 
    popd >/dev/null 
    if [ $RESULT -ne 0 ]; then 
     echo "-------- Failed Tests" 
     exit 1 
    fi 
fi 
exit 0 

Это модифицированная версия сценария я нашел в this blog post.

В основном, этот скрипт проверяет, не нажимаю ли я одну из защищенных ветвей и, если да, запускает мои тесты. Если эти тесты терпят неудачу, то нажатие прерывается.

Вы могли бы, конечно, изменить условия, при которых прерыв прерван. Например, напишите код для проверки &, если ваш комплект browserify верен и сбой, если это не так. Вы упомянули о проверке длины вашего пакета - возможно, что-то вроде length=$(ls -l | cut -c 30-34), а затем проверьте значение длины (извините, я не настоящий гуру bash).

Преимущество такого подхода заключается в том, что испорченный код никогда не покидает вашу локальную машину - вы запускаете тест локально, и если он терпит неудачу, код не будет нажат. Вероятно, это будет быстрее, чем работать в сервисе Codeship.

Смежные вопросы