2016-12-09 1 views
0

Browserifyを使用して私のJSをバンドルしてからBitbucketリポジトリにプッシュし、次にCodeshipを使用してビルドをテストし、Herokuにプッシュします。コミット/デプロイ前に壊れたビルドをブラウザーで検出する

私は、アプリケーションを提供するためにNode/Expressを使用しています。index.jadeには、/dist/index.jsを指している<script />があります。

私は数回、私の誤って最新のコードを壊れたBrowserifyの出力、すなわち、 /dist/index.jsの内容は次のようになります。

console.error('cannot find module XYZ')

そして私は私のライブのアプリにこれを展開してきました。ええとああ。

私は将来的にこの問題を回避する必要があります願ってい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で見つかったスクリプトの修正版です。

基本的に、このスクリプトは、保護されているブランチの1つをプッシュしているかどうかを確認し、そうであればテストを実行します。これらのテストが失敗すると、プッシュは中断されます。

もちろん、プッシュがアボートされる条件を変更することもできます。たとえば、&を確認するコードを書き、browserifyバンドルが正しいかどうかを確認し、そうでない場合は失敗します。 length=$(ls -l | cut -c 30-34)のようなバンドルの長さをチェックしてから、長さの値をチェックしてください(申し訳ありませんが、私は実際のbashの達人ではありません)。

この方法の利点は、混乱したコードがローカルマシンを離れないことです。テストをローカルで実行し、失敗した場合はコードがプッシュされません。これは、Codeshipのサービスで実行するよりも高速になる可能性があります。

関連する問題