AWS CodePipelineを通すとsymlinkがテキストファイルになる件


はじめに

AWS CodePipelineはデフォルトでは、

  1. Source

  2. Build

  3. Deploy

の3ステージでCI/CDパイプラインを実行します。

上記のSourceステージのリポジトリにsymlinkがあった場合、それらはBuildステージの段階でただのテキストファイルに変化してしまうようです。

Sourceステージでの状態

以下は、Sourceステージ(CodeCommitあるいはGitHubリポジトリ)での状態です。
この段階ではsymlinkとなっています。

$ ls -l
-rw-r--r--  1 foo  bar  193 Nov 27 19:10 appspec.yml
-rw-r--r--  1 foo  bar    0 Nov 27 19:10 blank.txt
-rw-r--r--  1 foo  bar  108 Nov 27 19:10 buildspec.yml
lrwxr-xr-x  1 foo  bar    9 Nov 27 19:10 symlink.txt -> blank.txt # symlinkになっている

Buildステージでの状態

次に、Buildステージでの状態を見てみます。

具体的にはマネジメントコンソールのCodeBuildの画面での、このファイルです。
Sourceステージのリポジトリの特定のブランチ・コミットが、ZIPに固められてS3にアップロードされたもの、という理解です。

これをダウンロードして中身を見てみると、以下の通りsymlinkでは無くなっています。

$ ls -l
-rw-rw-r--  1 foo  bar  193 11 27 10:01 appspec.yml
-rw-rw-r--  1 foo  bar    0 11 27 10:01 blank.txt
-rw-rw-r--  1 foo  bar  108 11 27 10:01 buildspec.yml
-rwxrwxrwx  1 foo  bar    9 11 27 10:01 symlink.txt # symlinkではなくなっている

symlink.txtの中身は以下のようなテキストファイルになっています

symlink.txt
blank.txt

最後に

CodePipelineの仕様?なんでしょうか。

CodePipelineを使っていて、気になった点でした。