Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix variable interpolation on different examples #119

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions declarative-examples/jenkinsfile-examples/mavenDocker.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,11 @@ pipeline {
* Multiline strings can be used for larger scripts. It is also possible to put scripts in your shared library
* and load them with 'libaryResource'
*/
sh """
sh '''
docker build -t ${IMAGE} .
docker tag ${IMAGE} ${IMAGE}:${VERSION}
docker push ${IMAGE}:${VERSION}
"""
'''
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ node {
echo "Building flavor ${flavor}"

//build your gradle flavor, passes the current build number as a parameter to gradle
sh "./gradlew clean assemble${flavor}Debug -PBUILD_NUMBER=${env.BUILD_NUMBER}"
sh './gradlew clean assemble${flavor}Debug -PBUILD_NUMBER=${BUILD_NUMBER}'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

${flavor} isn't an environment variable (BRANCH_NAME is) so this won't work. Use withEnv.


stage 'Stage Archive'
//tell Jenkins to archive the apks
archiveArtifacts artifacts: 'app/build/outputs/apk/*.apk', fingerprint: true

stage 'Stage Upload To Fabric'
sh "./gradlew crashlyticsUploadDistribution${flavor}Debug -PBUILD_NUMBER=${env.BUILD_NUMBER}"
sh './gradlew crashlyticsUploadDistribution${flavor}Debug -PBUILD_NUMBER=${BUILD_NUMBER}'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As above.

}

// Pulls the android flavor out of the branch name the branch is prepended with /QA_
Expand Down
7 changes: 5 additions & 2 deletions jenkinsfile-examples/msbuild/Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ node {

stage 'Build'
bat 'nuget restore SolutionName.sln'
bat "\"${tool 'MSBuild'}\" SolutionName.sln /p:Configuration=Release /p:Platform=\"Any CPU\" /p:ProductVersion=1.0.0.${env.BUILD_NUMBER}"

bat """
setlocal enabledelayedexpansion
\"${tool 'MSBuild'}\" SolutionName.sln /p:Configuration=Release /p:Platform=\"Any CPU\" /p:ProductVersion=1.0.0.!BUILD_NUMBER!
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you test this?

Even if it works, I'm unsure whether we should do it like this, as it doesn't provide an example of safe Pipeline authoring. There's still the double quote.

endlocal
"""
Comment on lines +7 to +11
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps something like

Suggested change
bat """
setlocal enabledelayedexpansion
\"${tool 'MSBuild'}\" SolutionName.sln /p:Configuration=Release /p:Platform=\"Any CPU\" /p:ProductVersion=1.0.0.!BUILD_NUMBER!
endlocal
"""
def msbuild = tool 'MSBuild'
bat msbuild + " SolutionName.sln /p:Configuration=Release /p:Platform="Any CPU" /p:ProductVersion=1.0.0.%BUILD_NUMBER%"

Granted, this theoretically still has the problem described in https://plugins.jenkins.io/safe-batch-environment-filter/ but we know that %BUILD_NUMBER% is numeric. Perhaps mention it and move on?

stage 'Archive'
archive 'ProjectName/bin/Release/**'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ node {
// via 'name' given for the field, 'variable:'
configFileProvider([configFile(fileId: mycfg_file, variable: 'PACKER_OPTIONS')]) {
echo " =========== ^^^^^^^^^^^^ Reading config from pipeline script "
sh "cat ${env.PACKER_OPTIONS}"
sh 'cat ${PACKER_OPTIONS}'
echo " =========== ~~~~~~~~~~~~ ============ "

// Access to config file opens up other possibilities like
// passing on the configuration to an external script for other tasks, like,
// for example, to set generic options that can be used for generating
// binary images using packer.
echo " =========== ^^^^^^^^^^^^ Reading config via Python... "
sh "python build_image.py ${env.PACKER_OPTIONS}"
sh 'python build_image.py ${PACKER_OPTIONS}'
echo " =========== ~~~~~~~~~~~~ ============ "
}
}
Expand Down
4 changes: 3 additions & 1 deletion pipeline-examples/slacknotify/slackNotify.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ def notifySlack(text, channel) {
channel : channel,
username : "jenkins",
icon_emoji: ":jenkins:"])
sh "curl -X POST --data-urlencode \'payload=${payload}\' ${slackURL}"
withEnv(["PAYLOAD=${payload}", "SLACK_URL=${slackURL}"]) {
sh 'curl -X POST --data-urlencode "payload=$PAYLOAD" $SLACK_URL'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
sh 'curl -X POST --data-urlencode "payload=$PAYLOAD" $SLACK_URL'
sh 'curl -X POST --data-urlencode "payload=$PAYLOAD" "$SLACK_URL"'

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ node('second-node') {
}

// Look, no output directory under the root!
// pwd() outputs the current directory Pipeline is running in.
sh "ls -la ${pwd()}"
// PWD outputs the current directory Pipeline is running in.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kind of, but not really? The result is the same, assuming you use a shell that supports it, but this won't demonstrate the pwd() Pipeline feature. The phrasing seems off for the case where we just use a shell built-in feature.

(Granted, both the existing Pipeline and this one are really artificial, neither $PWD nor pwd() are actually needed.)

sh 'ls -la ${PWD}'

// And look, output directory is there under first-stash!
sh "ls -la ${pwd()}/first-stash"
sh 'ls -la ${PWD}/first-stash'
}