Latest jenkins/jenkins:lts-jdk11 image update is affecting pip install

Hello, We are facing issues with the Jenkins Image builds since the last update(6 days ago) of the docker image “jenkins/jenkins:lts-jdk11”, where all our pip install packages actions are failing. For example,

Step 13/16 : RUN pip install pipenv black coverage pytest
5024 —> Running in 18df19228aa1
5025 error: externally-managed-environment
5026
5027 × This environment is externally managed
5028 ╰─> To install Python packages system-wide, try apt install
5029 python3-xyz, where xyz is the package you are trying to
5030 install.
5031
5032 If you wish to install a non-Debian-packaged Python package,
5033 create a virtual environment using python3 -m venv path/to/venv.
5034 Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
5035 sure you have python3-full installed.
5036
5037 If you wish to install a non-Debian packaged Python application,
5038 it may be easiest to use pipx install xyz, which will manage a
5039 virtual environment for you. Make sure you have pipx installed.
5040
5041 See /usr/share/doc/python3.11/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
5044 hint: See PEP 668 for the detailed specification.
5045 The command ‘/bin/sh -c pip install pipenv black coverage pytest’ returned a non-zero code: 1
5046
5047 [Container] 2023/08/28 22:41:13 Command did not exit successfully docker build -t $JENKINS_controller_IMAGE_REPO_NAME:$DEFAULT_IMAGE_TAG controller_files/. exit status 1
5048 [Container] 2023/08/28 22:41:13 Phase complete: BUILD State: FAILED
5049 [Container] 2023/08/28 22:41:13 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker build -t $JENKINS_controller_IMAGE_REPO_NAME:DEFAULT_IMAGE_TAG master_files/.. Reason: exit status 1 5050 [Container] 2023/08/28 22:41:13 Entering phase POST_BUILD 5051 [Container] 2023/08/28 22:41:13 Running command echo Build completed on (date)

Note: The Jenkins image builds use to be successful earlier and there are no changes to our Docker file and the same was working before the update of the Docker image “jenkins/jenkins:lts-jdk11”(6 days ago).

Any Idea on what is going wrong and why is the Docker image build fails? We would appreciate any help in this regards.

debian (or pip itself, I did not research that further) changed to disallowing system installs. Do what the output suggests and use a virtualenv. for any pip installs.
( and the first google hit with this error is: python - How do I solve "error: externally-managed-environment" everytime I use pip3? - Stack Overflow). It has further options…

1 Like

Hi @cloudy and welcome back to this community :wave:

I’d like to bring to your attention that in the latest LTS version, Debian Bookworm has been adopted, and as astutely pointed out by @bpedersen2, system installs are no longer feasible.

Interestingly, this significant alteration was not explicitly highlighted in the changelog of the latest LTS image. Following a discussion with the infrastructure team, they promptly updated the documentation to reflect this change. This proactive step will ensure that other users are well-informed regarding this adjustment and can better comprehend the reasons behind any issues they encounter.

Thank you so much for your feedback.

1 Like

Thank you @bpedersen2 and @poddingue for your quick response. I believe, this applies to the non-debian as well in disallowing system installs.

1 Like

The changelog you linked is not the official changelog. The switch from Debian 11 (bullseye) to Debian 12 (bookworm) is highlighted in the official changelog where it says:

Update Debian images to version 12.0 (bookworm). (Docker pull request 1687)

1 Like

My bad, Mark.
Thanks for correcting.
I thought the Docker image changelog was only part of the Docker repo. :person_shrugging:

@dduportal we now have the answer to the question we were asking ourselves earlier.
I should have checked before giving a wrong answer. :blush:

Hi @poddingue, We tried setting up a virtual environment and then installing the dependencies using pip and it all went through successfully with the docker build. However the docker run is having issues and the Jenkins service failed. Following is the error log,

