Okay, so I have figured out that if I enter
node:
label: value
The build will only run on a runner that has that specific label.
What I have encountered is that after adding labels to my different runners, I now have to add labels to my jobs. If I dont, they end up just “pending” with no other information in the Drone UI. If a job doesn’t have any labels, why isn’t it routed to any idle runner?
Second, is there a way to get a job to run different steps on different runners?
The build will only run on a runner that has that specific label.
This is the expected behavior, per the documentation
A pipeline is not routed to a runner unless it matches all runner labels. If the pipeline only defines and matches a subset of runner labels it will not be routed to the runner.
Second, is there a way to get a job to run different steps on different runners?
No. Drone is architected in such a way that runners are meant to be treated as pools of shared resources where a pipeline can run on any node in the pool. Drone is not architected to allow routing pipelines to individual nodes. Drone treats runners are cattle, not pets. If you are trying to route pipeline to individual named runners you are treating your runners like pets, which would be considered an anti-pattern.
I hesitate to make generalizations, but this question is most frequently asked when someone wants to execute a deployment step. It is my understanding in the Jenkins world, it was common practice to install a Jenkins agent on your production machine to facilitate deployment to that machine. In the Drone world, the recommended approach is to architect remote deployment (ie using ssh, sftp plugins, etc), so that you can deploy from any machine in your Drone cluster.