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
- Install Publish over SSH plugin
- Configure Jenkins => System Configuration
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
- Open Job => Configure
- Check This project is parameterized
Add Choice Parameter
- Name: server
Choices:
server_1 server_2
- 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.