Jenkins does not install one particular CustomTool (already tried: extract ZIP, shell script)

225 views
Skip to first unread message

Amedee Van Gasse

unread,
Mar 5, 2021, 2:39:38 PM3/5/21
to Jenkins Users
I have defined a Custom Tool Tesseract, which extracts a ZIP file.

In my Scripted Pipeline, I have this code:

withEnv([
        "gsExec=$gsPath",
        "compareExec=$comparePath",
        "Path+TESSERACT=${tool name: 'Tesseract', type: 'com.cloudbees.jenkins.plugins.customtools.CustomTool'}"
]) {
    configFileProvider([configFile(fileId: GeneralVariables.mavenGlobalSettings, variable: 'MAVEN_SETTINGS')]) {
        withMaven(jdk: GeneralVariables.JDK_VERSION, maven: GeneralVariables.Maven) {
            sh 'echo $PATH'
            sh "mvn --global-settings ${MAVEN_SETTINGS.replace '\\', '/'} --no-transfer-progress --batch-mode install " +
                    "--activate-profiles test -DgsExec=\"$gsPath\" -DcompareExec=\"$comparePath\" -Dmaven.repo.local=.repository"
        }
    }

In my Jenkins Console Log, I see this output:

provisioning config files...
copy managed file [MyGlobalSettings] to file:/C:/Users/jenkins/workspace/run-cross-module-tests-java-QA-11580@tmp/config12082685466158235325tmp
[withMaven] Options: []
[withMaven] Available options: 
[withMaven] using JDK installation jdk-8-oracle
[withMaven] using Maven installation 'M3'
+ echo /c/Users/jenkins/tools/hudson.model.JDK/jdk-8-oracle/bin:/c/Users/jenkins/workspace/run-cross-module-tests-java-QA-11580@tmp/withMavend1394d3e:/c/Users/jenkins/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/Tesseract/Tesseract-OCR:/mingw64/bin:/c/program files/powershell/7:/c/Program Files/ImageMagick-7.0.11-Q16-HDRI:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Windows/System32/OpenSSH:/c/Program Files/Amazon/cfn-bootstrap:/c/ProgramData/chocolatey/bin:/c/Program Files/OpenSSH-Win64:/c/Program Files/dotnet:/cmd:/mingw64/bin:/usr/bin:/c/Program Files/OpenJDK/openjdk-11.0.10_9/bin:/c/ProgramData/chocolatey/lib/maven/apache-maven-3.6.3/bin:/c/Program Files/PowerShell/7:/c/Program Files/OpenJDK/openjdk-8u282-b08/bin:/c/Program Files/nodejs:/bin:/c/Windows/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps:/c/Users/jenkins/AppData/Local/Microsoft/WindowsApps
/c/Users/jenkins/tools/hudson.model.JDK/jdk-8-oracle/bin:/c/Users/jenkins/workspace/run-cross-module-tests-java-QA-11580@tmp/withMavend1394d3e:/c/Users/jenkins/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/Tesseract/Tesseract-OCR:/mingw64/bin:/c/program files/powershell/7:/c/Program Files/ImageMagick-7.0.11-Q16-HDRI:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Windows/System32/OpenSSH:/c/Program Files/Amazon/cfn-bootstrap:/c/ProgramData/chocolatey/bin:/c/Program Files/OpenSSH-Win64:/c/Program Files/dotnet:/cmd:/mingw64/bin:/usr/bin:/c/Program Files/OpenJDK/openjdk-11.0.10_9/bin:/c/ProgramData/chocolatey/lib/maven/apache-maven-3.6.3/bin:/c/Program Files/PowerShell/7:/c/Program Files/OpenJDK/openjdk-8u282-b08/bin:/c/Program Files/nodejs:/bin:/c/Windows/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps:/c/Users/jenkins/AppData/Local/Microsoft/WindowsApps
+ mvn --global-settings C:/Users/jenkins/workspace/run-cross-module-tests-java-QA-11580@tmp/config12082685466158235325tmp --no-transfer-progress --batch-mode install --activate-profiles test '-DgsExec=C:/Program Files/gs/gs9.53.3/bin/gswin64c.exe' '-DcompareExec=C:/Program Files/ImageMagick-7.0.11-Q16-HDRI/compare.bat' -Dmaven.repo.local=.repository

The PATH variable contains the Tesseract directory, /c/Users/jenkins/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/Tesseract/Tesseract-OCR.

I don't see anything in the log that actually tells me that a CustomTool is actually installed.

Further down in the logging, I see that Tesseract isn't found:

***REDACTED***.tesseract4.TesseractHelper ERROR Command failed: Cannot run program "tesseract": CreateProcess error=2, The system cannot find the file specified
***REDACTED***.tesseract4.Tesseract4ExecutableOcrEngine ERROR Tesseract failed. Please check that tesseract is installed and provided path to tesseract executable directory is correct

Indeed, when I verify the directories on the node itself, I see that the Tesseract directory is missing:

ls C:\Users\jenkins\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\ 

    Directory: C:\Users\jenkins\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool 

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----            3/5/2021  6:39 PM                InspectHeaders

So let me repeat this very clearly: the PATH value is correct, but the actual directory does not exist.

InspectHeaders is the only CustomTool that is installed (earlier in the pipeline, with a shell script). Tesseract, which should be extracted from a ZIP file, is not installed.

I have several other nodes: on Linux, it is successfully installed with apt-get install; and on another Windows node, it is also successfully installed from a ZIP file.

Already tried: replace installation from ZIP with installation from shell script:

#!/bin/sh
set -e

TOOL=Tesseract-OCR.zip

if test ! -x "${TOOL}" ; then
  curl https://repo.itextsupport.com/files/tools/"${TOOL}" --output "${TOOL}" --silent
  unzip "${TOOL}"
fi

Same result: CustomTool is added to the PATH, but isn't actually installed.

My question is: how do I tell Jenkins to install this CustomTool, no matter what?

Amedee Van Gasse

unread,
Mar 8, 2021, 5:34:19 AM3/8/21
to Jenkins Users
Case closed.

I'm now pre-installing the tool on the node using Ansible, which installs it in C:\Program Files instead of C:\Users\jenkins\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\.
Then I'm setting the path to the custom tool on the node configuration.
That works.

Reply all
Reply to author
Forward
0 new messages