2017-11-30 28 views
1

.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はコミットへのシンボリックリンクです。

誰も同じような問題がありますか?あるいは、古い(もう必要ない)コミットを削除するために他の方法を使用しますか?

答えて

0

は最後に解決策を見つけた - それは、バッククォート `

Post Deploy STAGING: 
    stage: post-deploy 
    script: 
     # checks if current commit is already set up as staging-latest 
     # if not, then this is new release, so switch last version: 
     # - move staging-previous to temp 
     # - move staging-latest to staging-previous 
     # - delete the content of temp dir and unlink temp 
     - > 
      ssh $SSH_USER "if [ \"\`readlink ${PROJECT_DIR}/staging-latest\`\" != \"${DEPLOY_DIR}/${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}\" ]; 
      then \`mv ${PROJECT_DIR}/staging-previous ${STAGING_TEMP_DIR} || true; 
      mv ${PROJECT_DIR}/staging-latest ${PROJECT_DIR}/staging-previous || true\`; 
      rm -rf \`readlink -f ${STAGING_TEMP_DIR}\`; 
      unlink ${STAGING_TEMP_DIR} || true; 
      fi;" 
     - ssh $SSH_USER ln -s ${DEPLOY_DIR}/${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${PROJECT_DIR}/staging-latest || true 
の悪いエスケープました