背景ファイルが削除またはGitのリビジョン間で変更を自動的インスタンス
から削除得ている私は、次のとジェンキンスによってトリガーセットアップを持っている - デプロイする
- ファイルはPhingのことにより調製され、 gitサーバと通信し、必要なgitリビジョンの間に別のビルドサーバで
git diff
を入れて、AWSコードデプロイメントを使わずに(私が思う限り)。 phingビルドはJenkinsによってトリガーされます。 - appspec.ymlファイルに動的に(リビジョンのgitの違いに基づいて)追加/変更されるファイルのみを追加します。私は追加するファイルのみを準備します。
/home/jenkins/deployment/cd_deploy/codebase/
にファイルを追加し、私はパスを指定しました.Jenkinsプロジェクトの "Advanced Project Options"の下にある "Use custom workspace"オプションのパスは/home/jenkins/deployment/cd_deploy/
です。 S3バケットにアップロードされます。 2つのgitリビジョン間で削除されたインスタンスからファイルを削除する必要があることに注意してください。 - Jenkinsは、アプリケーション名、設定したコード配布のデプロイメントグループに関する情報を使用してAWS Codedeployを起動します。
問題
私は動的に私が期待するように、しかし、妙に、あるファイルが削除されるように、EC2インスタンスに追加/修正なっているappspec.ymlファイルに追加したファイルをも削除されています。私は私のappspecファイルのbeforeInstallフックで書かれたファイルを削除するロジックがないことを確認しました。 beforeInstallフックにはbeforeInstall.shファイルしかありません。他のフックはありません。 appspecファイルからそのフックを削除すると、削除が停止します。
version: 0.0
os: linux
files:
{Pair of files dynamically generated}
- source: config/deployment_config.json
destination: /var/cake_1.2.0.6311-beta/deployment
permissions:
- object: .
pattern: "**"
owner: sandeepan
group: sandeepan
mode: 777
type:
- file
hooks:
BeforeInstall:
- location: beforeInstall.sh
が何らかの形で(私はgitlabともないgithubのを使用しています)と何とか削除するファイルに関する情報を取得し、私のGitのホスティングに話しAWS Codedeployです - ここに私のappspecファイルです。
更新
私は、後に観察されたものであっても、中央ビルドから.SH対応するファイル、すなわちbeforeInstall.sh、afterInstall.shなどをappspec.ymlファイルから完全にフック部分を除去し、削除した後サーバー(S3バンドルが準備されています)は、私のロジックとそれへの参照がインスタンスに送られないので、削除されるファイルは自動的に削除されます。
アップデート2
今日、私はGitのリビジョン間で変更されているファイルも自動的に削除得ていることがわかりました。 私は、appspec.ymlファイルを動的に準備するロジックを持っていました。私はいくつかのファイルを追加しないように修正しました。そこで、git diffにはいくつかのファイルがありましたが、appspecファイルにはありませんでした。その結果、彼らは削除されていますが、再出現しません。 デプロイメントの前にコードデプロイメントが自動的にクリーンアップを行っています。それをどうやって止めるの?カスタムクリーンアップロジックを追加したいと思います。beforeInstall.shの
アップデート3
コンテンツ -
OUTPUT="$(w | grep -Po '(?<=load average:)[^,]*')"
rm -f /var/cake_1.2.0.6311-beta/deployment/deployment_config.json
path="$PWD"
php $path"/deployment-root/"$DEPLOYMENT_GROUP_ID"/"$DEPLOYMENT_ID"/deployment-archive/beforeInstall.php" ${OUTPUT}
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_hiphop_error /mnt/log/hiphop/error_`(date +'%Y%m%d')`.log #Just run a nagios check, so that counter corresponds to the line in the log corresponding to current timestamp/instant. Do not care about output. Note that we are not even looking for error hinting keywords (and hence not using -p because it needs to be used alongwith), because all we need to care about here is incrementing the nginx counter.
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_`(date +'%Y%m%d')`_`(date +'%H')`.log #Just run a nagios check, so that counter corresponds to the line in the log corresponding to current timestamp/instant. Acceptable http codes are also not being read from deployment_config.json.
printf "\n `date +%Y-%m-%d:%H:%M:%S` End of beforeInstall.sh" >> /var/cake_1.2.0.6311-beta/deployment/deployment.log
exit 0
そしてbeforeInstall.phpのコンテンツの上から呼び出される - CodeDeployが展開するように設計されて
<?php
file_put_contents('/var/cake_1.2.0.6311-beta/deployment/deployment.log', "\n ".date("Y-m-d H:i:s")." - Load print ".$argv[1], FILE_APPEND);
$loadData = json_encode(array("load" => intval($argv[1]), "access_error_check_day" => date("Ymd"), "access_error_check_hour" => date("H"))); //error_check_day -> day when nagios error check was last run. We will accordingly check log files of days in between this day and the day of afterinstall (practically this can include a span of 2 days).
file_put_contents("/var/cake_1.2.0.6311-beta/deployment/serverLoad.json",$loadData); //separate from deployment_config.json. serverLoad.json is not copied from build server.
file_put_contents('/var/cake_1.2.0.6311-beta/deployment/deployment.log', "\n ".date("Y-m-d H:i:s")." loadData to config ".$loadData, FILE_APPEND);
?>
あなたのインストールスクリプトを投稿してください。私はあなたがそれらを削除していると思います。 – mttdbrd
@mttdbrd質問の更新3のセクションを確認してください。 –
私はそこにすべてのファイルを削除するロジックがありません。私はafterInstallのステップでいくつか持っていましたが、削除するファイルを削除するだけでした(git diffのように)。フックセクションのafterInstallステップを削除すると、無効になるはずです。私が書いたように、フックセクションを完全に削除しても、ファイルはまだ削除されています。 –