Hello
i was not able to fix this issue using CustomTool plugin, so the solution
was to get rid of it, and create a dedicated jenkins job to install/update
the SonarQube build wrapper tool.
In case it can help, find below an excerpt of the pipeline code, which
relies on File Operations && Pipeline Utility Steps plugins so that it is
OS agnostic (windows & unix).
This should be wrapped within a Pipeline job taking as parameter a string
"InstallOnLabel". Each node has a property "SONAR_BUILDWRAPPER_HOME"
defining installation folder.
properties(
[parameters([string(defaultValue: 'sonar', name: 'InstallOnLabel')])]
// will execute on all nodes having label
)
def nodes = nodesByLabel label: "${InstallOnLabel}"
nodes = nodes.sort()
Map tasks = [:]
for (int i = 0; i < nodes.size(); i++) {
def label = nodes[i]
tasks[label] = {
node(label) {
stage(label) {
stage("Install") {
withSonarQubeEnv('sonarqube-prod') {
_hostflavor = isUnix() ? "linux" : "win"
_bwDlUrl =
"${env.SONAR_HOST_URL}/static/cpp/build-wrapper-${_hostflavor}-x86.zip"
echo
"[INFO] Installing SonarQube ${_hostflavor} build-wrapper into
${env.SONAR_BUILDWRAPPER_HOME}/bin"
echo "[INFO] Downloading from ${_bwDlUrl}"
fileOperations([
folderDeleteOperation(folderPath:
"${env.SONAR_BUILDWRAPPER_HOME}"),
folderCreateOperation(folderPath:
"${env.SONAR_BUILDWRAPPER_HOME}"),
fileDownloadOperation(url: "${_bwDlUrl}",
targetFileName: 'build-wrapper-x86.zip', targetLocation: ".", userName: "",
password: ""),
fileUnZipOperation(filePath:
'build-wrapper-x86.zip', targetLocation: "${env.SONAR_BUILDWRAPPER_HOME}"),
folderRenameOperation(source:
"${env.SONAR_BUILDWRAPPER_HOME}/build-wrapper-${_hostflavor}-x86", destination:
"${env.SONAR_BUILDWRAPPER_HOME}/bin"),
])
}
}
stage("Validate") {
if (isUnix()) {
sh '''
set +e
ls -Rl ${SONAR_BUILDWRAPPER_HOME}
build-wrapper-linux-x86-64
(( $? == 10 )) && exit 0
'''
} else {
bat '''
dir /s "%SONAR_BUILDWRAPPER_HOME%"
build-wrapper-win-x86-64
if ERRORLEVEL 1 ( exit /b 0 )
exit /b 1
'''
}
}
}
}
}
}
timeout(time: 5, unit: 'MINUTES') {
parallel(tasks)
}
On Friday, 13 November 2020 at 17:21:07 UTC+1 [email protected] wrote:
> Hello
>
> I have a fairly large matrix job (30 environments).
>
> For one matrix environment only, I need to install a dedicated tool
> (Sonarqube build-wrapper).
> CustomTool works perfectly fine for this purpose.
>
> However, as CustomTool installation is defined as a build wrapper step, it
> get activated for all matrix environments, resulting in the tool being
> installed 30 times.
>
> As you can imagine, because several jobs are executed in // on the same
> machine, we regularly face some installation race conditions (mostly on
> windows) as one job is installing the tool and another one also tries to
> install it (and the first step of installation seems to be uninstalling)...
>
> Any recommendations on how to workaround this behavior?
>
> Maybe there could be an option not to fail in case of tool installation
> failure. But as the plugin seems "abandoned" it might not be a great idea
> to
> Elsewhere i'll switch to a manual install...
>
>
> [CustomTools] - scm-sonarqube-build-wrapper: Starting installation
> FATAL: Failed to install
> https://sonarqubeserver/sonarqube-prod/static/cpp/build-wrapper-win-x86.zip
> to
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper
> Also: Also: java.nio.file.AccessDeniedException:
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86\build-wrapper-win-x86-64.exe
> at
> sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
> at
> sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)
> at
> sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
> at java.nio.file.Files.deleteIfExists(Files.java:1165)
> at
> jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:237)
> Also: java.nio.file.AccessDeniedException:
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86\build-wrapper-win-x86-64.exe
> at
> sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
> at
> sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)
> at
> sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
> at java.nio.file.Files.deleteIfExists(Files.java:1165)
> at
> jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:241)
> jenkins.util.io.CompositeIOException: Unable to remove file
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86\build-wrapper-win-x86-64.exe
> at
> jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:252)
> at jenkins.util.io.PathRemover.tryRemoveFile(PathRemover.java:205)
> at jenkins.util.io.PathRemover.tryRemoveRecursive(PathRemover.java:216)
> at
> jenkins.util.io.PathRemover.tryRemoveDirectoryContents(PathRemover.java:226)
> at jenkins.util.io.PathRemover.tryRemoveRecursive(PathRemover.java:215)
> at
> jenkins.util.io.PathRemover.tryRemoveDirectoryContents(PathRemover.java:226)
> at
> jenkins.util.io.PathRemover.forceRemoveDirectoryContents(PathRemover.java:87)
> Also: Also: java.nio.file.DirectoryNotEmptyException:
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86
> at
> sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:266)
> at
> sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
> at java.nio.file.Files.deleteIfExists(Files.java:1165)
> at
> jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:237)
> Also: java.nio.file.DirectoryNotEmptyException:
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86
> at
> sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:266)
> at
> sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
> at java.nio.file.Files.deleteIfExists(Files.java:1165)
> at
> jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:241)
> jenkins.util.io.CompositeIOException: Unable to remove directory
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86
>
> with directory contents:
> [E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper\build-wrapper-win-x86\build-wrapper-win-x86-64.exe]
> at
> jenkins.util.io.PathRemover.removeOrMakeRemovableThenRemove(PathRemover.java:250)
> at jenkins.util.io.PathRemover.tryRemoveFile(PathRemover.java:205)
> at jenkins.util.io.PathRemover.tryRemoveRecursive(PathRemover.java:216)
> at
> jenkins.util.io.PathRemover.tryRemoveDirectoryContents(PathRemover.java:226)
> at
> jenkins.util.io.PathRemover.forceRemoveDirectoryContents(PathRemover.java:87)
> Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to
> JNLP4-connect connection from buildhost.company.com/10.0.60.52:61450
> at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1788)
> at
> hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:356)
> at hudson.remoting.Channel.call(Channel.java:998)
> at hudson.FilePath.act(FilePath.java:1069)
> at hudson.FilePath.act(FilePath.java:1058)
> at hudson.FilePath.deleteContents(FilePath.java:1280)
> at hudson.FilePath.installIfNecessaryFrom(FilePath.java:904)
> at hudson.FilePath.installIfNecessaryFrom(FilePath.java:850)
> at
> hudson.tools.ZipExtractionInstaller.performInstallation(ZipExtractionInstaller.java:83)
> at
> hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:69)
> at
> hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:109)
> at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:206)
> at
> com.cloudbees.jenkins.plugins.customtools.CustomTool.forNode(CustomTool.java:163)
> at
> com.cloudbees.jenkins.plugins.customtools.CustomToolInstallWrapper.decorateLauncher(CustomToolInstallWrapper.java:183)
> at
> hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:536)
> at
> hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:462)
> at hudson.model.Run.execute(Run.java:1880)
> at hudson.matrix.MatrixRun.run(MatrixRun.java:153)
> at hudson.model.ResourceController.execute(ResourceController.java:97)
> at hudson.model.Executor.run(Executor.java:428)
> jenkins.util.io.CompositeIOException: Unable to delete
> 'E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper'.
>
> Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.
> at
> jenkins.util.io.PathRemover.forceRemoveDirectoryContents(PathRemover.java:90)
> at hudson.Util.deleteContentsRecursive(Util.java:261)
> at hudson.FilePath$DeleteContents.invoke(FilePath.java:1286)
> at hudson.FilePath$DeleteContents.invoke(FilePath.java:1282)
> at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3073)
> at hudson.remoting.UserRequest.perform(UserRequest.java:211)
> at hudson.remoting.UserRequest.perform(UserRequest.java:54)
> at hudson.remoting.Request$2.run(Request.java:369)
> at
> hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:117)
> at java.lang.Thread.run(Thread.java:748)
> Caused: java.io.IOException: Failed to install
> https://sonarqubeserver/sonarqube-prod/static/cpp/build-wrapper-win-x86.zip
> to
> E:\j\tools\com.cloudbees.jenkins.plugins.customtools.CustomTool\scm-sonarqube-build-wrapper
> at hudson.FilePath.installIfNecessaryFrom(FilePath.java:937)
> at hudson.FilePath.installIfNecessaryFrom(FilePath.java:850)
> at
> hudson.tools.ZipExtractionInstaller.performInstallation(ZipExtractionInstaller.java:83)
> at
> hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:69)
> at
> hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:109)
> at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:206)
> at
> com.cloudbees.jenkins.plugins.customtools.CustomTool.forNode(CustomTool.java:163)
> at
> com.cloudbees.jenkins.plugins.customtools.CustomToolInstallWrapper.decorateLauncher(CustomToolInstallWrapper.java:183)
> at
> hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:536)
> at
> hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:462)
> at hudson.model.Run.execute(Run.java:1880)
> at hudson.matrix.MatrixRun.run(MatrixRun.java:153)
> at hudson.model.ResourceController.execute(ResourceController.java:97)
> at hudson.model.Executor.run(Executor.java:428)
>
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/093921b7-34b3-4022-a48d-fc1f21238683n%40googlegroups.com.