読者です 読者をやめる 読者になる 読者になる

rsyncでエラーが出たけどコピーはできてる

Jenkinsで成果物(artifact)をrsyncでコピーしようと思ったらエラーでJOBが失敗

  • ファイルはコピー出来てる。
    • しかし、rsyncの戻り値がエラーなのでJOBのステータスが失敗になってしまう。
  • Jenkinsから実行しているrsyncは以下の通り。
$ rsync -acv --delete _site/ www.example.com:/var/www/html/.

エラーは、

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]

とか、

rsync: failed to set times on "/var/www/html/.": Operation not permitted (1)

など。

  • おそらくコピーしているユーザが/var/www/html以下のパーミッションかオーナーを変えるときに怒られているのだろう。
    • でも、パーミッションもオーナーもちゃんと変わっているようにみえるのだが。
    • rootでやるのもなんかヤダし。

対応

  • ぐぐったらrsyncオプション変えるというのがあった。
$ rsync -rlOtcv --delete _site/ www.example.com:/var/www/html/.
  • これで上手くいきました。
    • -a-rlptgoDと等価なので-pパーミッション維持、-gグループ情報維持、-oオーナー情報維持、-Dデバイス再作成を落として、-Oディレクトリのタイムスタンプを保持しないを付けて実行してます。