2017-11-30 16 views
1

Ich habe ein Problem bei der Einrichtung .gitlab-ci.yml Datei. Ich möchte alte Commits löschen, daher habe ich nur die letzte und letzte Commit auf einem (Debian) Server verfügbar.Wie lösche Ziel des symbolischen Links in Gitlab CI-Skript?

Aus irgendeinem Grund, wenn das Skript ausgeführt wird, ist es nicht wie erwartet verhalten - die Commits korrekt geschaltet werden, aber der alte ist im Ordner anhalten und mit rm -rf $(readlink <link>)

jedoch nicht gelöscht wird, wenn I SSH auf dem Server mit dem gleichen Benutzer und die gleichen Schritte, rm -rf $(readlink <link>) erfolgreich löscht das eigentliche Symlink-Ziel (erwartetes Verhalten). Wenn dasselbe aus dem CI-Skript heraus geschieht, wird das Ziel nicht gelöscht.

Vielleicht habe ich einige Variable entkommen oder Klammer?

Dies ist mein (getrimmt) .gitlab-ci.yml Datei:

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 

Ich habe auch versucht, diese Variante:

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 

Nur ein Hinweis: ${PROJECT_DIR}/staging-previous und ${PROJECT_DIR}/staging-latest Symlinks sind verpflichtet.

Hat jemand ähnliches Problem? Oder verwenden Sie andere Methoden, um alte (nicht mehr benötigte) Commits zu löschen?

Antwort

0

endlich eine Lösung gefunden - es war schlecht Entkommen von Backticks `

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 
Verwandte Themen