0

TeamCity 8 を使用して Web サイトの CI のセットアップに取り組んでいます。 Web サイトの場合、フォルダー全体をコピーするだけなので簡単です。

ただし、SQL の更新については、リリースごとに別のフォルダーが作成されるように設定しています。例えば:

db
  update
    001
    002
    003
    ...
    018

そのため、最後のフォルダーの変更のみを監視するようにバージョン管理設定ステップを設定する方法を理解しようとしています。最悪の場合、理論的には最後のフォルダーのみを変更する必要があるため、更新ツリー全体の変更を監視することもできます。

ただし、最後のフォルダーを指す方法を考え出すと、a) 前のフォルダーへの誤った変更によるビルドのトリガーが防止され、b) 毎回スクリプトを実行するための単一のローカル パスが許可されるため、よりクリーンになります。実行するパスを決定するための別のロジック)。

ただし、これは不可能な場合があるため、コミュニティに連絡してください。重要であれば、VCS は Git/Github です。

4

2 に答える 2

0

次のような構造を行うことができます。

db
  update
    001
    002
    003
    004
    ...
    current

次に、現在のフォルダー内は次のようになります。

004-Script-1.sql
004-Script-2.sql
004-Script-3.sql

次に、TC ビルドはフォルダー内の任意のスクリプトを実行しcurrent、名前の最初の部分に基づいてスクリプトを対応するフォルダーに移動します。次の順序で行う必要があります。

  1. フォルダーが存在しない場合は作成します。
  2. ファイルを正しいフォルダに移動します
  3. git pull を実行し、変更されたすべてのファイルをコミットしてプッシュします

これは、その環境でスクリプトを複数回再実行することはなく、コミッターは正しい名前の構文に従って実行される現在のフォルダーにファイルをコミットしてプッシュするだけであることを前提としています。そうしないと、あらゆる種類のランダムなフォルダー名になってしまう可能性があります。

または、bash を使用してそのフォルダー内の最上位のフォルダー名を見つけ、その中のすべてを実行することもできます (以下では、アップロード ディレクトリにいることを前提としています)。

$ ls
001    002    003    004    005    026    124    204
$ LAST=`exec ls | sed 's/\([0-9]\+\).*/\1/g' | sort -n | tail -1`
$ echo $LAST
204

これは、最上位のフォルダー内のすべてが実行されると想定し、ロジックを操作しない限り再実行します。

于 2013-10-16T23:01:28.483 に答える