jenkinscurlyamlgithub-actions

Throwing an Error while triggering the Jenkins build in GitHub Actions


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>

Solution

  • 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:/*$::')