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

BYOC Docker: executing "version" at <.Client.Experimental>: can't evaluate field Experimental in type system.clientVersion #3869

Closed
jidanfan opened this issue Mar 8, 2023 · 16 comments

Comments

@jidanfan
Copy link

jidanfan commented Mar 8, 2023

hi
I was use BYOC with docker,I use docker cloud type to build job,and docker version is 23.0.
but the work job can't start with error:
Starting Docker job... template: version:1:44: executing "version" at <.Client.Experimental>: can't evaluate field Experimental in type system.clientVersion
I found the reason is when work job start appveyor will call a docker cmd:
docker version --format "{{.Client.Version}} {{.Client.Os}} {{.Client.Experimental}} {{.Server.Version}} {{.Server.Os}} {{.Server.Experimental}}"
and in docker 23.0,{{Client.Experimental}} featual has been Deprecated .
in doc: Docker Engine 23.0 release notes and
remove "Experimental" client field from "docker version"
Maybe next version you can fix the docker cmd.
thanks

@FeodorFitsner
Copy link
Member

Here is an updated build of AppVeyor Host Agent for Linux with "experimental" flag removed: https://appveyordownloads.blob.core.windows.net/appveyor/7.0.3269/appveyor-host-agent_7.0.3269_amd64.deb
(zip: https://appveyordownloads.blob.core.windows.net/appveyor/7.0.3269/appveyor-host-agent-7.0.3269-linux-x64.tar.gz)

You can try installing updated deb with the command:

sudo bash -c "APPVEYOR_URL={appVeyorUrl} HOST_AUTH_TOKEN={hostAuthorizationToken} dpkg -i <debPath>"

Let me know how that worked. We'll make that package as default then.

@jidanfan
Copy link
Author

This build version is not work in my docker(v23.01).
I use it to build a image and can't start container:

Creating network "appveyor_default" with the default driver
Creating appveyor_appveyor_1 ... error

ERROR: for appveyor_appveyor_1 Cannot start service appveyor: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./appveyor-server": stat ./appveyor-server: no such file or directory: unknown

ERROR: for appveyor Cannot start service appveyor: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./appveyor-server": stat ./appveyor-server: no such file or directory: unknown
ERROR: Encountered errors while bringing up the project.

This is my Dockerfile:

FROM ubuntu:focal
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

RUN apt update
RUN apt install libcap2-bin ssh -y

RUN apt install wget -y

#RUN wget https://www.appveyor.com/downloads/appveyor/appveyor-server.deb -O appveyor-server.deb
Run wget https://appveyordownloads.blob.core.windows.net/appveyor/7.0.3269/appveyor-host-agent_7.0.3269_amd64.deb -O appveyor-server.deb

RUN dpkg -i appveyor-server.deb
WORKDIR /opt/appveyor/server
EXPOSE 80 443
VOLUME [ "/etc/opt/appveyor/server" ]
VOLUME [ "/var/opt/appveyor/server" ]
ENTRYPOINT [ "./appveyor-server" ]

@FeodorFitsner
Copy link
Member

What OS are you running host agent on?

@jidanfan
Copy link
Author

This is how I use Appveyor:
My OS is Ubuntu:20.04 ,and install docker. I build a Image which install appveyor so I can use Appveyor in docker, and I map "/var/run/docker.sock" into the container so I can use docker could_type to build my dotnet project. The image I use to build project is from "appveyor/build-image:minimal-ubuntu-20.04". I test this way is perfect in appveyor:7.0.3212 (docker:20.10)

@FeodorFitsner
Copy link
Member

It could be an issue with container, not AppVeyor Host Agent running container. Host Agent is just using docker run --rm with a bunch of parameters. You can see a full command in journalctl -u appveyor-host-agent log. Try running that command from a command line. Try running your container from command line as well.

@jidanfan
Copy link
Author

I think it was AppVeyor Server issue. These are AppVeyor-Server's logs when start a job

appveyor_1  |       Create build 'bin' directory: /tmp/av-build-1
appveyor_1  | appveyor-server Information: 0 : BuildService.RunWorkerJob: Run Job 1hnlkfwls3o0valf
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - start: account_jobs_1
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - lock acquired: account_jobs_1
appveyor_1  | appveyor-server Information: 0 : Memory queueing service - sending message to 'build-manager' queue (Operation=CancelTimeoutBuildJob, AccountId=1, JobId=1hnlkfwls3o0valf, Message=Build execution time has reached the maximum allowed time for your plan (60 minutes).), ttl=, scheduled=03/10/2023 04:15:23
appveyor_1  | appveyor-server Information: 0 : JobService.StartJob: jobId=1hnlkfwls3o0valf
appveyor_1  | appveyor-server Information: 0 : JobService.SetJobAsRunning: jobId=1hnlkfwls3o0valf
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - end: account_jobs_1
appveyor_1  | appveyor-server Information: 0 : BuildCloudConfigurationService.JobStarted: workerId=2b0d9e585df34f86a7fe170789906cb7, jobId=1hnlkfwls3o0valf
appveyor_1  | appveyor-server Information: 0 : LocalDockerBuildCloudService.WorkerJobStarted [2]: workerId=2b0d9e585df34f86a7fe170789906cb7, jobId=1hnlkfwls3o0valf
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - start: cloud_mutex_2
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - lock acquired: cloud_mutex_2
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - end: cloud_mutex_2
appveyor_1  | appveyor-server Information: 0 : docker version --format "{{.Client.Version}} {{.Client.Os}} {{.Client.Experimental}} {{.Server.Version}} {{.Server.Os}} {{.Server.Experimental}}"
appveyor_1  | appveyor-server Information: 0 : BuildService.CompleteWorkerJob: jobId=1hnlkfwls3o0valf, status=failed
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - start: account_jobs_1
appveyor_1  | appveyor-server Information: 0 : RunWithDistributedLockAsync - lock acquired: account_jobs_1
appveyor_1  | appveyor-server Information: 0 : Memory queueing service - sending message to 'build-manager' queue (Operation=DecommissionCloudWorker, JobId=1hnlkfwls3o0valf, BuildCloudId=2, WorkerId=2b0d9e585df34f86a7fe170789906cb7), ttl=, scheduled=
appveyor_1  | appveyor-server Information: 0 : Received Build Manager queue message (Operation=DecommissionCloudWorker, JobId=1hnlkfwls3o0valf, BuildCloudId=2, WorkerId=2b0d9e585df34f86a7fe170789906cb7), messageId=d20cfb99-826a-4bea-823c-37382131e04d, sequenceNumber=2
appveyor_1  | appveyor-server Information: 0 : JobService.SetJobAsFinished: jobId=1hnlkfwls3o0valf
appveyor_1  | appveyor-server Information: 0 : BuildService.DecommissionCloudWorker: jobId=1hnlkfwls3o0valf, workerId=2b0d9e585df34f86a7fe170789906cb7, buildCloudId=2
appveyor_1  | appveyor-server Information: 0 : Token '2b0d9e585df34f86a7fe170789906cb7' cancelled on 83fe36cda79e
appveyor_1  | appveyor-server Information: 0 : Token '2b0d9e585df34f86a7fe170789906cb7' successfully cancelled on 83fe36cda79e
appveyor_1  | appveyor-server Information: 0 : LocalDockerBuildCloudService.DecommissionCloudWorker: workerId=2b0d9e585df34f86a7fe170789906cb7, jobId=1hnlkfwls3o0valf, buildCloudId=2
appveyor_1  | appveyor-server Information: 0 : Finished processing Build Manager queue message (Operation=DecommissionCloudWorker, JobId=1hnlkfwls3o0valf, BuildCloudId=2, WorkerId=2b0d9e585df34f86a7fe170789906cb7) in 25 ms

I see it do log a command

appveyor_1  | appveyor-server Information: 0 : docker version --format "{{.Client.Version}} {{.Client.Os}} {{.Client.Experimental}} {{.Server.Version}} {{.Server.Os}} {{.Server.Experimental}}"

This comamnd not work in docker:23.0.

@FeodorFitsner
Copy link
Member

@jidanfan
Copy link
Author

This build can running up but still can't start a Docker job ,the Console show:

Starting Docker job...
Index was outside the bounds of the array.

And I see the Docker Command has update

appveyor_1  | appveyor-server Information: 0 : docker version --format "{{.Client.Version}} {{.Client.Os}} {{.Server.Version}} {{.Server.Os}}"

@FeodorFitsner
Copy link
Member

Is there more detailed error in a journal log?

@jidanfan
Copy link
Author

No,journal logs nothing...
Is it possible that the docker version command number of parameters change from 5 to 4 cause?

@FeodorFitsner
Copy link
Member

Does it work with an out-of-the-box container?

@jidanfan
Copy link
Author

yes, it work in container.

@shana
Copy link

shana commented Aug 8, 2023

@FeodorFitsner I had the same (original OP) issue, installed the new version linked above, and now I get a different error:

Starting Docker job...
Index was outside the bounds of the array.

@shana
Copy link

shana commented Sep 16, 2023

@FeodorFitsner The fix to parse the Docker version is broken, in Appveyor.BuildWorkers.Docker.DockerWorker. GetDockerVersion it's trying to access invalid array indexes, that's why this is crashing. It would be super great to get new builds that work, so I don't have to manually patch the IL to get this to work ❤️

@mikehutter
Copy link

I'm attempting to evaluate AppVeyor BYOC and I have this issue with as well.

Docker Engine: 24.0.7
Docker Desktop: 4.26.1

Starting Docker job...
template: version:1:44: executing "version" at <.Client.Experimental>: can't evaluate field Experimental in type system.clientVersion

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

5 participants
@shana @FeodorFitsner @mikehutter @jidanfan and others