Deploy to SFTP Server
đź“š Learn more about SFTP action features, integrations and alternatives.
Buddy turns deployments into a breeze, allowing you to automatically update your servers on every push to branch. You can also deploy manually on click, or recurrently on time intervals.
Example pipeline with deployment to an SFTP server
Configure pipeline in Buddy
- Create a new project in Buddy and select your Git provider.
Creating a new project
- Add a new pipeline and configure the details: name, trigger mode, and a branch from which you want to deploy.
Adding a new pipeline
Configure SFTP deployment
- Look up and click SFTP on the action list to add it to the pipeline:
SSH-based actions
- The action has four configuration tabs:
- Transfer – here you define the source path, deployment flags, and files to ignore
- Target – here you provide the details of the server to which you want to deploy
- Conditions – here you configure the trigger conditions for which the action will run
- Options – here you define the action's name and behavior on failure and timeout
SFTP action configuration
Deploying symlinks using SFTP
In order to upload symlinks via SCP it’s enough to use the recursive mode by adding the -r
parameter:
scp -r
$
However, enabling the mode will also copy the content to which the symlink points. This is troublesome if we only want the symlinks to be copied, and it’s not possible to do it in a different way with SCP. Usually, this is solved by using rsync:
rsync -avz -e ssh /scr-dir user@host:/dst-dir
$
Unfortunately, this method is very time consuming. Below you will find a description how to automate and speed it up with Buddy.
Solution 1: Local Script + Server Upload + Host Script
The first solution employs some simple scripts alongside the deployment action. First we need a script grab-links.sh
that will list all symlinks in the folder. The script will search the folder in recursive mode and create a file create-links.sh
with instructions that will reproduce the symlinks on the target server:
# !/bin/sh
echo "#!/bin/sh\n" > create-links.sh
for file in $(find . -type l); do
link=$(readlink $file);
echo "if [ ! -L $file ]; then ln -s $link $file; fi" >> create-links.sh;
done
$$$$$$$
Now, we need to save the script to the grab-links.sh
file and execute:
chmod +x grab-links.sh
./grab-links.sh
$$
This will generate create-links.sh
that you can upload and run on the target server to reproduce your symlinks:
chmod +x create-links.sh
./create-links.sh
$$
Automation
In Buddy, you can create a pipeline that will automatically perform all these steps on every push to the repository. Here's what you need to do:
- Upload the script
grab-links.sh
to the repository. - Add a new pipeline and set the trigger mode to run on every push.
- Add a Local Shell action and enter the commands that will run the script in the Buddy’s infrastructure:
chmod +x grab-links.sh
./grab-links.sh
$$
- Add an SFTP action that will upload the newly generated script
create-links.sh
. - Add an SSH action and enter these commands to run the script on the target server:
chmod +x create-links.sh
./create-links.sh
$$
Reproducing symlinks on the server
Solution 2: Git Clone
Git handles symlinks exactly the way one could expect: if you push a symlink to the repository and somebody else clones this repository, the symlink will be reproduced in their local repo. So, basically, all that you need to do is install Git on the production server and run
git clone
$
Automation
With Buddy you can execute git clone
automatically on every push the repository. A good practice is to add unit tests to make sure your code is free of errors before it’s pulled.
- Add a new pipeline and set the trigger mode to run on every push.
- Add a Local Shell action.
- Add an SSH action that will execute
git clone
on the external repository.
Running tests and pulling the symlinks on the server
Last modified on December 19, 2023