GoCD run bash script on Pipeline - bash

I got a pipeline called Funcional_Test, I'm trying to run on that pipeline a script located in this path: /home/vagrant/VirtualMachines/software_test.sh
This is te configuration:
When I run the pipeline I got these errors:
Am I missing something? What can I do to fix the issue?

Mention /bin/sh in Command (change it depends on the script type)
Mention the script file in Arguments section in same line

Related

Gitlab CI/CD runner : mvn command not found

Maven is well installed on my gitlab-runner server. When executing mvn clean directly on my repo it works, when running my pipeline using Gitlab UI got this error :
bash: line 60: mvn: command not found
ERROR: Job failed: exit status 1
I notice that I tried to fix the problem by adding the before_script section in the .gitlab-ci.yml file :
before_script:
- export MAVEN_HOME=/usr/local/apache-maven
I add also the line :
environment = ["MAVEN_HOME=/usr/local/apache-maven"]
on the config.toml file.
the problem still persist, my executor is : shell.
Any advice!
I managed to fix the problem using this workaround:
script:
- $MAVEN_HOME/bin/mvn clean
Just add the maven docker image, add below line as first line:
image: maven:latest or image: maven:3-jdk-10 or image: maven:3-jdk-9
refer: https://docs.gitlab.com/ee/ci/examples/artifactory_and_gitlab/
For anyone experiencing similar issues, it might be a good idea to restart the gitlab runner ".\gitlab-runner.exe restart". Especially after fiddling with environmental variables.
There is an easier way:
Making changes in ~/.bash_profile not ~/.bashrc.
According to this document:
.bashrc it is more common to use a non-login shell
This document saying:
For certain executors, the runner passes the --login flag as shown above, which also loads the shell profile.
So it should not be ~/.bashrc, you can also try ~/.profile which It can hold the same configurations, which are then also accessible by other shells
In my scenario I do following things:
1. Set gitlab-runner's user password.
passwd gitlab-runner
2. Login gitlab-runner.
su - gitlab-runner
3. Make changes in .bash_profile
Add maven to PATH:
$ export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.9
$ export M2=$M2_HOME/bin
$ export PATH=$M2:$PATH
You can include these commands in $HOME/.bashrc
I hope you had figure out your question. I met the same question when I build my ci on my server.
I use the shell as the executer for my Runner.
here are the steps to figure out.
1 check the user on the runner server
if you had install maven on the runner server successfully, maybe it just successful for the root, u can check the real user for the ci process.
job1:
stage: test
script: whoami
if my case, it print gitlab-runner, not the root
2 su the real user, check mvn again
In this time, it print error as same as the Gitlab ci UI.
3 install maven for the real user. run the pipeline again.
You can also use as per below in the .gitlab-ci.yml
before_script:
- export PATH=$PATH:/opt/apache-maven-3.8.1/bin

Jenkins Blue Ocean ./gradlew: No such file or directory

I am having trouble getting Blue Ocean to recognize where my default gradle folder is on my Mac OSX. I have GRADLE_HOME set to /opt/gradle.
I keep getting the following error message when running my shell script ./gradlew assembleDebug:
/Users/me/.jenkins/workspace/project#tmp/durable-d97717dc/script.sh:
line 2: ./gradlew: No such file or directory
script returned exit code 1
I could see two reasons for that error:
Your script is not executed in the folder where your gradlew lays.
The gradlew has not set the correct permissions set for the calling user.
Adding a check for existing and the correct permissions on the file to execute could help you to sort these problems out.

Cannot run `source` in AWS Codebuild

I am using AWS CodeBuild along with Terraform for automated deployment of a Lambda based service. I have a very simple buildscript.yml that accomplishes the following:
Get dependencies
Run Tests
Get AWS credentials and save to file (detailed below)
Source the creds file
Run Terraform
The step "source the creds file" is where I am having my difficulty. I have a simply bash one-liner that grabs the AWS container creds off of curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI and then saves them to a file in the following format:
export AWS_ACCESS_KEY_ID=SOMEACCESSKEY
export AWS_SECRET_ACCESS_KEY=MYSECRETKEY
export AWS_SESSION_TOKEN=MYSESSIONTOKEN
Of course, the obvious step is to simply source this file so that these variables can be added to my environment for Terraform to use. However, when I do source /path/to/creds_file.txt, CodeBuild returns:
[Container] 2017/06/28 18:28:26 Running command source /path/to/creds_file.txt
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: source: not found
I have tried to install source through apt but then I get an error saying that source cannot be found (yes, I've run apt update etc.). I am using a standard Ubuntu image with the Python 2.7 environment for CodeBuild. What can I do to either get Terraform working credentials for source this credentials file in Codebuild.
Thanks!
Try using . instead of source. source is not POSIX compliant. ss64.com/bash/source.html
CodeBuild now supports bash as your default shell. You just need to specify it in your buildspec.yml.
env:
shell: bash
Reference: https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax
The AWS CodeBuild images ship with a POSIX compliant shell. You can see what's inside the images here: https://github.com/aws/aws-codebuild-docker-images.
If you're using specific shell features (such as source), it is best to wrap your commands in a script file with a shebang specifying the shell you'd like the commands to execute with, and then execute this script from buildspec.yml.
build-script.sh
#!/bin/bash
<commands>
...
buildspec.yml (snippet)
build:
commands:
- path/to/script/build-script.sh
I had a similar issue. I solved it by calling the script directly via /bin/bash <script>.sh
I don't have enough reputation to comment so here it goes an extension of jeffrey's answer which is on spot.
Just in case if your filename starts with a dot(.), the following will fail
. .filename
You will need to qualify the filename with directory name like
. ./.filename

Vagrant up - execute sh file fails

I have a simple vagrant file which calls sh file in the provision phase:
Inside script.sh I have wget command that fails with error 403 (Forbidden).
Same error I get when running the script manually from the VM. But If I create new sh file with the SAME CONTENT, then wget will pass successfully!
*I know there is several ways in vagrant to do provisions, but please stick on this specific use case.
Your help is much appreciated.
I found the root cause of this strange behaviour.
Since I have created the sh file in MAC env it was not compatible with unix line endings format. running "dos2unix script.sh".
For detialed information visit:
http://dos2unix.sourceforge.net/

cordova: command not found from Jenkins

I'm trying to setup Jenkins to build a cordova 3.4 project but I'm getting a 'command not found' error when I try to run 'cordova prepare' as an Execute Shell command in Jenkins. I know cordova is installed on the machine but I don't know how to add it so that Jenkins can find it.
Can anyone help?
Best way to modify PATH is to go to Jenkins global (or slave) configuration and add environment variable PATH and it's desired value under "Environment variables" section.
Try this: https://stackoverflow.com/a/30905787/6437038
TLDR: add #!/bin/bash -l in the beginning of the jenkins job

Resources