0

私は Python と Django にあまり詳しくありません。継続的インテグレーションのサーバーとして Jenkins を使用しています。しかし、Jenkins がリポジトリのクローンを作成すると、一部のリビジョンが省略されます (これは自動プロセスです)。テスト/本番目的でパッケージをビルドする必要がある場合、Mercurial サーバー (リポジトリ) で確認できるのとまったく同じリビジョン番号でマークする必要があります。ファブリックを使用しています。1 つのスクリプトで Fabric と Python を組み合わせようとしました (Python の Paramiko を使用して、サード パーティの Mercurial サーバーに接続し、適切なリビジョン番号を取得します)。リビジョンは、最後のコミットの日付として、ローカル サーバー上の Jenkins が作成したパッケージから取得されます。それは簡単でした:

pipe = subprocess.Popen(
    ['hg', 'log', '-l', '1', '--template', '{date|isodatesec}', env.repo_dir],
    stdout=subprocess.PIPE,
)

しかし、問題は Mercurial サーバーからリビジョン番号を取得することです。私はもう試した:

stdin, stdout, stderr = ssh_conn.execute('hg log -l 1 --date /"%s to %s/" --template {rev}')

...しかし、期待される結果はありません。

4

2 に答える 2

1

ただ汚い考え:

  • ログで使用するための正しい日付を取得し、それらを正しい形式で提供する場合 (「参考文献」を参照hg help dates) (ところで、単一のログ レコードは単に "
  • 私の作業コマンドとあなたの " chars using and escaping. JFYI、テスト済み (Win 側、cmd-shell) コマンドとの違いはわずかです。

hg log -l 1 --date "Sun Oct 30 10:16:00 2011 +0600 to Sun May 27 19:55:34 2012 +0600" --template "{rev}"

38

(日付は「そのまま」ログ出力から取得されました。テンプレートの末尾の \n もゲームをプレイする可能性があります-私は今問題を抱えて考えています)

ノート:

-R を指定しない hg コマンドは、$PWD が Mercurial リポジトリの場合にのみ機能します。残念ながら、〜はリポジトリの場所ではありません

于 2013-01-11T14:26:21.913 に答える
0

より良い修正は、Jenkins クローンを変更してすべてを取得することです。あなたが言った:

しかし、Jenkins がリポジトリのクローンを作成すると、一部のリビジョンが省略されます (これは自動プロセスです)。

代わりに Jenkins にすべてのクローンを作成してもらいます。長い時間がかかるのは 1 回だけです。その後、jenkins のロジックを次のようにします。

hg pull                   # get everything new
hg update XXXXXXXXXX      # update to the desired revision
./build VERSION=$(hg id)  # do a parameterized build

リモートの mercurial リポジトリからクローン/プル以外のものを取得しようとしても、その複雑さに見合う価値はほとんどありません。

于 2013-01-11T14:54:44.797 に答える