Child pages
  • Deployer plugin
Skip to end of metadata
Go to start of metadata

General Info


Nikita Skvortsov


Apache 2.0






Latest release:


Enables TeamCity to upload artifacts to external locations in a number of ways.


Follow the TeamCity documentation on installing additional plugins.


After successful installation, new Build Runners will be available in the Build Step selector of a build configuration.
Most of deployers use TeamCity artifact paths to define which files will be deployed. Artifacts paths have the following syntax:

Please note:


target_directory and target_archive are always treated as relative to a remote location specified in the Target parameter of the runner.

Refer to the TeamCity documentation for details.

SMB Deployer

Allows uploading files to Windows shares via the SMB protocol.
Implementation relies on the JCIFS library. To configure the JCIFS client using system properties, update the TeamCity Agent startup properties .

Target URL should point to a host + share at least. Subdirectories are allowed here and will be created if missing. Valid examples:

Name resolution (advanced option) - allows to switch JCIFS to "DNS-only" mode. May fix perfomance or out of memory exceptions (see this bitbucket issue for details). Is equivalent to following JCIFS settings:

FTP Deployer

Allows uploading files to an FTP server.
Target host should point to an FTP server (by hostname or IP address) and a remote directory (relative to the FTP user's home). To use absolute *nix path, use %2F as the forward slash. For example:

Secure connection allows choosing between an insecure (FTP) or secure connection (FTPS, SFTP).

Limited security note


The current secure connection implementation accepts any certificate provided by a remote host. No trust checks are performed!

Authentication method is either Anonymous (will submit username "anonymous" and single space as password) or username/password (for custom credentials)
Transfer Mode allows you to force the ASCII or Binary FTP transfer modes (if the automatically detected mode leads to broken files transfer)

SSH Deployer

Allows uploading files via SSH (using SCP or SFTP protocols)
Target should point to an SSH server location. The syntax is similar to the one used by the *nix scp command:

where target_dir can be absolute or relative; sub_path can have any depth.

Transport allows choosing a protocol to transfer data over SSH. Options are: SCP and SFTP

Authentication method allows choosing an SSH authentication method.

  • "Default private key" will try to perform private key authentication using the ~/.ssh/config settings. If no settings file exists, will try to use the ~/.ssh/rsa_pub public key file. No passphrases should be set.
  • "Custom private key" will try to perform private key authentication using the given public key file with given passphrase
  • "Password" - simple password authentication.

Limited security note


Current secure connection implementation accepts any certificate provided by remote host. No trust checks are performed!

SSH Exec

Allows executing arbitrary remote commands using SSH

Target should point to an SSH server.

Authentication method allows choosing an SSH authentication method.

  • "Default private key" - will try to perform private key authentication using the ~/.ssh/config settings. If no settings file exists, will try to use the ~/.ssh/rsa_pub public key file. No passphrases should be set.
  • "Custom private key" will try to perform private key authentication using a given public key file with a given passphrase
  • "Password" - simple password authentication.

Limited security note


Current secure connection implementation accepts any certificate provided by remote host. No trust checks are performed!

Commands is a new-line delimited set of commands that will be executed in the remote shell. The remote shell will be started in the home directory of an authenticated user. The shell output will be available in the TeamCity build log.

Container Deployer

Allows deploying WAR application archives to a remote Tomcat instance
Supports the following Tomcat versions: 5.x, 6.x, 7.x and 8.x

Requires Manager webapp installed in the target Tomcat instance and a user with the "manager-script" role.


TeamCity 7.0+
Oracle JDK 1.6 or OpenJDK 1.7.0_07 and later.


Issue tracker

Continuous Integration

The current build status is
Detailed CI status page

Third party libraries





Cargo library

Apache 2.0


Ftp4j project

LGPL 2.1






LGPL 2.1

  • No labels


  1. Brilliant idea. We especially like SSH runners. Wish you luck in development and hope you'll progress it to production level soon :)

  2. need Glassfish deployer too. Cool idea. Want to deploy via intellij project run configuration remote glass fish

  3. is it possible to provide multiple hosts comma separated?

    1. No, you can only have one target host at a time.

      Could you explain, why do you need to deploy same artifacts to a number of lockations simultaneously?

      As a work around, you can use build parameters to store common information (like username/password/artifact paths) and create several build steps that only differ in target feild.

  4. Thanks for prompt reply,  I did created build steps that differs on target host but it is not efficient when deployment needs to be selective based on specific Env where each target environment may have 10/20 hosts, would be nice to use comma separated list or something similar and provide it to deployer target. 

  5. Deployers work really good. I like how they use the standard artifact syntax. I have two suggestions, though:

    • SMB Deployer doesn’t accept dots in the UNC path set for the target URL, elthough it would still be a valid path.
    • It would be great if deployers could be configured to copy / uplaod only files that are newer than in destination.
    1. Thank you for your feedback. I have received an issue regarding dots in UNC paths.
      Would you mind opening separate request for uploading only newer files?

      1. Sure, no problem. If I understand correctly, I should open an issue for that on YouTrack (

  6. Hi,

    I am trying to install this plugin in Teamcity, but my teamcity server is not getting started with the library files, this is the error message we are getting.

    Error creating bean with name 'scpDeployerRunType' defined in URL [jar:file:/D:/TeamCity/webapps/ROOT/WEB-INF/lib/deploy-runner-server-1.0-SNAPSHOT.jar\!/META-INF/build-server-plugin-deploy-runner.xml\]: Unsatisfied dependency expressed through constructor argument with index 1 of type 

    I have copied the deployer-runner-common and deployer-runner-server jars on the library path and the server was complaining on this error.

    Can you please help me in resolving this? The teamcity version i am using is 7.0.2



    1. Gomathi,

      I apologize for broke link to installation instructions. I have fixed it to point to

      As to your case,

      1. Shutdown the server

      2. Remove plugin jars from WEB-INF/lib directory

      3. Copy to <TeamCity Data Directory>/plugins directory.

      4. Start server

      1. Thank you!! This worked

  7. Thank you so much for your prompt reply, i will try this and update you!!



  8. Is it possible for SSH Exec to respond to prompts?

    1. Unfortunately, no. Script is passed to remote side as a single command.

  9. Hi, I've just installed TeamCity 8.1 EAP build 29581 and my build throws the following error when executing the Deployer build step:

    I'm not sure if this is an issue directly with the Deployer Plugin or an issue with the new TC build. Please are you able to advise?

    1. This issue was fixed in recent builds. Please, update the plugin.

      1. Thank you Nikita, that's sorted the issue!

  10. Hi,

    I am able to use this plugin successfully with one server ,but on the other it got failed for authorization. I am using default private key option from the sshexec and i am able to connect to this server using plink.

    Here is the error log from teamcity. Thanks a lot in advance for your help.

    com.jcraft.jsch.JSchException: Auth fail[10:41:13]com.jcraft.jsch.JSchException: Auth fail

    com.jcraft.jsch.JSchException: Auth fail

     at com.jcraft.jsch.Session.connect(

     at com.jcraft.jsch.Session.connect(

     at jetbrains.buildServer.deployer.agent.ssh.SSHSessionProvider.<init>(

     at jetbrains.buildServer.deployer.agent.ssh.SSHExecRunner.createBuildProcess(

     at jetbrains.buildServer.agent.impl.runner.CallRunnerService.createBuildProcess(

     at jetbrains.buildServer.agent.impl.buildStages.runnerStages.start.CallRunnerStage.doBuildStage(

     at jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor$1.callStage(

     at jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor$1.callStage(

     at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.callRunStage(

     at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.doStages(

     at jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor.doStages(

     at jetbrains.buildServer.agent.impl.buildStages.startStages.RunnerContextExecutor.callRunnerStages(

     at jetbrains.buildServer.agent.impl.buildStages.startStages.ForEachBuildRunnerStage.doBuildStage(

     at jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor$1.callStage(

     at jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor$1.callStage(

     at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.callRunStage(

     at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.doStages(

     at jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor.doStages(

     at jetbrains.buildServer.agent.impl.BuildRunAction.doStages(

     at jetbrains.buildServer.agent.impl.BuildRunAction.runBuild(

     at jetbrains.buildServer.agent.impl.BuildAgentImpl.doActualBuild(

     at jetbrains.buildServer.agent.impl.BuildAgentImpl.access$100(

     at jetbrains.buildServer.agent.impl.BuildAgentImpl$

     at Source)

  11. Is there any way I can use a configuration parameter within the Target URL field?  I've added a custom parameter to the Build Configuration area and can choose it from the parameter browser button next to the Target URL field but saving the changes results in an 'Invalid URL' error.

    1. Looks like it is an issue with URL vaildation code ignoring the parameters. Please report it to issue tracker and I will do my best to fix it soon

      1. Thanks, I've submitted an issue as requested.  Issue Id: TW-35844

  12. Thank you very much for this plugin, please don't stop the development, very useful project.

  13. Hello! Can't download latest plugin release:Error has occurred during request processing (Not Found).
    Error: No build can be found by id '135774'.
    Could not find the entity requested. Check the reference is correct and the user has permissions to access the entity.

    1. Thank you for reporting. I have fixed the link.
      Please download it and give it a try.

  14. Hello Nikita.

    Thanks for your work. Can you please tell me - how can I undeploy a war before deploy a new one?

    Thank you!

    1. Roman,

      There is no dedicated "undeploy" procedure (yet). With Tomcat container, re-deploying over existing application should work fine. If it does not, please report to

    2. The re-deployment issue is fixed. Thank you for the report.

      Please, download the updated version of the plugin.

      1. Thank you, Nikita.

        The plugin works awesome!

        1. You are welcome. If you have any other feedback, maybe a missing feature - I'll be glad to hear about it.

  15. Hi,

    Recently we've been receiving 99% of the time an exception when we run the FTP step:

     It.sauronsoftware.ftp4j.FTPDataTransferException: I/O error in data transfer 

    The FTP process was working fine until our repository grew to over 300 individual files.  The logs show FTP process can start, transfer a few files then it chokes then raises the exception.

    Any ideas what could be causing the exception?


    1. Hi Anton. 

      Hard to tell anything without logs. Please, enable Agent-side debug logging (using this instruction) and wait for the problem to reproduce. 

      Open a new issue here and attach resulting teamcity-agent.log file there. Also, FTP server logs would be useful.

  16. Is there a limit to how many files the uploader will attempt to upload?

    Yet, in our configuration, we have the following:

    Do you know of any limitation? I thought it might be a server timeout error, but without an error being reported, it doesn't seem likely.


    - Matt

    1. That really deserves an issue in tracker. 
      Please report it to BitButcket:

      Attach :
       * deployer step settings screenshot
       * full build log 
       * teamcity-agent.log file (located on build agent that executed the buildstep).

      If requested files contain sensitive information and you can not make them public, please e-mail them to me for investigation: n.s.skvortsov [ at ] gmail

    2. Hello Matt, 

      I have fixed this issue. Please grab new build of the plugin.

  17. Hello, Nikita. We have troubles with deploying .war file to Tomcat 7, when we use new version of Deployer Plugin. With older version all was fine. Can you help us?

    " org.codehaus.cargo.container.ContainerException: Failed to create deployable with implementation class org.codehaus.cargo.container.tomcat.TomcatWAR for the parameters (container [id = [tomcat6x]], deployable type [war])"

    1. Serhii,

      Please, post an issue to;
      Attach Deployer settings page screenshot, build log and teamcity-agent.log file

  18. Hi Nikita,

    Thanks for the idea. We have implemented SSH, FTP correctly. Also, implemented SMB with out using the JCIFS library and it worked fine as we were able to deploy a file from one windows server to another. But, I would like to understand what is the significance of jcifs library in the SMB deployer and how will it be useful? Are there any circumstances of non usage of this library for implementation of SMB Deployer?

    1. Mohammed,

      JCIFS library offers implementation of basic operations required by SMB client running on jvm. Thanks to that, SMB deployer can upload files to windows shares from (almost) any operating system (Windows, Linux, MacOS, FreeBSD). SMB Deployer does not depend on unerlying OS's ability to connect to windows shared folder.

  19. Hello,

    In the ftp deployer plugin we're receiving the error 
    [Step 3/3] java.lang.NoSuchMethodError: jetbrains.buildServer.agent.impl.artifacts.ArtifactsBuilder.setCaseInsensitivePatterns(Z)V at jetbrains.buildServer.deployer.agent.base.BaseDeployerRunner.createBuildProcess( at jetbrains.buildServer.agent.impl.runner.CallRunnerService.doCreateBuildProcess( at jetbrains.buildServer.agent.impl.runner.CallRunnerService.createBuildProcess(

    Same problem is defined in the previous comments ( by Darren Williams ) and solution was given as updating to the latest build. 

    But we receive this error although we are using the TeamCity 8.1.5 (build 30240). (Currently latest version)

    Do you have any ideas why this issue might be happening or any solutions?

    Thank you,

    1. Solved...

      Well, I did a full update on the Team City although I should have only updated the deployer plugin as described in the installing additional plugins. After the plugin update the problem is fixed. 


  20. Is it possible to have the SSH runners use the uploaded SSH keys? I don't see how to do this in the interface. Currently I'm successfully using an uploaded key to identify the TeamCity server as a collaborator in my git-based project, allowing TeamCity to generate and push out new tags.

    However when it comes to running these SSH tasks, I would like to be able to use the same TeamCity identity via PKI and I don't see how to specify the uploaded private key. I have to either use a default key location (~/.ssh/key) or specify a path to locate the key file. Am I overlooking something that would allow me to use the uploaded key I already have configured on the server?

    Edit: adding the fact that I'm using version TeamCity Enterprise 8.1.4 build 30168.

    1. John,
      Unfortunately, this is not currently implemented. Please watch/vote for this request:

    2. i've had the same problem.

      l  read SSH Keys Management and understood that i will fine the private key uploaded for the project here "<TeamCity Data Directory>/config/<project>/pluginData/ssh_keys"

      in my case it was "D:\TeamCity\Data\config\projects\Web\pluginData\ssh_keys\sdstage2"


      and it works. try.

  21. Hi,

    Teamcity 9.0.3 (build 32334). When i am trying to deploy artifacts to the server , I am facing an auth fail if using ssh deployer option as build runner . used Default private key for authentication. Please advice what would be the correct options and values when using deployer plugin. Thanks in advance

    [Step 1/1] com.jcraft.jsch.JSchException: Auth fail at com.jcraft.jsch.Session.connect( at com.jcraft.jsch.Session.connect( at jetbrains.buildServer.deployer.agent.ssh.SSHSessionProvider.<init>( at jetbrains.buildServer.deployer.agent.ssh.SSHDeployerRunner.getDeployerProcess( at jetbrains.buildServer.deployer.agent.base.BaseDeployerRunner.createBuildProcess( at jetbrains.buildServer.agent.impl.runner.CallRunnerService.doCreateBuildProcess( at jetbrains.buildServer.agent.impl.runner.CallRunnerService.createBuildProcess( at jetbrains.buildServer.agent.impl.buildStages.runnerStages.start.CallRunnerStage.doBuildStage( at jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor$1.callStage( at jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor$1.callStage( at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.callRunStage( at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.doStages( at jetbrains.buildServer.agent.impl.buildStages.RunnerStagesExecutor.doStages( at jetbrains.buildServer.agent.impl.buildStages.startStages.steps.RunnerContextExecutor.callRunnerStages( at jetbrains.buildServer.agent.impl.buildStages.startStages.steps.StepExecutor.processNextStep( at jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.executeRunnerStep( at jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.runStep( at jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.executeBuildRunners( at jetbrains.buildServer.agent.impl.buildStages.startStages.steps.ForEachBuildRunnerStage.doBuildStage( at jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor$1.callStage( at jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor$1.callStage( at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.callRunStage( at jetbrains.buildServer.agent.impl.buildStages.StagesExecutor.doStages( at jetbrains.buildServer.agent.impl.buildStages.BuildStagesExecutor.doStages( at jetbrains.buildServer.agent.impl.BuildRunActionImpl.doStages( at jetbrains.buildServer.agent.impl.BuildRunActionImpl.runBuild( at jetbrains.buildServer.agent.impl.BuildAgentImpl.doActualBuild( at jetbrains.buildServer.agent.impl.BuildAgentImpl.access$100( at jetbrains.buildServer.agent.impl.BuildAgentImpl$ at

    1. Hello, Indira

      Please, report the issue to 
      Also, please attach information on what authentication settings are used (username/password, keys). 

      1. Thanks Niki,I have added the new issue for this deployer auth fail : Also attached required info.

        Please let me know if you need any more details reg this.




  22. Hi. What if I need to clean the target FTP directory from files that are already there. Does FTP Deployer support this? I see it probably doesn't do you plan to add this in future? Thanks!

    1. Hello Max,
      Currently, cleaning the destination is not supported. Please, add the comment about FTP here: 

  23. Does the ftp deployer overwrite any existing files? I don't see this option in the plugin.

    1. FTP deployer should overwrite any files in the destination. If it does not, please add an issue here