How to Control Parametrized publishing in Jenkins using Publish over SSH plugin's Label field

Answer to your question and how I configured my process:

1. Configuring Jenkins

  1. Install Publish over SSH plugin
  2. Configure Jenkins => System Configuration
  3. Publish over SSH section

    • Key => -----BEGIN RSA PRIVATE KEY----- ... here is your key ... -----END RSA PRIVATE KEY----- 1.2.1.2 SSH Servers =>
    • Name: Server_1 (It is only name of configuration)
    • Hostname: example_server_1.com (url of your server)
    • Username: ec2-user (for amazon)

    • Click Add Server button

    • Name: Server_2 (It is only name of configuration)
    • Hostname: example_server_2.com (url of your server)
    • Username: ec2-user (for amazon)

2. Job Configuration

  1. Open Job => Configure
  2. Check This project is parameterized
  3. Add Choice Parameter

    • Name: server
    • Choices:

       server_1
       server_2
      
  4. Select Send files or execute commands over SSH => SSH Server section
    • Name: select your first server
    • Enter Transfer Set data (Source files and/or Exec_command)
    • Click Advanced
    • Label: server_1 (this is the first choice of your choice parameter)
    • Click Add Server
    • Name: select your second server
    • Enter Transfer Set data (Source files and/or Exec_command)
    • Click Advanced
    • Label: server_2 (this is the second choice of your choice parameter)
    • In front of button Add Server, click Advanced
    • Check Parameterized publishing
    • Parameter name: server (this is the name of your choice parameter)

3. Job Running

Run job and select for example Server => server_2.

You will see in log:

SSH: Skipping [server_1] - Label server_1 does not match expression server_2
SSH: Publishing to [server_2] - Label server_2 matches expression server_2
SSH: Connecting from host [ip-10-0-0-37]
SSH: Connecting with configuration [server_2] ...

Explanation

The plugin compares the value of the parameter named "Server" (which you selected before job starts) with the labels that you have configured. If label and parameter match, then the SSH commands are executed.

Hope it was helpful. Cause I spent on it 5 hours.


You should enable "parameterized publishing" and specify build parameter name by clicking "Advanced..." button that is last before "Add post-build action" button in your build config (I use post-build actions section for example).

E.g. "build parameter name" = SSH_SERVER. Then there should be SSH_SERVER build parameter with regexp to match ssh servers labels.

In your case, SSH_SERVER build parameter should be set to XXX, after that SSH publishing should happen only for QA_1 server.