LoginSignup
10
11

More than 5 years have passed since last update.

【Jenkins】s3cmdでJenkinsからAmazon S3にコンテンツを転送する

Last updated at Posted at 2015-03-10

概要

成果物をAmazon S3にバックアップとっておきたい時や、静的リソースをs3から配信したいといった場合に外部からs3を操作するといった状況が出てくると思います。
そんな時に使える「s3cmd」でjenkinsでビルドを設定してAmazon S3にコンテンツを転送してみました。

準備・必要なもの

・Jenkins
・Amazon S3バケット(バケット名)
・Amazon S3を操作できる権限を持ったIAMアカウント
(IAMアカウントのAccess KeyとSecret Key)

※バケットとIAMアカウントのつくり方はすっとばします。

s3cmdのインストール

yumからs3を操作するためのコマンド「s3cmd」をインストールします。


sudo yum --enablerepo epel install s3cmd

次に設定ファイルを作成します。


s3cmd --configure

Access KeyとSecret Keyの入力を迫られるので、
用意したものを入力する。
リージョンも聞かれるので、バケットで設定したリージョンを入力します。
あとは、全て飛ばしでEnter&yesで大丈夫だと思います。

終了するとホームに「.s3cfg」ファイルが作成されます。

Test access with supplied credentials? [Y/n]

最後の方で接続テストするか聞かれます。
yesとして「success」と表示されれば問題ないでしょう。

s3cmdのコマンド

では早速、いくつかコマンドを試していきます。

バケット参照


s3cmd ls


s3cmd ls s3://<バケット名>

バケットを参照できます
名前を指定すればバケット内を参照できます。

バケット作成


s3cmd mb s3://<バケット名>

バケットを作成できます。

容量計算


s3cmd du


s3cmd du s3://<バケット名>

バケットの容量を参照できます
名前を指定すればバケット内を容量を参照できます。

オブジェクトの転送

s3cmd put <オブジェクト名> s3://<バケット名>

指定したオブジェクトを指定したバケットに転送します。

Jenkinsからパブリッシュしてみる

コマンドを使えることがわかったので、今度はjenkinsから実行してみます。

いきなりジョブからビルド手順を作成してもいいのですが、
その前にjenkinsユーザーで一度コマンドをテストしときます。

jenkinsユーザーでs3cmdを実行

jenkinsのホームディレクトリに移動して、

cd /var/lib/jenkins
sudo su jenkins

からの

s3cmd ls

スクリーンショット 2015-03-10 11.16.47.png

エラーがでたよ(´・ω・`)

よく見てみると

/var/lib/jenkins/.s3cfg: None

なんで、jenkinsのホームディレクトリに「.s3cfg」を移動させます。
所有者も変更。

sudo mv /home/ec2-user/.s3cfg /var/lib/jenkins
chown jenkins:jrnkins /var/lib/jenkins/.s3cfg

再度、やってみます。

スクリーンショット 2015-03-10 11.36.56.png

成功した( ^ω^)

あとはjenkinsでシェルスクリプトを書くだけですね。

Jenkinsでジョブを設定する

新規にジョブを作成して、設定画面で「ビルド手順の追加」でビルドを追加します。
今回はワークスペースにあるリソースをs3に転送していきたいと思います。

スクリーンショット 2015-03-10 11.45.59.png

シェルスクリプトの欄にs3cmdを登録

s3cmd sync --delete-removed --acl-public $WORKSPACE/* s3://<バケット名>

-「sync」はs3と同期させる処理です。
-「--delete-removed」をつけるとミラーリングできます。

-「--acl-public」をつけると「Make Public」を行ってくれます。
-「$WORKSPACE」はJenkinsの環境変数で値は「/var/lib/jenkins/jobs/ジョブ名/workspace/」となります。

その他

-「--add-header」をつけることでアップロードしたファイルにヘッダを付与できます。
例えば「Cache-Control:max-age=3600」でCloudFront側でキャッシュする時間を3600秒(1時間)に指定できます。

Jenkinsでビルドを実行

コンソール出力でうまくいけば Done.!
s3に指定したオブジェクトが転送されてます。

確認してみましょう。

まとめ

とっても便利。Gitや他のサービスとガンガン連携させていきたいですね。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11