2023-09-05 15:30:48.737+0000 [id=38] SEVERE jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init
java.lang.IllegalArgumentException: Cloud must have a unique non-empty name.
at org.apache.commons.lang.Validate.notEmpty(Validate.java:321)
at hudson.slaves.Cloud.(Cloud.java:121)
at com.cloudbees.jenkins.plugins.amazonecs.ECSCloud.(ECSCloud.java:102)
Caused: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.tryConstructor(DataBoundConfigurator.java:181)
Caused: io.jenkins.plugins.casc.ConfiguratorException: ecs: Failed to construct instance of class com.cloudbees.jenkins.plugins.amazonecs.ECSCloud.
Constructor: public com.cloudbees.jenkins.plugins.amazonecs.ECSCloud(java.lang.String,java.lang.String,java.lang.String,java.lang.String).
Arguments: [java.lang.String, java.lang.String, null, java.lang.String].
Expected Parameters: name java.lang.String, credentialsId java.lang.String, assumedRoleArn java.lang.String, cluster java.lang.String
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.tryConstructor(DataBoundConfigurator.java:203)
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.instance(DataBoundConfigurator.java:75)
at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:274)
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.configure(DataBoundConfigurator.java:81)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$doConfigure$16668e2$1(HeteroDescribableConfigurator.java:299)
at io.vavr.CheckedFunction0.lambda$unchecked$52349c75$1(CheckedFunction0.java:247)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.doConfigure(HeteroDescribableConfigurator.java:299)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$2(HeteroDescribableConfigurator.java:86)
at io.vavr.control.Option.map(Option.java:392)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$3(HeteroDescribableConfigurator.java:86)
at io.vavr.Tuple2.apply(Tuple2.java:238)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:84)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:92)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:55)
at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:355)
at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:293)
at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$9(ConfigurationAsCode.java:797)
at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:731)
Caused: io.jenkins.plugins.casc.ConfiguratorException: jenkins: error configuring ‘jenkins’ with class io.jenkins.plugins.casc.core.JenkinsConfigurator configurator
at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:737)
at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:797)
at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:783)
at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:652)
at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:314)
at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:306)
Caused: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:109)
Caused: java.lang.Error
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:115)
at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:185)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
at jenkins.model.Jenkins$5.runTask(Jenkins.java:1166)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
2023-09-05 15:30:48.740+0000 [id=24] SEVERE hudson.util.BootFailure#publish: Failed to initialize Jenkins
java.lang.IllegalArgumentException: Cloud must have a unique non-empty name.
at org.apache.commons.lang.Validate.notEmpty(Validate.java:321)
at hudson.slaves.Cloud.(Cloud.java:121)
at com.cloudbees.jenkins.plugins.amazonecs.ECSCloud.(ECSCloud.java:102)
Caused: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.tryConstructor(DataBoundConfigurator.java:181)
Caused: io.jenkins.plugins.casc.ConfiguratorException: ecs: Failed to construct instance of class com.cloudbees.jenkins.plugins.amazonecs.ECSCloud.
Constructor: public com.cloudbees.jenkins.plugins.amazonecs.ECSCloud(java.lang.String,java.lang.String,java.lang.String,java.lang.String).
Arguments: [java.lang.String, java.lang.String, null, java.lang.String].
Expected Parameters: name java.lang.String, credentialsId java.lang.String, assumedRoleArn java.lang.String, cluster java.lang.String
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.tryConstructor(DataBoundConfigurator.java:203)
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.instance(DataBoundConfigurator.java:75)
at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:274)
at io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.configure(DataBoundConfigurator.java:81)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$doConfigure$16668e2$1(HeteroDescribableConfigurator.java:299)
at io.vavr.CheckedFunction0.lambda$unchecked$52349c75$1(CheckedFunction0.java:247)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.doConfigure(HeteroDescribableConfigurator.java:299)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$2(HeteroDescribableConfigurator.java:86)
at io.vavr.control.Option.map(Option.java:392)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$3(HeteroDescribableConfigurator.java:86)
at io.vavr.Tuple2.apply(Tuple2.java:238)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:84)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:92)
at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:55)
at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:355)
at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:293)
at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$9(ConfigurationAsCode.java:797)
at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:731)
Caused: io.jenkins.plugins.casc.ConfiguratorException: jenkins: error configuring ‘jenkins’ with class io.jenkins.plugins.casc.core.JenkinsConfigurator configurator
at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:737)
at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:797)
at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:783)
at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:652)
at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:314)
at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:306)
Caused: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:109)
Caused: java.lang.Error
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:115)
at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:185)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
at jenkins.model.Jenkins$5.runTask(Jenkins.java:1166)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused: org.jvnet.hudson.reactor.ReactorException
at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:290)
at jenkins.InitReactorRunner.run(InitReactorRunner.java:49)
at jenkins.model.Jenkins.executeReactor(Jenkins.java:1201)
at jenkins.model.Jenkins.(Jenkins.java:989)
at hudson.model.Hudson.(Hudson.java:86)
at hudson.model.Hudson.(Hudson.java:82)
at hudson.WebAppMain$3.run(WebAppMain.java:247)
Caused: hudson.util.HudsonFailedToLoad
at hudson.WebAppMain$3.run(WebAppMain.java:264)
2023-09-05 15:30:48.750+0000 [id=24] INFO hudson.lifecycle.Lifecycle#onStatusUpdate: Stopping Jenkins
2023-09-05 15:30:48.773+0000 [id=24] INFO jenkins.model.Jenkins$16#onAttained: Started termination
2023-09-05 15:30:48.795+0000 [id=24] INFO h.p.b.global.Lifecycle#shutdown: Shutdown complete - Global TimeOut ScheduledExecutorService had 0 tasks pending
2023-09-05 15:30:48.798+0000 [id=24] INFO jenkins.model.Jenkins$16#onAttained: Completed termination
2023-09-05 15:30:48.799+0000 [id=24] INFO jenkins.model.Jenkins#_cleanUpDisconnectComputers: Starting node disconnection
2023-09-05 15:30:48.804+0000 [id=24] INFO jenkins.model.Jenkins#_cleanUpShutdownPluginManager: Stopping plugin manager
2023-09-05 15:30:48.817+0000 [id=24] INFO jenkins.model.Jenkins#_cleanUpPersistQueue: Persisting build queue
2023-09-05 15:30:48.825+0000 [id=24] INFO jenkins.model.Jenkins#_cleanUpAwaitDisconnects: Waiting for node disconnection completion
2023-09-05 15:30:48.826+0000 [id=24] SEVERE jenkins.model.Jenkins#_cleanUpPluginServletFilters: Failed to stop filters
java.lang.ClassNotFoundException: org.jenkinsci.plugins.ssegateway.SubscriptionConfigQueue$SubscriptionConfig
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
at jenkins.util.URLClassLoader2.findClass(URLClassLoader2.java:35)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:594)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
Caused: java.lang.NoClassDefFoundError: org/jenkinsci/plugins/ssegateway/SubscriptionConfigQueue$SubscriptionConfig
at org.jenkinsci.plugins.ssegateway.SubscriptionConfigQueue.stop(SubscriptionConfigQueue.java:106)
at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.destroy(Endpoint.java:253)
at hudson.util.PluginServletFilter.cleanUp(PluginServletFilter.java:191)
at jenkins.model.Jenkins._cleanUpPluginServletFilters(Jenkins.java:3951)
at jenkins.model.Jenkins.cleanUp(Jenkins.java:3648)
at hudson.WebAppMain$3.run(WebAppMain.java:268)
2023-09-05 15:30:48.826+0000 [id=24] INFO hudson.lifecycle.Lifecycle#onStatusUpdate: Jenkins stopped

