I am running Drone on a cluster of ARM 64 devices and the agents are failing when attempting to execute the default clone step at the beginning of the build.
This makes sense, as Docker image plugins/git is a Linux amd64 image which won’t run on Linux aarch64.
Is it possible to replace the default clone step or somehow change the image it is using?
I have my own aarch64 image that I’d like to use in place of the stock plugins/git one.
I tried placing a clone plugin step with my own image at the top of my pipeline, but that did not prevent the build from running the stock clone step which points to the default plugins/git image.
clone:
git:
image: vassilvk/aarch64-drone-git
pipeline:
build:
image: vassilvk/aarch64-golang:1.8.1
commands:
- ls .
- go get -v -d -insecure
- go vet ./...
- golint -set_exit_status ./...
When the build kicks in, I get two tasks executed simultaneously - “git” and “build”.
The “git” task always completes successfully, the “build” task fails with no messages in the build log (see image).
The strange thing is that it looks like the tasks run in parallel and most times “build” finishes before the “git” task completes.
This morning I cut a new Drone 0.6.0 image and tested the same scenario (recreated database and project repo activation, etc.).
I got the same result.
There are two tasks running in parallel - “git” and “build”.
The “git” task passes with exit code 0.
The “build” task fails at different spots in the execution – sometimes at the beginning of the build script, sometimes in the middle. Exit code is always 127 (see new snapshot below – this time it made it past the ls command but got cut off while doing go get).
It looks like a timing issue caused by the fact that both tasks run in parallel while I think “build” should not run before cloning is complete.
Another odd thing is that the “git” task seems to be doing git init instead of git clone, yet the repo is cloned as evident by the result of ls (see snapshot).
Am I overriding the clone task correctly? I followed the docs.
the logic to determine if something is a plugin vs service vs build step currently assumes that a plugin has to have > 0 configuration parameters. So in this case I think it is assuming your plugin is actually a service and it is therefore being daemonized.
I feel like I’m missing something. Note that the repository is set as “Trusted” - switching back to non-Trusted doesn’t seem to make a difference.
Is it possible that the issue is caused by the fact that I’m running this in Docker Swarm mode, and not Docker Compose? Technically there should be no difference as both tools simply orchestrate containers, but who knows…