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?