It was the same docker file with which the docker build and run were working earlier. Now the only difference is that the Docker file has been updated to install virtual environment and create a virtual environment to install python packages

We would .appreciate any help in this regards. Thanks for your support.

I believe that is an unfortunate interaction between the cloud plugins and Jenkins versions after 2.403. The improved cloud editing facilities that were added in Jenkins 2.403 now require that the cloud must have a non-blank name. Check your configuration and be sure that you give the ECS cloud a non-blank name.

A similar bug with the docker plugin is described in JENKINS-71959. The bug is fixed in the most recent release (1.5) of the docker plugin.

Thanks @MarkEWaite for letting us aware of this. The Jenkins version that we are using is 2.401.3 and it is configured on the AWS Fargate ECS container and I don’t find a config.xml referred in JENKINS-71959 and all we have is a “amazon-ecs:latest” plugin in the plugins.txt. Is there a workaround for this where Jenkins is on AWS Fargate.

@MarkEWaite Thanks for your inputs earlier. We have fixed the “Cloud must have a unique non-empty name” issues but now, there is a different error that points to the Jenkins casc configuration

SEVERE jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init
io.jenkins.plugins.casc.ConfiguratorException: Invalid configuration elements for type class jenkins.model.GlobalConfigurationCategory$Security : sSHD.
Available attributes : apiToken, apiTokenProperty, crumb, gitHooks, gitHostKeyVerificationConfiguration, globalJobDslSecurityConfiguration, queueItemAuthenticator, scriptApproval, updateSiteWarningsConfiguration
at io.jenkins.plugins.casc.BaseConfigurator.handleUnknown(BaseConfigurator.java:387)
at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:374)
at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:293)
at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$9(ConfigurationAsCode.java:797)
at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:731)
Caused: io.jenkins.plugins.casc.ConfiguratorException: security: error configuring ‘security’ with class io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator configurator

Did you read the error message? Did you try to debug it? The error message tells you what is wrong.