I am creating bash file in which i want to access only one environment variable of Jenkins i.e GIT_COMMIT.
$GIT_COMMIT should be available from your "Execute shell" build step.
Related
I need to access system environment variable from my Jenkins file. I know that there are some predefined variables (e.g. JOB_NAME or BUILD_NUMBER), but I need to access custom environment variable which I set previously. What are the way to do this? It seems that env.MY_VARIABLE and env['MY_VARIABLE'] but those don't work. I need this to have access to the variable which would be specified during the pipeline build inside a bash script. Probably there are more convenient ways to pass information from bash script to Jenkins file, which called this bash script.
You access environment variables like ${DB_ENGINE} or $DB_ENGINE from bash or in your Groovy job/pipeline DSL script where DB_ENGINE is the custom environment variable you set.
Check documentation.
I have a TeamCity environment variable env.TIER_SUFFIX whose value is set as A. I want to be able to use this in my script build step where the script content is
#!/bin/bash
tierSuffix=%env.TIER_SUFFIX%
echo "TierSuffix is [${'$'}tierSuffix]"
export ENV_TIER=%env.DEV_tierSuffix%
The build fails because export ENV_TIER=%env.DEV_tierSuffix% creates env.DEV_ and the build stops. Is there a way to use this in the export command so that it substitutes the value of %env.DEV_A% to ENV_TIER
The way I use TeamCity variables in bash scripts is:
buildCounter="%build.counter%"
where build.counter is TeamCity variable.
How can I make Jenkins use Bash rather than its native shell for just one Jenkins pipeline/Jenkinsfile? Does the "agent" help me to do this?
I wrote a shell script for deployment but some of the parameters contain whitespace which messes up the resulting command I generate by losing some args. I've found how to avoid this problem by globally configuring Jenkins shell type to be Bash. But when I change the global shell type, my other Jenkins pipelines that use the Jenkins docker plugin syntax get broken when they use the 'sh' command within a docker container. My workaround is to ping pong the global setting for shell type depending on which Jenkins build I want to run. Its a royal PITA.
I'm embarrassed to say all I needed was a shebang.
My Jenkinsfile runs a custom (bash) shell script, using Jenkin's sh command, like in the following:
sh "./deploy.sh \"arg1\" \"arg 2\" \"arg3\""
In order to force deploy.sh to run within Bash, the contents of deploy.sh need to include #!/bin/bash on the first line, as in:
#!/bin/bash
echo "deploy args: $#"
Regardless, I think there should be a way to tell a Jenkins pipeline that it should run with specific settings, like sh=bash.
I am not able to get output of the Environment-Variable BUILD_URL through Shell command.
Configured Manage Jenkins-->Configure System-->Jenkins Location-->Jenkins URL as http://xxx.xxx.xxx.xxx:8080/
Using below script within Shell command.
#!/bin/bash
echo ${BUILD_URL}
Do i have to set jenkins_url within the script?
In a Shell you can't access environment variables like that. you will need to read here: https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps.
What you can do is in the Jenkins's job session you can send a parameter to your script to gain access to the env parameter. in the Shell section you will have access to the environment parameter, in the script itself it'll work differently.
Good luck
I am running a shell script from make environment
I execute the script with input parameters as make variables:
/shell_script.sh $(make_var1) $(make_var2)
I process these variables in shell. I want to assign the result from a shell command to the make variable and export back to shell.
make_var=shell_command
How can I do this?
It is not trivial to change the parent environment of a shell-script, one approach is to echo the export statements and source the output of the script in your parent environment:
...
echo "export make_var1=${make_var1}"
...
and when you launch your script do it using eval:
eval $(./shell_script.sh $make_var1 $make_var2)
this is the approach taken by for example ssh-agent.
A second option is to source the script, in that case the script will be run line-by-line in the current shell:
. shell-script.sh
any export statements in the script will be run in the current shell.