Search code examples
deploymentgitlabftpgitlab-ci-runner

Gitlab - deploy changes only using FTP


We’re running an older gen project and we need to deploy pushes to our main branch using LFTP from Gitlab. The problem we’re having is that each push uploads all of the files instead of only changes. Currently our pipeline looks like this:

image: ubuntu:18.04

before_script:
  - apt-get update -qy
  - apt-get install -y lftp

build:
  script:
    # Sync to FTP
    - lftp -e "set ftp:ssl-allow no;open $FTP_IP; user $FTP_USERNAME $FTP_PASSWORD; mirror -X .* -X .*/ --reverse --verbose -n localDir/ remoteDir/; bye"

I’ve googled what to do, but didn’t find a clear answer. Can anyone help me with this situation?

Thanks


Solution

  • So the only-newer option didn't work due to the timestamps not being correct. There's a tool in GIT that restore timestamps so I just chucked that in and it now works as it should...

    Looks like this now:

    build:
      image: ubuntu:latest
      stage: build
      script:
        - apt update
        - apt install git-restore-mtime -y
        # - ls -la
        # This command restores the modified timestamps from commits
        - /usr/lib/git-core/git-restore-mtime
        # - ls -la
        - apt-get update -qy
        - apt-get install -y lftp
        # Sync to FTP
        - lftp -e "set ftp:ssl-allow no;open $FTP_IP; user $FTP_USERNAME $FTP_PASSWORD; mirror -X .* -X .*/ --reverse --verbose --only-newer -n localDir/ remoteDir/; bye"