.gitlab-ci.yml
ファイルの設定に問題があります。私は古いコミットを削除したいので、(Debian)サーバで利用可能な最新コミットと直前コミットだけを持っています。コミットが正常に切り替えられますが、古いものがフォルダに固執し、あれば、しかし、rm -rf $(readlink <link>)
Gitlab CIスクリプトのシンボリックリンクのターゲットを削除するには?
で削除されていません - 何らかの理由で、スクリプトが実行されたとき、それが期待どおりに動作しないために
私は同じユーザーでサーバー上でSSHを実行し、全く同じ手順を実行すると、rm -rf $(readlink <link>)
は実際のシンボリックリンクのターゲット(予想される動作)を正常に削除します。 CIスクリプトから同じことが行われた場合、ターゲットは削除されません。
多分、私はいくつかの変数のエスケープや括弧が欠けていましたか?
これは私の(トリミング).gitlab-ci.yml
ファイルです:
variables:
SSH_USER: "[email protected]"
PROJECT_DIR: "/domains/example.com/project-name"
DEPLOY_DIR: "${PROJECT_DIR}/deploy"
STAGING_TEMP_DIR: "${PROJECT_DIR}/staging-temp"
# is this correct?
DELETE_STAGING_TEMP: "'$$(readlink -f ${STAGING_TEMP_DIR})'"
stages:
- build
- deploy
- post-deploy
Post Deploy staging:
stage: post-deploy
script:
# switch last version
- ssh $SSH_USER mv ${PROJECT_DIR}/staging-previous ${STAGING_TEMP_DIR} || true
- ssh $SSH_USER mv ${PROJECT_DIR}/staging-latest ${PROJECT_DIR}/staging-previous || true
- ssh $SSH_USER rm -rf ${DELETE_STAGING_TEMP}
- ssh $SSH_USER unlink ${STAGING_TEMP_DIR} || true
- ssh $SSH_USER ln -s ${DEPLOY_DIR}/${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${PROJECT_DIR}/staging-latest
私も、このバリアントを試してみました:
variables:
SSH_USER: "[email protected]"
PROJECT_DIR: "/domains/example.com/project-name"
DEPLOY_DIR: "${PROJECT_DIR}/deploy"
STAGING_TEMP_DIR: "${PROJECT_DIR}/staging-temp"
Post Deploy staging:
stage: post-deploy
script:
# switch last version
- ssh $SSH_USER mv ${PROJECT_DIR}/staging-previous ${STAGING_TEMP_DIR} || true
- ssh $SSH_USER mv ${PROJECT_DIR}/staging-latest ${PROJECT_DIR}/staging-previous || true
# is this correct?
- ssh $SSH_USER rm -rf "$(readlink -f ${STAGING_TEMP_DIR})"
- ssh $SSH_USER unlink ${STAGING_TEMP_DIR} || true
- ssh $SSH_USER ln -s ${DEPLOY_DIR}/${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${PROJECT_DIR}/staging-latest
ジャストノート: ${PROJECT_DIR}/staging-previous
と${PROJECT_DIR}/staging-latest
はコミットへのシンボリックリンクです。
誰も同じような問題がありますか?あるいは、古い(もう必要ない)コミットを削除するために他の方法を使用しますか?