You would have agents on the various machines, tag the agents with specific
resource tags, and tag specific jobs with those resource tags.

— Sriram

On Sun, 23 Jul 2023 at 8:21 PM, Joshua Franta <jos...@pracplay.com> wrote:

> appreciate so many responses.  i think we're a little apart so i'll take
> the suggestion to give our example:
>
> GROUPA = machines that have less beefy hardware
> GROUPB = more expensive machines
>
> we'd like to:
>
>    1. have a couple of pipelines only run on the more expensive machines
>    2. have all other pipelines run in either group (next available agent)
>
> perhaps this was not clear from my previous explanations, but a couple of
> people have suggested pipeline parameters.
>
> EXAMPLE
>
> a pipeline parameter is only going to be available to the job after the
> job has already been assigned an agent, right?
>
> so if i have a pipeline called 'Priority' w/a parameter  called "group-id"
> and the pipeline has a 'Job' that is a shell script:
>
> ----
> ##!/bin/sh
>
> agent_resource="$GO_AGENT_RESOURCE_VARIABLE"
>
> if ! echo "#{group-id}" |grep -q "$agentr_esource"; then
>
>    echo "agent can't run #{group-id} pipelines"
>
>    ## won't this will make my pipeline fail when I want it to simply try
> another agent?
>     exit 1
> fi
>
> ----
>
> or perhaps people saying this know of some environment variable that where
> we can request another agent?
>
> obviously pipeline parameters themseles don't do anything, so i'm confused
> how i can affect assignment in a job that requires an agent before it runs.
> this 2nd part is what i don't get above
>
> appreciate any clarifications or suggestions thx
>
>
> On Sat, Jul 22, 2023 at 9:58 AM Chad Wilson <ch...@thoughtworks.com>
> wrote:
>
>>
>> On Sat, Jul 22, 2023 at 8:21 PM Joshua Franta <jos...@pracplay.com>
>> wrote:
>>
>>> re: using environments rather than resources... environments can't be
>>> defined at the pipeline level either though?
>>>
>>
>> A pipeline is *assigned* to 0 or 1 environments (via the Admin  >
>> Environments UI if not using pipelines-as-code) - thus it's at the pipeline
>> level by definition. It defines a scheduling requirement for all jobs in
>> that pipeline. Which seems what you asked for with "able to communicate a
>> resource requirement at the pipeline level" right?
>>
>>
>> or i guess it's more correct to say that using environments is a bit of a
>>> side-car feature, in that we use interact w/environments through a
>>> different prisim/ui/config (no biggie) but also seems it's mutually
>>> exclusive to maximizing overall usage of agents.    for us if a given host
>>> can execute something (a pipeline, a job) it should.  and if it can't, it
>>> shouldn't.
>>> trying to force a hard divider can be useful for prod/qa staging, but it
>>> seems to limit just being able to have pipelines declare their needs.
>>> maybe i'm missing what you're saying but i don't think environments are
>>> functionally equivalent to resources?
>>>
>>
>> I didn't imply they were functionally equivalent, but I did try to imply
>> they were a different mechanism of defining a requirement on a job's
>> scheduling, at the pipeline level. If a pipeline is assigned to an
>> "environment", its jobs must be scheduled on agents that also declare they
>> support that "environment". Similarly if a pipeline job declares a resource
>> requirement, the agent must also have that resource declared for it to be
>> assigned. This is a very similar, but different level of configuration of a
>> scheduling requirement, no?
>> https://docs.gocd.org/current/configuration/managing_environments.html
>>
>> Anyway, perhaps I don't understand what you are trying to achieve. If you
>> are currently trying to "prioritise" pipelines by using resources you can
>> also "prioritise" pipelines by having pools of agents, say, dedicated to an
>> environment you call "high-priority". As I said, "Don't need to get hung up
>> on the name [environment]".
>>
>>
>>
>>> we use template parameters extensively already.
>>> eg we even templatize further inside our own jobs by re-using scripts
>>> that interact with template parameters on most commonly used templates (eg
>>> our most popular template has maybe 10-15 pipelines).
>>> however this is more of a job specific thing since it's at the job level.
>>> if you're saying we could change every pipeline to read this at a
>>> pipeline level is a non trivial change to every job.
>>>
>>
>> You said you had many templates that varied only by the "resources" field
>> for jobs. If that is the stated problem then parameters are a possible
>> solution to remove duplication, no?
>>
>>
>>> that's ok but i guess my overall question tho would be that if a given
>>> job decided it couldn't execute the pipeline parameters... it has no way to
>>> pass the job to another agent?
>>>
>>
>> That's the same problem you have currently if the resource is typoed or
>> wrong inside the template, no? If the resource requirement has no available
>> agents, then it can't be scheduled.
>>
>>
>>> in such an example it would just fail the job, no?   again maybe i'm not
>>> following but this seems to not allow the business/value level to declare
>>> minimum needs
>>> (environments seem like they are more about maximimal requirements, but
>>> i'm no expert)
>>>
>>
>> I'm not following what you're trying to say here, sorry.
>>
>> Perhaps this would be easier if you gave a specific example of how you
>> achieve "have some pipelines that are given higher preferences for
>> agent/build resources" currently, rather than talking in abstract terms?
>>
>> -Chad
>>
>>
>> On Sat, Jul 22, 2023 at 6:56 AM Chad Wilson <ch...@thoughtworks.com>
>>> wrote:
>>>
>>>> Have you tried to use "environments" (or a mix of environments and
>>>> resources) to achieve what you are trying to?
>>>>
>>>> When scheduling jobs it's the combination of the resource and the
>>>> environment that are matched to an agent, but the relevant environment is
>>>> declared at the pipeline level like you refer to. Don't need to get hung up
>>>> on the name so much. Yes, you can have "environment variables" attached to
>>>> an environment and propagate those to all pipelines within it, but you
>>>> don't have to use them like that.
>>>>
>>>> Alternatively, to make the templates less duplicated and allow the
>>>> resource to flow from the pipeline *using* the template, you could try
>>>> using template parameters
>>>> <https://docs.gocd.org/current/configuration/admin_use_parameters_in_configuration.html>
>>>> in the resources field? e.g #{job-resoure-requirement}? If there are only a
>>>> small number of different resources used across the stages/jobs, you could
>>>> use the parameters to "model" this I imagine.
>>>>
>>>> -Chad
>>>>
>>>> On Sat, Jul 22, 2023 at 6:54 PM Josh <jos...@pracplay.com> wrote:
>>>>
>>>>> QUESTION:
>>>>>
>>>>> Shouldn't we also be able to communicate a resource requirement at the
>>>>> pipeline level, and not just inside a single job?
>>>>>
>>>>> I get that it definately needs to be at the job level since that's the
>>>>> smallest unit of work and some machines can't execute certain tasks.
>>>>> But at the value-stream/pipeline/business level, you also want to be
>>>>> able to have some pipelines compiling on preferred resources, no?
>>>>>
>>>>>
>>>>> is there a better way to accomplish this?
>>>>> or perhaps this already is possible and i'm missing it.
>>>>> i looked closely at the config since sometimes you can do something
>>>>> simple that is not possible inside the UI, but I'm not seeing it.
>>>>>
>>>>> To restate use case:  We have some pipelines that are given higher
>>>>> preferences for agent/build resources.   Wanting to do a lot more of this,
>>>>> but it's tricky because resources can only be defined at the job level (in
>>>>> the UI).     Also we use a lot of templates, so having resources at job
>>>>> level means we end up having lots of alsomost identical templates that 
>>>>> only
>>>>> vary by the resources used (which somewhat defeats the point of the
>>>>> templates and the value of gocd in this respect).
>>>>>
>>>>> hoping there is a config hack or maybe i'm missinig something.
>>>>> also if this could be done in a plugin, any color there would be
>>>>> helpful (and i would make sure it's open sourced if need be).
>>>>>
>>>>> thx
>>>>>
>>>>> ps i keep using other ci/cd products and gocd is still one of the all
>>>>> around bests.
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "go-cd" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to go-cd+unsubscr...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/go-cd/a9a4ba2c-b1c9-4202-9408-3e2566929b59n%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/go-cd/a9a4ba2c-b1c9-4202-9408-3e2566929b59n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "go-cd" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/go-cd/_j5JGmoA2kI/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> go-cd+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/go-cd/CAA1RwH8zGo6mu0ss0jCCyw0D7Hw4JOwEwfcfNu20yqo0aRRdWw%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/go-cd/CAA1RwH8zGo6mu0ss0jCCyw0D7Hw4JOwEwfcfNu20yqo0aRRdWw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "go-cd" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to go-cd+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/go-cd/CABr%2BOtrG%2B0X3y4B6AWnN7N0K-OSpcKb4KdG-LbS8fCnMOR8Zdw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/go-cd/CABr%2BOtrG%2B0X3y4B6AWnN7N0K-OSpcKb4KdG-LbS8fCnMOR8Zdw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "go-cd" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/go-cd/_j5JGmoA2kI/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> go-cd+unsubscr...@googlegroups.com.
>>
> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/go-cd/CAA1RwH8d2amyXbcEhe8hOnbm6BmS-moT9u7Oo%3D4zzU%2BoXfnekQ%40mail.gmail.com
>> <https://groups.google.com/d/msgid/go-cd/CAA1RwH8d2amyXbcEhe8hOnbm6BmS-moT9u7Oo%3D4zzU%2BoXfnekQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> You received this message because you are subscribed to the Google Groups
> "go-cd" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to go-cd+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/go-cd/CABr%2BOtr%3D-R3fKE0devgPVKgNbHGVnsn5E5OwxuP%3DMt1No_RNdg%40mail.gmail.com
> <https://groups.google.com/d/msgid/go-cd/CABr%2BOtr%3D-R3fKE0devgPVKgNbHGVnsn5E5OwxuP%3DMt1No_RNdg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"go-cd" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to go-cd+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/go-cd/CANiY96Yn2LZt4bZYJAVb80dTq%3DwgV4CHbSbBnGtxVtu2wJVo-g%40mail.gmail.com.

Reply via email to