Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to connect a Windows container as an ephemeral slave/agent #233

Open
dkumar95120 opened this issue May 28, 2018 · 2 comments
Open

Comments

@dkumar95120
Copy link

I was able to launch a Linux container as an ephemeral Jenkins agent using SSH. However, I am unable to do the same with a Windows container. I can verify that the SSHD service is running in the Windows container by running it interactively and performing an ssh @<container_ip_address>.

Only the following log information in the Jenkins Master:

May 28, 2018 2:06:54 PM INFO com.github.kostyasha.yad.DockerCloud provision
Will provision 'jenkins/windows-ssh-slave:1.0', for label: 'docker-windows-slave2', in cloud: 'YADP-windows-cloud'
May 28, 2018 2:06:54 PM INFO com.github.kostyasha.yad.DockerCloud addProvisionedSlave
Provisioning 'jenkins/windows-ssh-slave:1.0' number '0' on 'YADP-windows-cloud'; Total containers: '0'
May 28, 2018 2:07:53 PM INFO hudson.slaves.RetentionStrategy$Demand check

On the dockerhost I see following output with docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44d92a7d90f8 jenkins/windows-ssh-slave:1.0 "cmd.exe cmd" About a minute ago Exited (0) About a minute ago vig

Dockerfile for the image -----------------------------------
FROM microsoft/windowsservercore

SHELL ["powershell.exe", "-ExecutionPolicy", "Bypass", "-Command"]

RUN iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
RUN choco install -y git --params='/NoShellIntegration'
RUN choco install -y nuget.commandline

ENV JAVA_HOME c:/jre-8u171
ENV JENKINS_HOME c:/jenkins
ENV JAVA_EXE jre-8u171-windows-x64.exe

#RUN (new-object System.Net.WebClient).Downloadfile('http://javadl.oracle.com/webapps/download/AutoDL?BundleId=233172_512cd62ec5174c3487ac17c61aaa89e8', 'C:$env:JAVA_EXE')
COPY jre-8u171-windows-x64.exe C:/
RUN start-process -filepath C:/jre-8u171-windows-x64.exe -passthru -wait -argumentlist "/s,INSTALLDIR=$env:JAVA_HOME,/L,install64.log"
RUN del C:/jre-8u171-windows-x64.exe

RUN $env:PATH = $env:JAVA_HOME + '\bin;' + $env:PATH;
[Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN mkdir ~/.ssh
COPY authorized_keys C:/
RUN copy c:/authorized_keys ~/.ssh/

Download openssh for windows

COPY OpenSSH-Win64.zip C:/

COPY agent.jar C:/
RUN Expand-Archive C:/OpenSSH-Win64.zip -DestinationPath c:/

RUN C:/OpenSSH-Win64/install-sshd.ps1

RUN del C:/OpenSSH-Win64.zip

RUN mkdir $env:JENKINS_HOME
WORKDIR $JENKINS_HOME

RUN mkdir C:/data
VOLUME C:/data

EXPOSE 22

RUN net start sshd

RUN Set-Service sshd -StartupType Automatic

RUN start-service sshd
ENTRYPOINT ["cmd.exe"]

@dkumar95120
Copy link
Author

Saw following exception just now in the logs:
Can't connect to ssh for 10.20.5.73:48877
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.trilead.ssh2.transport.TransportManager.establishConnection(TransportManager.java:367)
at com.trilead.ssh2.transport.TransportManager.initialize(TransportManager.java:480)
at com.trilead.ssh2.Connection.connect(Connection.java:774)
Caused: java.io.IOException: There was a problem while connecting to 10.20.5.73:48877
at com.trilead.ssh2.Connection.connect(Connection.java:834)
at com.github.kostyasha.yad.utils.HostAndPortChecker.bySshWithEveryRetryWaitFor(HostAndPortChecker.java:89)
at com.github.kostyasha.yad.launcher.DockerComputerSSHLauncher.waitUp(DockerComputerSSHLauncher.java:103)
at com.github.kostyasha.yad.DockerCloud.provisionWithWait(DockerCloud.java:259)
at com.github.kostyasha.yad.DockerCloud.lambda$provision$0(DockerCloud.java:135)
at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
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 java.lang.Thread.run(Thread.java:748)

@KostyaSha
Copy link
Owner

RUN start-service sshd
ENTRYPOINT ["cmd.exe"]

You should ensure that after contain start it will be alive and cmd.exe wouldn't exit, because container will stop then and connection will fail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants