I'm trying to create a linux script and run that in Azure devops as bash task .
My script is running fine when I add the code as inline Option but while trying to give the script as filePath ,the variables $(System.DefaultWorkingDirectory) and $(Release.PrimaryArtifactSourceAlias) variables inside the script is failing as Unable to get the variables .
How to pass the script as filePath and how to access the two variables if I pass the filepath and not as inline option.
When you pass the script as inline value, the pipeline engine automatically replaces $(System.DefaultWorkingDirectory) with the correct value.
When you run a script file, the engine doesn't analyze or change it, so it wont replace the variables. But the variables are still available, as environment variables. So $(System.DefaultWorkingDirectory) should become $SYSTEM_DEFAULTWORKINGDIRECTORY. This will work for inline script as well.
Related
I tried so many key words:
use source
nothing in front of the path
use
# set -a # automatically export all variables
'./../private/some-cred.sh'
# set +a
None of them allow me to import some private creds into the .env file that will be ran by fastlane Dotenv.overload './config/.env.qa'
Current files:
./config/.env.qa
# source './../private/fastlane-cred.sh'
# APPLE_API_KEY_ID=$APPLE_API_KEY_ID_PRIVATE
./private/some-cred.sh
export APPLE_API_KEY_ID_PRIVATE="AAA"
When this setup got loaded into bitrise (which is in ./ios/) via Dotenv.overload './config/.env.qa'
The value will be considered as empty.
Any idea what else I should do, in order to allow me to load some variables from a file into .env properly so its recognized?
NOTE: path is correct. because I had a file ref defined within .env file and it was loaded in the bitrise ENV var correctly. but not for variables.
What is important to know about the "dotenv" paradigm is that the various "dotenv" implementations are mimicking a shell environment instead of actually being a shell environment. As they are run from inside the application, written in a non-shell language - it is far too late at this point to use the shell to setup environment variables. The "dotenv" libraries aren't even actually changing the process's environment - they just use the runtime's API to store data in such a way that other code that uses the runtime's environment access API will see it as if it's coming from the environment.
The fastlane system uses the dotenv gem which uses an internal parser (based on regular expressions) to parse a file that looks like a shell file (containing only variable assignment) but isn't an actual shell file. Everything there that doesn't look like a naive shell variable assignment is ignored - the dotenv file isn't actually a shell script and isn't treated like a shell script, so you can't put shell scripting commands in it and expect it to work.
If you really want to use shell scripting to setup your environment - then use a wrapper shell script to start your environment (or a Makefile) instead of using the application's internal "dotenv" support - which as I explained above, isn't actually a shell script.
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.
Can I access VSTS Build Definition Secret Variables (password type variables) into shell script file directly without passing arguments?
No, you need to pass VSTS build variables as arguments into shell script file.
For inline script, you can use VSTS build variables (no matter secret variables or non-secret variables) directly by using the format $(variableName).
For File path script, you use the pass VSTS build variables as arguments, so that the variables can be recognized in the shell script file.
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 did the following from a bash shell.
export myPath="/home/user/dir"
Then I verified the value of this by 'echo'ing this value from both shell and a inside a bash script. Both worked fine.
Then I tried setting the value of this variable from inside a script like this.
myPath="/home/user/newdir"
and tried printing this variable from shell. I thought the variable will hold the updated value, but it was showing the old value.
How can I update the value from a script? I am looking to do it without using source if possible.
To make the variables persist after the script finishes, you have to run it using the source command:
When a script is run using source it runs within the existing shell, any variables created or modified by the script will remain available after the script completes. In contrast if the script is run just as filename, then a separate subshell (with a completely separate set of variables) would be spawned to run the script.