azure-vm-agents-plugin/README.md

202 lines
11 KiB
Markdown
Raw Permalink Normal View History

2016-11-29 17:41:30 +00:00
# azure-vm-agents
2014-09-16 18:34:00 +00:00
2014-07-03 18:48:30 +00:00
Jenkins Plugin to create Azure VM agents (on Azure ARM).
2014-07-17 22:04:13 +00:00
2016-11-11 17:25:19 +00:00
Supports creating
2014-07-17 22:04:13 +00:00
1. Windows Agents on Azure Cloud using SSH and JNLP
2016-11-11 17:25:19 +00:00
* For windows images to launch via SSH, the image needs to be preconfigured with ssh.
2014-09-16 18:28:46 +00:00
For preparing custom windows image, refer to [Azure documentation](http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-capture-image-windows-server/)
2. Linux Agents on Azure Cloud using SSH
2014-09-16 18:28:46 +00:00
* For preparing custom linux image, refer to [Azure documentation]( http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-capture-image/)
2014-09-15 23:27:23 +00:00
2015-07-23 15:10:53 +00:00
## Pre-requirements
Register and authorize your client application.
2015-07-23 15:10:53 +00:00
Retrieve and use Client ID and Client Secret to be sent to Azure AD during authentication.
2015-07-23 15:10:53 +00:00
Refer to
2016-11-30 21:15:54 +00:00
* [Bash Script for creating a service principal](https://github.com/Azure/azure-devops-utils/blob/master/bash/create-service-principal.sh)
* [Further guidance on creating a service principal](https://github.com/Azure/azure-devops-utils#user-content-create-service-principal)
2016-11-11 17:25:19 +00:00
* [Adding, Updating, and Removing an Application](https://msdn.microsoft.com/en-us/library/azure/dn132599.aspx)
2015-07-23 15:10:53 +00:00
* [Register a client app](https://msdn.microsoft.com/en-us/dn877542.asp)
## How to install the Azure VM Agents plugin
2014-09-16 18:31:19 +00:00
1. Within the Jenkins dashboard, click Manage Jenkins.
2. In the Manage Jenkins page, click Manage Plugins.
3. Click the Available tab.
4. In the "Cluster Management and Distributed Build" section, select the Azure VM Agents plugin.
2014-09-16 18:31:19 +00:00
5. Click either “Install without restart” or “Download now and install after restart”.
2014-09-16 18:47:52 +00:00
6. Restart Jenkins if necessary.
2014-09-15 23:27:23 +00:00
2014-09-16 18:35:47 +00:00
## Configure the plugin : Azure profile configuration
2016-11-11 17:25:19 +00:00
1. Within the Jenkins dashboard, click Manage Jenkins --> Configure System --> Scroll to the bottom of the page
and find the section with the dropdown "Add new cloud" --> click on it and select "Microsoft Azure VM Agents"
2016-11-21 20:25:07 +00:00
2. Select an existing account from the Azure Credentials drop down or add new "Microsoft Azure VM Agents" credentials in the Credentials Management page by filling out the Subscription ID, Client ID, Client Secret and the OAuth 2.0 Token Endpoint.
2014-09-16 18:35:47 +00:00
3. Click on “Verify configuration” to make sure that the profile configuration is done correctly.
2014-09-16 18:47:52 +00:00
4. Save and continue with the template configuration (See instructions below)
2014-09-15 23:27:23 +00:00
2014-09-16 18:47:52 +00:00
## Configure the plugin : Template configuration.
2016-11-11 17:25:19 +00:00
1. Click on the "Add" option to add a template. A template is used to define an Azure VM Agent configuration, like
2014-09-16 18:47:52 +00:00
its VM size, its region, or its retention time.
2. Provide a name for your new template. This field is not used for agent provisioning.
2016-11-11 17:25:19 +00:00
3. For the description, provide any remarks you wish about this template configuration. This field is not
used for agent provisioning.
2014-09-16 18:47:52 +00:00
4. For the label, provide any valid string. E.g. “windows” or “linux”. The label defined in a template can be
used during a job configuration.
5. Select the desired region from the combo box.
6. Select the desired VM size.
2016-11-11 17:25:19 +00:00
7. Specify the Azure Storage account name. Alternatively you can leave it blank to let Jenkins create a storage
2015-07-23 15:10:53 +00:00
account by using the default name "jenkinsarmst".
2016-11-11 17:25:19 +00:00
8. Specify the retention time in minutes. This defines the number of minutes Jenkins can wait before automatically
deleting an idle agent. Specify 0 if you do not want idle agents to be deleted automatically.
2014-09-16 18:47:52 +00:00
9. Select a usage option:
2016-11-11 17:25:19 +00:00
* If "Utilize this node as much as possible" is selected, then Jenkins may run any job on the agent as long as it
2014-09-16 18:47:52 +00:00
is available.
2016-11-11 17:25:19 +00:00
* If "Leave this node for tied jobs only" is selected, Jenkins will only build a project (or job) on this node
when that project specifically was tied to that node. This allows a agent to be reserved for certain kinds of jobs.
2015-07-23 15:10:53 +00:00
10. Specify your Image Family. Choose between two possible alternatives:
* use a custom user image (provide image URL and os type - note, your custom image has to be available into the same storage account in which you are going to create agent nodes);
2015-07-23 15:10:53 +00:00
* give an image reference (provide image reference by publisher, offer, sku and version).
2014-09-16 18:47:52 +00:00
11. For the launch method, select SSH or JNLP.
* Linux agents can be launched using SSH or JNLP, though no startup script is available through JNLP.
2016-11-11 17:25:19 +00:00
* Windows agents can be launched using SSH or JNLP. For Windows agents, if the launch method is SSH then
2014-09-16 18:47:52 +00:00
image needs to be custom-prepared with an SSH server pre-installed.<br>
2016-11-11 17:25:19 +00:00
2014-09-16 18:47:52 +00:00
When using the JNLP launch option, ensure the following:
2016-11-11 17:25:19 +00:00
* Jenkins URL (Manage Jenkins --> configure system --> Jenkins Location)
* The URL needs to be reachable by the Azure agent, so make sure to configure any relevant firewall rules accordingly.
* TCP port for JNLP agent agents (Manage Jenkins --> configure global security --> Enable security --> TCP port for JNLP agents).
* The TCP port needs to be reachable from the Azure agent launched using JNLP. It is recommended to use a fixed port so that any necessary firewall exceptions can be made.
2016-11-11 17:25:19 +00:00
If the Jenkins master is running on Azure, then open an endpoint for "TCP port for JNLP agent agents" and, in case of
2014-09-16 18:47:52 +00:00
Windows, add the necessary firewall rules inside virtual machine (Run --> firewall.cpl).
2016-11-11 17:25:19 +00:00
12. For the Init script, provide a script to install at least a Java runtime if the image does not have Java
2014-09-16 18:47:52 +00:00
pre-installed.
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
For the Windows JNLP launch method, the init script must be in PowerShell.
Automatically passed to this script is:
First argument - Jenkins server URL
Second argument - VMName
Third argument - JNLP secret, required if the server has security enabled.
You need to install Java, download the agent jar file from: '[server url]jnlpJars/slave.jar'.
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
The server url should already have a trailing slash. Then execute the following to connect:
`java.exe -jar [agent jar location] [-secret [client secret if required]] [server url]computer/[vm name]/agent-agent.jnlp`
2016-11-11 17:25:19 +00:00
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
Example script
```
Set-ExecutionPolicy Unrestricted
$jenkinsServerUrl = $args[0]
$vmName = $args[1]
$secret = $args[2]
$baseDir = 'C:\Jenkins'
mkdir $baseDir
# Download the JDK
$source = "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-windows-x64.exe"
$destination = "$baseDir\jdk.exe"
2016-11-11 17:25:19 +00:00
$client = new-object System.Net.WebClient
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
$cookie = "oraclelicense=accept-securebackup-cookie"
2016-11-11 17:25:19 +00:00
$client.Headers.Add([System.Net.HttpRequestHeader]::Cookie, $cookie)
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
$client.downloadFile([string]$source, [string]$destination)
# Execute the unattended install
$jdkInstallDir=$baseDir + '\jdk\'
$jreInstallDir=$baseDir + '\jre\'
C:\Jenkins\jdk.exe /s INSTALLDIR=$jdkInstallDir /INSTALLDIRPUBJRE=$jdkInstallDir
$javaExe=$jdkInstallDir + '\bin\java.exe'
$jenkinsSlaveJarUrl = $jenkinsServerUrl + "jnlpJars/slave.jar"
$destinationSlaveJarPath = $baseDir + '\slave.jar'
# Download the jar file
$client = new-object System.Net.WebClient
$client.DownloadFile($jenkinsSlaveJarUrl, $destinationSlaveJarPath)
# Calculate the jnlpURL
$jnlpUrl = $jenkinsServerUrl + 'computer/' + $vmName + '/slave-agent.jnlp'
while ($true) {
try {
# Launch
& $javaExe -jar $destinationSlaveJarPath -secret $secret -jnlpUrl $jnlpUrl -noReconnect
}
catch [System.Exception] {
Write-Output $_.Exception.ToString()
}
sleep 10
}
```
2016-11-11 17:25:19 +00:00
2016-11-29 21:40:52 +00:00
If you hit the [storage scalability limits](https://docs.microsoft.com/en-us/azure/storage/storage-scalability-targets) for your custom images on the storage account where the VHD resides, you should consider using the agent's [temporary storage](https://blogs.msdn.microsoft.com/mast/2013/12/06/understanding-the-temporary-drive-on-windows-azure-virtual-machines) or copy your custom image in multiple storage accounts and use multiple VM templates with the same label within the same agent cloud.
2014-09-16 19:00:26 +00:00
For more details about how to prepare custom images, refer to the below links:
2014-09-16 18:58:50 +00:00
* [Capture Windows Image](http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-capture-image-windows-server/)
* [Capture Linux Image](http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-capture-image/)
2016-11-11 17:25:19 +00:00
2014-09-16 18:47:52 +00:00
13. Specify a user name and a password as per the rules explained in the help text.
2016-11-11 17:25:19 +00:00
14. Make sure to validate the template configuration by clicking on the link “Verify Template”. This will connect
2014-09-16 18:47:52 +00:00
to your Azure account to verify the correctness of the supplied information.
2014-09-15 23:27:23 +00:00
2014-09-16 18:54:11 +00:00
## Template Configuration for Ubuntu images.
1. Configure an Azure profile and Template as per the above instructions.
2016-11-11 17:25:19 +00:00
2. If the init script is expected to take a long time to complete, it is recommended to use a custom-prepared Ubuntu
image that has the required software pre-installed, including a Java runtime
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
3. For platform images, you may specify an Init script as below to install Java (may vary based on OS):
2014-09-15 23:27:23 +00:00
2014-09-16 18:54:11 +00:00
```
2014-09-15 23:27:23 +00:00
#Install Java
sudo apt-get -y update
Azure RM model updates * Make the resource group configurable * Update SDK to 0.9.4 * Fix: Token expiration was incorrectly calculated (API is named a bit oddly). * Fix: Token expiration is in seconds. * Change VM/deployment names to ones that are valid * Fix location + VM sizes It appears that that the location and VM size APIs do not currently support the AAD based authentication. The certificate is required. Rather than re-introduce the cert for just this limited UI scenario, I have decided to hard-code the list based on the returned info from current Azure. This is a decent short term solution, since a move to the 1.0.0 API (when released) will require that this code be changed anyway and presumably this problem should be fixed for good at that point. * Proper handling for custom image URIs * Asynchronous verification of the subscription info * Asynchronous verification of the azure templates * Asynchronous provisioning * Clean up resources after unsuccessful provisioning * Lots of logging updates * Fix: SSH launcher - Get channels before connection for exec channels Getting the channels after connection introduces a race where we could potentially fail to read from the input streams if they were obtained from the channel after the connection had completed. * Add diagnostics to image verification messages * Asynchronous deletion via UI * Update version of Jsch * Temporarily disable image verification for reference images * Allow for initialization scripts to be run as root * Cleanup of slaves now works properly * Doesn't clean up when node is taken offline by user * Post build tasks won't kill other runs or show errors in the job logging * Retention strategy now for online nodes, cleanup for offline nodes * Nodes that are marked to shut down on idle can now be restarted properly (before too many could be started) * Add option to treat failures of the initialization script as a reason to discard the VM (linux only currently) * Reenable Windows custom script extension for startup * Update documentation with new sample startup scripts Add setAcceptingTasks appropriately doc fixup
2016-09-12 23:20:16 +00:00
sudo apt-get install -y openjdk-8-jre
2014-09-16 18:54:11 +00:00
```
## Template configuration for Windows images with launch method JNLP.
1. Make sure to follow the instructions specified above for JNLP.
2016-11-11 17:25:19 +00:00
2. If the Jenkins master does not have a security configuration, leave the Init script blank for the default
script to execute on the agent.
2016-11-11 17:25:19 +00:00
3. If the Jenkins master has a security configuration, then refer to the script at
2016-11-30 21:15:54 +00:00
https://raw.githubusercontent.com/Azure/azure-devops-utils/master/powershell/Jenkins-Windows-Init-Script.ps1 and modify the script with the proper
2014-09-16 18:54:11 +00:00
Jenkins credentials.
2014-09-15 23:27:23 +00:00
At a minimum, the script needs to be modified with the Jenkins user name and API token.
To get the API token, click on your username --> configure --> show api token<br>
The below statement in the script needs to be modified:
2016-11-30 21:15:54 +00:00
$credentials="username:apitoken"
2016-11-11 17:25:19 +00:00
## Create a Jenkins job that runs on a Linux agent node on Azure
2014-11-05 18:17:01 +00:00
1. In the Jenkins dashboard, click New Item/Job.
2. Enter a name for the task/Job you are creating.
3. For the project type, select Freestyle project and click OK.
4. In the task configuration page, select Restrict where this project can be run.
5. In the Label Expression field, enter label given during template configuration.
6. In the Build section, click Add build step and select Execute shell.
7. In the text area that appears, paste the following script.
2016-11-11 17:25:19 +00:00
2014-11-05 18:17:01 +00:00
````
# Clone from git repo
currentDir="$PWD"
if [ -e sample ]; then
cd sample
git pull origin master
else
git clone https://github.com/snallami/sample.git
fi
2016-11-11 17:25:19 +00:00
2014-11-05 18:17:01 +00:00
# change directory to project
cd $currentDir/sample/ACSFilter
2016-11-11 17:25:19 +00:00
2014-11-05 18:17:01 +00:00
#Execute build task
ant
````
8. Save Job and click on Build now.
2016-11-11 17:25:19 +00:00
9. Jenkins will create a agent node on Azure cloud using the template created in the previous section and
2014-11-05 18:17:01 +00:00
execute the script you specified in the build step for this task.
10. Logs are available @ Manage Jenkins --> System logs --> All Jenkins logs.
11. Once the node is provisined in Azure, which typically takes about 5 to 7 minutes, node gets added to Jenkins.
2014-09-15 23:27:23 +00:00
2016-11-11 17:25:19 +00:00