I am doing an GitHub Actions workflow that triggers the build in Jenkins. Below are the files are created that triggers the build.
config.json
:
{
"buildConfig": {
"jobName": "subbu_project"
}
}
trigger_build.yml
in GitHub workflows:
---
name: Trigger Jenkins Build
on:
push:
branches:
- "main"
jobs:
trigger-jenkins:
runs-on: self-hosted
steps:
- name: Trigger Jenkins Build
shell: bash
env:
JENKINS_URL: ${{ secrets.JENKINS_URL || 'http://localhost:8080' }}
JENKINS_USER: ${{ secrets.JENKINS_USER || 'subbaramaiah_chevuru' }}
JENKINS_API_TOKEN: ${{ secrets.JENKINS_API_TOKEN }}
JOB_NAME: ${{ env.JOB_NAME || 'subbu_project' }}
BUILD_NUMBER: ${{ env.BUILD_NUMBER || '001' }}
DEPLOY_ENVIRONMENT: development
run: |
# Trim trailing slashes from JENKINS_URL
TRIMMED_JENKINS_URL=$(echo "$JENKINS_URL" | sed 's:/*$::')
# Clean job name (no need to modify)
CLEAN_JOB_NAME="$JOB_NAME"
# Construct the full URL
FULL_URL="${TRIMMED_JENKINS_URL}/job/${CLEAN_JOB_NAME}/build"
echo "Full URL: $FULL_URL"
# Execute the curl command to trigger the Jenkins build
echo "Executing curl command:"
curl -v "$FULL_URL" \
--user "$JENKINS_USER:$JENKINS_API_TOKEN" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "BUILD_NUMBER=$BUILD_NUMBER" \
--data-urlencode "DEPLOY_ENVIRONMENT=$DEPLOY_ENVIRONMENT"
Do you have a Jenkins instance running at localhost:8080 on that self-hosted runner? - Asked by @Azeem
I have installed and started the Jenkins
and Action Runner
in the PowerShell WSL and below is the output
in the GitHub Action
[trigger-jenkins][1] :
Full URL: ***/job/subbu_project/build
Executing curl command:
* Trying 192.168.241.134:8080...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 192.168.241.134 (192.168.241.134) port 8080 (#0)
* Server auth using Basic with user '***'
> POST /job/subbu_project/build HTTP/1.1
> Host: 192.168.241.134:8080
> Authorization: Basic Y2hldnVydV9zdWJiYXJhbWFpYWg6***
> User-Agent: curl/7.81.0
> Accept: */*
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 47
>
} [47 bytes data]
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Date: Fri, 30 Aug 2024 16:35:24 GMT
< X-Content-Type-Options: nosniff
< Set-Cookie: remember-me=; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0
* Authentication problem. Ignoring this.
< WWW-Authenticate: Basic realm="Jenkins"
< Cache-Control: must-revalidate,no-cache,no-store
< Content-Type: text/html;charset=iso-8859-1
< Content-Length: 473
< Server: Jetty(10.0.20)
<
{ [473 bytes data]
100 520 100 473 100 47 2126 211 --:--:-- --:--:-- --:--:-- 2407
* Connection #0 to host 192.168.241.134 left intact
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 401 Unauthorized</title>
</head>
<body><h2>HTTP ERROR 401 Unauthorized</h2>
<table>
<tr><th>URI:</th><td>/job/subbu_project/build</td></tr>
<tr><th>STATUS:</th><td>401</td></tr>
<tr><th>MESSAGE:</th><td>Unauthorized</td></tr>
<tr><th>SERVLET:</th><td>Stapler</td></tr>
</table>
<hr/><a href="https://eclipse.org/jetty">Powered by Jetty:// 10.0.20</a><hr/>
</body>
</html>
##[debug]Finishing: Trigger Jenkins Build
By executing the command in locally
also I am getting the same error as Error
:
$ curl -v "http://192.168.241.134:8080/job/subbu_project/build" \
> --user "subbaramaiah_chevuru:11514daba6c763a40b32e7123eef7e78f1" \
> --header "Jenkins-Crumb:3756f301ef6d0c8d22026bf7c6ba198c3e9a71f63ef9366ea7d81d124a85905f" \
> --header "Content-Type: application/x-www-form-urlencoded" \
> --data-urlencode "BUILD_NUMBER=001" \
> --data-urlencode "DEPLOY_ENVIRONMENT=development"
* Trying 192.168.241.134:8080...
* Connected to 192.168.241.134 (192.168.241.134) port 8080 (#0)
* Server auth using Basic with user 'subbaramaiah_chevuru'
> POST /job/subbu_project/build HTTP/1.1
> Host: 192.168.241.134:8080
> Authorization: Basic c3ViYmFyYW1haWFoX2NoZXZ1cnU6MTE1MTRkYWJhNmM3NjNhNDBiMzJlNzEyM2VlZjdlNzhmMQ==
> User-Agent: curl/7.81.0
> Accept: */*
> Jenkins-Crumb:3756f301ef6d0c8d22026bf7c6ba198c3e9a71f63ef9366ea7d81d124a85905f
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 47
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Sat, 31 Aug 2024 09:46:22 GMT
< X-Content-Type-Options: nosniff
< Cache-Control: no-cache,no-store,must-revalidate
< Set-Cookie: JSESSIONID.11122400=node01rcar0q76b0tu6bqi1ddd7tff18.node0; Path=/; HttpOnly
< Expires: 0
< Content-Type: text/html;charset=utf-8
< X-Hudson-Theme: default
< Referrer-Policy: same-origin
< Cross-Origin-Opener-Policy: same-origin
< X-Hudson: 1.395
< X-Jenkins: 2.462.1
< X-Jenkins-Session: d1c5dd84
< X-Frame-Options: sameorigin
< X-Instance-Identity: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqhFMW++j5WAbGASVHTzI/xzPeWWXb/F6xfqeGQJCLFEZq7l0AtoAjiH9I4uPwDK94FtA+9orMy2VbJa/cZELSyZbfNHeeZVXEa4xgzeyLzQD+g1SWNpvvDWqpPbV8BvwWCSA21gZ3TqQ5/oqkcMfR3fmtLKp2aWn8YTxBuxRzirKz6o8VfwsiMDF5oU0bnxsYm4kJ8hdsQTwuvMA7kU5BlotTFA7hT5hbAKocpnBU9Ybi2pL48AwXSktWrBKbNnsUz9KA/gMgmc7OkxiLYjEo6TB2i90XS9f38plNjUuZ7b6D1oXbDj0FRw5SHteIchtwGoLh9bkAYH4FQkocSYMQIDAQAB
< Transfer-Encoding: chunked
< Server: Jetty(10.0.20)
<
<!DOCTYPE html><html><head resURL="/static/d1c5dd84" data-rooturl="" data-resurl="/static/d1c5dd84" data-extensions-available="true" data-unit-test="false" data-imagesurl="/static/d1c5dd84/images" data-crumb-header="Jenkins-Crumb" data-crumb-value="ccf807f121e6e11d15597f94a9211501049538c9739b6bfe709c228a1d152534">
<title>Not Found [Jenkins]</title>
Looking at the code, I can infer that the only source of unexpected double quote is ${{ secrets.JENKINS_USER }} or ${{ secrets.JENKINS_API_TOKEN }}
To support a double quote in either of these values, try enclosing --user argument in single quotes:
--user '${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_API_TOKEN }}'
Another issue here is this line:
TRIMMED_JENKINS_URL=$(echo "${{ secrets.JENKINS_URL }}" | sed 's:/*$::')
echo will add '\n' to the url and sed will pass it through. This will cause the error you see.
A better option would be
TRIMMED_JENKINS_URL=$(echo -n "${{ secrets.JENKINS_URL }}" | sed 's:/*$::')