diff --git a/README.md b/README.md
index 13e4d872..890822d5 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,106 @@ Pipeline steps locking agents and workspaces, and running external processes tha
## Documentation
-* [Changelog](https://github.com/jenkinsci/workflow-durable-task-step-plugin/releases)
+The nodes and processes plugin also called workflow durable task steps locks jenkins agents with the processes running on them, thereby adding durability to workflows. This ensures Pipelines can resume after an unforseeable restart.
+
+### Pipelines
+
+The plugin provides a `ws` step to allocate a workspace, however, this is created automatically using the `node` step. The [Pipeline Syntax Snippet Generator](https://www.jenkins.io/doc/book/pipeline/getting-started/#snippet-generator) guides the user on usage, practical examples and more information.
+
+### Node
+
+A node is the machine on which Jenkins runs, it is part of the Jenkins environment and is capable of executing a Pipeline.
+The `agent` syntax is equivalent to the `node` syntax except in different spheres. agent is a [declarative syntax](https://www.jenkins.io/doc/book/pipeline/#declarative-pipeline-fundamentals) that is used to specify the executor and workspace on which the Pipeline will be executed while node is [scripted syntax](https://www.jenkins.io/doc/book/pipeline/#scripted-pipeline-fundamentals) that is used to execute Pipelines (and any stages contained within it), on any available agent/node
+
+### Processes
+
+A process in Jenkins can be defined as the continuous integration and continuous delivery of builds, tests, analysis, and deployment of projects and any other scenario that can be automated. The steps in these processes are documented in the jenkinsfile which can be created manually or added automatically using Blue Ocean.
+
+Examples of nodes and processes in respect to declarative and scripted pipeline
+1. A scripted pipeline example can be found [here](https://www.jenkins.io/doc/book/pipeline/#scripted-pipeline-fundamentals)
+
+2. A declarative pipeline example can be found [here](https://www.jenkins.io/doc/book/pipeline/#declarative-pipeline-fundamentals), refer to the [Pipeline Syntax Snippet Generator](https://www.jenkins.io/doc/book/pipeline/getting-started/#snippet-generator) and for more information
+
+### Using multiple agents and setting labels
+
+It is possible to run Jenkins pipeline on multiple agents. Pipelines that can run on low resource can be paired with equal powered agents and high resource agents with equal powered pipelines to avoid unnecessarily long build time.
+
+A declarative pipeline with multiple agents:
+
+```
+pipeline {
+ agent none
+ stages {
+ stage('Build') {
+ agent any
+ steps {
+ checkout scm
+ sh 'make'
+ stash includes: '**/target/*.jar', name: 'app'
+ }
+ }
+ stage('Test on Linux') {
+ agent {
+ label 'linux'
+ }
+ steps {
+ unstash 'app'
+ sh 'make check'
+ }
+ post {
+ always {
+ junit '**/target/*.xml'
+ }
+ }
+ }
+ stage('Test on Windows') {
+ agent {
+ label 'windows'
+ }
+ steps {
+ unstash 'app'
+ bat 'make check'
+ }
+ post {
+ always {
+ junit '**/target/*.xml'
+ }
+ }
+ }
+ }
+}
+```
+A scripted pipeline with multiple agents
+
+```
+stage('Test') {
+ node('linux') {
+ checkout scm
+ try {
+ unstash 'app'
+ sh 'make check'
+ }
+ finally {
+ junit '**/target/*.xml'
+ }
+ }
+ node('windows') {
+ checkout scm
+ try {
+ unstash 'app'
+ bat 'make check'
+ }
+ finally {
+ junit '**/target/*.xml'
+ }
+ }
+}
+```
+Refer to this [article](https://docs.cloudbees.com/docs/admin-resources/latest/automating-with-jenkinsfile/using-multiple-agents) for a detailed explanation.
+
+## Changelog
+
+[Changelog](https://github.com/jenkinsci/workflow-durable-task-step-plugin/releases)
## License
diff --git a/src/main/resources/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStep/help-script.html b/src/main/resources/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStep/help-script.html
index 908c2653..f890f605 100644
--- a/src/main/resources/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStep/help-script.html
+++ b/src/main/resources/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStep/help-script.html
@@ -9,4 +9,36 @@
Otherwise the system default shell will be run, using the -xe
flags
(you can specify set +e
and/or set +x
to disable those).
Use the Pipeline Snippet Generator to generate a sample pipeline script for the sh step + A few examples of usage include:
+ + Creating an output folder +sh "mkdir -p output"
sh "ls -la ${pwd()}"
sh "curl -X POST --data-urlencode \'payload=${payload}\' ${slackURL}"
sh 'mvn test'
The triple-double-quote (""") string literal syntax allows for variable/expression substitution (interpolation), so the backslash (\) is interpreted as a special character "escape".
+Since the first open parentheses is not such a special character, Groovy compilation fails. If your intent is to have literal backslashes in the resulting string, you need to escape the backslashes. That is, use a double-backslash (\\) to substitute for one literal backslash
+Use the Pipeline Snippet Generator to generate this example
+sh ("""
+ sed "s/(AssemblyInformationalVersion\\(\\")(.*)(\\")/\\1${productVersion}\\3/g"
+ AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r
+ """)
+
For double quoted string, Groovy will do interpolation on the string firstly.
+Because the variables are runtime variables of the shell, rather than the variables of Groovy runtime. Groovy can't find the responding value from Groovy variable stack to replace the variables during interpolation.
+So you need to escape all $ if you use double quotes or simply use single quotes which does not support interpolation
+Use the Pipeline Snippet Generator to generate this example
+sh(returnStdout: true, script: "cd \$it; PLAN=\$(terragrunt plan --terragrunt-source-update | landscape);
+ echo \$PLAN; CHANGES=\$(echo \$PLAN | tail -2); echo \$CHANGES"