On Mon, Jul 24, 2023 at 8:44 PM Joshua Franta <jos...@pracplay.com> wrote:

>
> chad thanks for your answer.
>
> i think the main source of confusion is that I thought parameters could
> only be referred to in scripts!
> I didn't know you could refer to them inside of other configuration
> properties!
> Is this documented?   Regardless that's super useful, there's probably
> some other things that can be cleaned up knowing that.
>

https://docs.gocd.org/current/configuration/admin_use_parameters_in_configuration.html#rules-around-usage-of-parameters



> I tried this on a pipeline w/out any template and it worked as described.
>  Just put the parameter reference in resource- UI accepts as long as
> parameter exists and works.
>
> I still have a question about how this works in examples using templates.
> If we didn't define the pipeline parameter by default, how would gocd
> interpret what I'm guessing would be a blank resource?
>
> eg we have
>
>    1. a pipeline template called FAST_OR_SLOW_PIPE
>    2. every pipeline implementing this template defines a parameter
>    called  PIPE_RESOURCE_PARAM
>
> What happens if somebody only defines PIPE_RESOURCE_PARAM when the
> pipeline is FAST?
> If it's left as empty for ANY-aka-SLOW resources, will gocd intepret this
> as a blank resource requirement and fail?
> Or will it ignore blank resources?
>

I'm not sure - perhaps just try it empirically? It could either fail or see
it as blank i.e "no resource requirement" - I don't think there's a strong
case for either behaviour being more correct.

-Chad


> On Sun, Jul 23, 2023 at 10:04 AM Chad Wilson <ch...@thoughtworks.com>
> wrote:
>
>> With that description, if you want to use *environments
>> <https://docs.gocd.org/current/introduction/concepts_in_go.html#environment>*
>> rather than resources
>> <https://docs.gocd.org/current/introduction/concepts_in_go.html#resources>
>> (and assuming you don't use environments for any other purpose), I would
>>
>> *1) Create 2 environments "fast" and "any"*
>>
>> *2) Map agents to environments*
>> agents on GROUPA = machines that have less beefy hardware
>> *- declare environments "any" when registered*
>>
>> agents on GROUPB = more expensive machines
>> *- declare both environments "fast" and "any" when registered*
>>
>> *3) When configuring your pipelines*
>>
>>    1. have a couple of pipelines only run on the more expensive machines *<--
>>    add these pipelines to "fast" environment*
>>    2. have all other pipelines run in either group (next available
>>    agent) *<-- add these pipelines to "any" environment*
>>
>> This should give you roughly the semantics you say you want, but note it
>> won't *prioritise* the GROUPB agents for use by the "couple of pipelines
>> only run on the more expensive machines", it will just ensure they never
>> run on the slower machines/agents. Something equivalent could also be done
>> with resources
>> <https://docs.gocd.org/current/introduction/concepts_in_go.html#resources>
>> .
>>
>> There is no way to "try another agent" from inside the actual job's
>> tasks. In this sense, the contents of tasks/scripts aren't relevant to
>> scheduling. The GoCD resources and environments have to be known at
>> schedule time. When you use pipeline parameters, they are realised at
>> configuration time as when you create a pipeline from a template, it will
>> force you to set the parameter values.
>>
>> To clarify, when you talked earlier about "a resource requirement" are
>> you *actually* referring to GoCD's concept of resources, or were you
>> talking in a generic sense? The answers are assuming you are talking about
>> GoCD resources
>> <https://docs.gocd.org/current/introduction/concepts_in_go.html#resources>
>> but now I am more confused by your shell script. *If you want to use
>> resources* (rather than environments) to affect scheduling, while still
>> avoiding duplication of your templates, we are suggesting you use a
>> parameter like *this*, not put it into some task content. You are
>> setting the parameterized value into the field that determines the job's
>> scheduling, not something that happens at execution time like a task. But
>> again, if your goal is to control scheduling at pipeline level, for all
>> jobs in a pipeline, you don't need to use resources, and can just use
>> environments as in my earlier example above.
>>
>> [image: image.png]
>>
>> -Chad
>>
>>
>> On Sun, Jul 23, 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 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/CAA1RwH8XmX4y11RT2PVXeUxQd8hvK0UBgbcx8ja-MWuOVqpfag%40mail.gmail.com
>> <https://groups.google.com/d/msgid/go-cd/CAA1RwH8XmX4y11RT2PVXeUxQd8hvK0UBgbcx8ja-MWuOVqpfag%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%2BOtoymQdOg0poCtRYDRfxgX4UKfukvtvvpCOZicadaPKWyA%40mail.gmail.com
> <https://groups.google.com/d/msgid/go-cd/CABr%2BOtoymQdOg0poCtRYDRfxgX4UKfukvtvvpCOZicadaPKWyA%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/CAA1RwH-mgC%2Bg0cRa_3rnWak49h4WEeLYck8GimQX2dXG5dxfcQ%40mail.gmail.com.

Reply via email to