Deployment

Private components can be deployed in three ways:

  1. The dependency is downloaded during the build and uploaded to the server later on.
  2. The repository is first deployed to the server, and the dependency is downloaded to the server later on.
  3. The files are deployed to the server, and a webhook is sent informing that the dependency is ready for download.

Deploying submodules and dependencies

Deployment actions can upload the content either from the pipeline filesystem, or just the Git repository.

Deployment from the filesystem

  • Deploys submodules fetched at the beginning of the execution
  • Deploys dependencies fetched in the build action, together with the artifacts

Deployment from the repository

  • Deploys submodules fetched at the beginning of the execution
  • Never deploys dependencies or artifacts

Downloading dependencies to the server

The first step is deploying the repository using one of the deployment actions (FTP, SFTP, Rsync, Git Push). Then, you connect to the server and download the dependencies:

Example pipeline

Buddy has a dedicated SSH action that you can use to connect to and run commands on the server.

SSH action details

To save time on deployment and dependency download and ensure your application is always up and running, you might want to consider zero-downtime deployment.

Downloading dependencies to the server with a webhook

The process is very similar to the previous example, except that we use the HTTP action instead of SSH to inform the server that a new version is available after the deployment:

Example pipeline

Authentication errors in submodules

If there is an authentication error while fetching the submodules, you will get a warning in the logs. However, the execution will proceed and the error will not affect the pipeline's status. You can see the logs from fetching submodules in the execution view:

Authentication error

If both deployment of submodules and deployment from the repository are turned on, then the authentication error during the submodule fetch will stop the execution.