web-dev-qa-db-ja.com

すべてのアーティファクトをS3バケットのルートに配置するAWS Codebuild

すべてのファイルを「dist」フォルダーに配置するプロジェクトをビルドして、CodeBuildで実行しています。 「dist」内のすべてのファイルとフォルダーをs3バケットのルートに配置しようとしていますが、それを機能させる方法を理解できません。

私の「dist」フォルダは次のようになります。

- index.html - somecssfiles.css - fonts/ - - some fonts or w/e - js/ - - some javascript files

いろいろなことを試しましたが、s3バケットのルートに「dist/*」をドロップするだけではうまくいきません。これがbuildspec.ymlファイルのartifactsプロパティの現在の反復です:

artifacts: files: - '*' discard-paths: yes base-directory: 'dist'

おそらくうまくいくと思いましたが、フォルダは無視されます。読んでくれてありがとう。

8
Xylude Xaalud

私は最近これを理解したばかりなので、私が間違っている場合は専門家が私を許してください。

"discard-paths: yes"は、ディレクトリ構造を破棄するものです。基本的に、アーティファクトセットをフラット化します。 (私と同じように)アーティファクトフォルダまでのパスまでのみを破棄する場合は、その完全パスを[base-directory]フィールドに入力します。

繰り返しますが、この部分についてはわかりませんが、CodeBuildにアーティファクトにサーバー側の暗号化を適用しないように指示できないようです。つまり、ユーザーが閲覧できるようにするWebサイトの場合は、そうではありません。少なくとも箱から出して動作するように。最終的に、コードビルドのアーティファクトセクションを使用する代わりに、次のpost_buildコマンドを追加しました。

コマンド:- aws s3 sync my/artifact/path/ s3://my-bucket-name/

編集:作成してAmazonのECRに追加したDockerイメージを使用して構築しています。そのコマンドを実行できるようにするには、イメージにAWS CLIをインストールする必要がありました。

6
Lucas Newman

欠けていると思います-明確ではありませんが、次のアーティファクトを含むコードビルドテンプレートでパスを指定する必要があります。

_artifacts:
  files:
    - '**/*'
  base-directory: 'dist'
_

そして、コードビルドプロジェクトの「アーティファクト」セクションで、S3バケットを通常どおりに指定し、「オプション」の名前パラメーターを_/_に追加します。

これにより、出力がS3ディレクトリのルートに設定されます-参照 https://docs.aws.Amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name

If type is set to S3, this is the name of the output artifact object. If you set the name to be a forward slash ("/"), the artifact is stored in the root of the output bucket.

16
abbottdev