Sakura: appveyor で clone に失敗する

Created on 2 Jun 2018  ·  16Comments  ·  Source: sakura-editor/sakura

34 で直したはずだが、直っていない。

https://ci.appveyor.com/project/sakuraeditor/sakura/build/1.0.49

Build started
Set-WinSystemLocale ja-JP
Start-Sleep -s 5
git clone -q --branch=master https://github.com/sakura-editor/sakura.git C:\projects\sakuraeditor\sakura_1.0.49
fatal: destination path 'C:\projects\sakuraeditor\sakura_1.0.49' already exists and is not an empty directory.
Command exited with code 128

CI 🐛bug🦋

All 16 comments

😭

ほぼ分かってない人ですが対策案考えてみました。

こういういう流れな認識です。

  • appveyorの実行がたまに失敗する。(原因はgit cloneのclone先が空でないため)
      ↓
  • git cloneのclone先が毎回変わるように設定変更した
      ↓
  • やっぱりたまに失敗することが分かった   ←ココ

    で、エラー発生時のログはこんな感じになってる認識です。

Build started
Set-WinSystemLocale ja-JP
Start-Sleep -s 5
git clone -q --branch=master https://github.com/sakura-editor/sakura.git C:\projects\sakuraeditor\sakura_1.0.49
fatal: destination path 'C:\projects\sakuraeditor\sakura_1.0.49' already exists and is not an empty directory.
Command exited with code 128

よくよく考えてみると、おかしな点があります。
git cloneする前に実行される3行は一体どこから来ているんでしょうか。
appveyor.yml はリポジトリに入っているファイルなのでgit cloneが終わるまで見られません。
見られないはずなんです。

appveyor.ymlが見られてるということは、1回git cloneしてるってことです。
同じ場所を指定して2回目のgit cloneをしたら当然コケます。
コケないほうがおかしいです。

じゃあどうして他のプロジェクトでは問題なくビルドできているんでしょうか・・・
ここからは憶測です。

appveyorにはWebページでビルド環境を設定するインターフェースがあります。
ここには初期化処理(=git cloneする前に行う処理)の指定ができる項目があります。

もし仮に、次のような手順でビルドを行っているとしたら辻褄が合います。

  • ビルド要求が来たらプロジェクト設定(Webから指定したもの)でVMを起動する。
  • git cloneしてappveyor.ymlを取得し、ビルド設定を確認する。
    このときプロジェクト設定とappveyor.ymlの内容が異なる場合、初期設定をやり直す。
  • プロジェクトをビルドして成果物を作成する

この仮定が正しいとすれば、Webの指定とappveyor.ymlの指定を合わせればgit cloneの問題は起きないことになります。

appveyor.yml はリポジトリに入っているファイルなのでgit cloneが終わるまで見られません。
見られないはずなんです。
appveyor.ymlが見られてるということは、1回git cloneしてるってことです。
同じ場所を指定して2回目のgit cloneをしたら当然コケます。
コケないほうがおかしいです。

clone するのは必須ではないみたいです。
https://teratail.com/questions/14124

clone するのは必須ではないみたいです。
https://teratail.com/questions/14124

wgetだったとして、どこにダウンロードするんでしょうか。
こういう感じのコマンドになるんじゃないですかね?

$> wget -o C:\projects\sakuraeditor\sakura_1.0.49\appveyor.yml https://raw.githubusercontent.com/sakura-editor/sakura/master/appveyor.yml

エラー原因で言われている状況と一致するように見えませんか?

destination path 'C:\projects\sakuraeditor\sakura_1.0.49' already exists and is not an empty

ぼくが言ってるのは可能性の話です。
誰かが答えを持ってるならその通りにしたらいい。
そうじゃないなら可能性を探して潰していくしかないと思います。

確かに .yml 取得のロジックが謎なんですよね……。

それとは別件の話ですが、AppVeyor 実行タイミングが「ブランチ push時」と「PR 操作時」の2か所になっていたのを「ブランチ push時」の1か所のみに絞りました。
なんだか PR 修正時に毎回2回ビルドが走っているのが気になっていたので。

質問しました。
appveyor/ci#2433

返事返ってきた。

Can you try adding another ‘Start-Sleep -s 5’ after the ‘Restart-Computer’ command to give enough time for the clone script to work as expected.

以下チケットが作成された。
appveyor/ci#2435

96 の対応後、ここしばらくは clone 失敗してないですよね。

対応は一旦完了したということでクローズしましょうか。
@m-tmatma さん的にも問題ないという判断であればクローズお願いします。

クローズしたとして、仮にその後また発生するようなことがあれば Reopen しましょう(発生しないことを祈る)

クローズしていいと思いますが、
クローズするタイミングで appveyor/ci#2433 もクローズして
同時に #151 を appveyor に報告しようと思います。

以下を登録しました。

  • appveyor/ci#2456 (#151 )
  • appveyor/ci#2457

以下をクローズしました。

  • appveyor/ci#2433

久々に発生したようなので再オープンします。

https://ci.appveyor.com/project/sakuraeditor/sakura/builds/20877767/job/pg93kigwcs6o7m3w

Build started
git clone -q https://github.com/sakura-editor/sakura.git C:\projects\sakura
git fetch -q origin +refs/pull/689/merge:
fatal: unable to access 'https://github.com/sakura-editor/sakura.git/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
Command exited with code 128

今後頻発しないようであれば何も対応せずに閉じてよいかも。

その後頻発していないようなので閉じておきます。

962 (#963) を対応する場合に、問題となってくるので再オープン

その後発生してないように思うので、閉じておきます。

Was this page helpful?
0 / 5 - 0 ratings