Yeah, just semantics. 😅 Like you can't know the parameters "name" or anything like that in the script itself, or do things like "iterate on all parameter names" - you can only know their injected *value*, so if you want to make logic depend on a parameter's name, you have to assign it to a local var in the script first and work with the variable known to the script, e.g with GoCD *parameter *PIPE_RESOURCE_PARAM=fast and task/script content
#!/bin/sh agent_resource="#{PIPE_RESOURCE_PARAM}" At runtime, the shell runtime execution environment will see the below, with parameter name gone #!/bin/sh agent_resource="fast" So you can't write logic that varies based on the parameters' *names* defined in GoCD (that's what I mean by meta-programming). But can still achieve most things you might like to with other workarounds 😬 By contrast, *with env vars* you can iterate on the entire env and see if anything has been defined at GoCD level, e.g with GoCD *env var * PIPE_RESOURCE_ENV_VAR=fast #!/bin/sh env # <--- will print PIPE_RESOURCE_ENV_VAR=fast (among other things) So slightly different semantics due what the execution environment knows. -Chad On Tue, Jul 25, 2023 at 12:41 PM Joshua Franta <jos...@pracplay.com> wrote: > > yes- i'm aware that parameters are replaced before the script is written > into the agent and executed. > while it's correct that scripts don't know where the information inside > them comes from, this is true for any script not just ones used by gocd. > perhaps these are more semantic level points. > > eg i don't know what you mean about meta programming- you can put a > pipeline parameter into a variable and do whatever you like with it, same > as env var. > but again that's little to do with gocd specifically. > > regardless- yes got what i needed! > > thx again to everybody who tried to help > > > > On Mon, Jul 24, 2023 at 11:27 PM Chad Wilson <ch...@thoughtworks.com> > wrote: > >> If you read Jason's message a bit more closely he is conveying that the >> script's runtime environment has no knowledge of the parameters - not that >> they can't be used at all. >> >> They are just tokens that have already been 'realized' or replaced into >> the content by the time the script/task runs. So the scripting environment >> itself doesn't know that there were parameters used to generate the content >> to run/execute and you can't meta-program based on them inside the script's >> logic. (unlike environment variables) >> >> I believe this is in reference to the earlier script-based example you >> gave which is a little confusing. >> >> Anyway, seems you have a way forward here for your core requirement. >> >> On Tue, 25 Jul 2023, 11:39 Joshua Franta, <jos...@pracplay.com> wrote: >> >>> Jason, your knowledge here is off. Parameters can be used in scripts, >>> see a previous email I this thread that shows how it works. >>> >>> On Mon, Jul 24, 2023, 4:11 PM Jason Smyth <jsm...@taqauto.com> wrote: >>> >>>> Hi Josh, >>>> >>>> I think there may be some confusion here regarding GoCD terminology and >>>> common concepts. >>>> >>>> > 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! >>>> >>>> To the best of my knowledge, Parameters (GoCD concept) cannot be >>>> referenced in scripts. You can call a script that uses parameters >>>> (scripting concept), but as far as I know, GoCD Parameters are not >>>> persisted in the Agent's runtime environment unless they are somehow passed >>>> in via the Task definition. Are you sure you aren't thinking of Environment >>>> Variables (GoCD concept)? Environment Variables can be defined in a few >>>> different places in GoCD. As the name suggests, these values are persisted >>>> in the Agent's runtime environment when a Task is executed. >>>> >>>> > 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? >>>> >>>> If a Template references a Parameter then every Pipeline that uses that >>>> Template _must_ define that Parameter. Depending on how the Parameter is >>>> used in the Template, leaving the Parameter Value blank may be valid. >>>> >>>> In the case of using Parameters to define Resources, my testing shows >>>> that each Parameter must define a single, valid, Resource. That is, if you >>>> want to specify multiple Parameterized Resources, you must use multiple >>>> Parameters. You cannot, for example, provide a Parameter Value of "foo, >>>> bar" to make your Pipeline's Job depend on the "foo" and "bar" Resources. >>>> GoCD rejects the configuration as invalid if you try to save it. Similarly, >>>> GoCD rejects the configuration as invalid if a Parameter is used in the >>>> Resource field and you try to leave its Value blank. >>>> >>>> Regarding your specific use case, you can solve it using either >>>> Environments or Resources. The right solution depends on your requirements >>>> and how you want to reason about your environment. >>>> >>>> The way I understand it, in the context of this discussion you have 2 >>>> groups of Agents (Agents1 and Agents2) and 2 groups of Pipelines >>>> (PipelinesA and PipelinesB). The Pipelines in PipelinesA can run on any >>>> Agent, but the Pipelines in PipelinesB must run on the Agents in Agents2. >>>> We will ignore the fact that Pipelines can contain multiple Stages and >>>> multiple Jobs and assume either that all of the Pipelines contain a single >>>> Stage with a single Job, or that the scheduling requirements are the same >>>> for all Jobs in a given Pipeline. You have also talked about Pipeline >>>> priority. >>>> >>>> Based on this, I assume your requirements are one of the following: >>>> >>>> 1. Agents should be used to the full extent possible; the workload in >>>> PipelinesB is heavier so those Pipelines must not run on Agents1, or >>>> 2. Pipelines in PipelinesB have a higher priority than those in >>>> PipelinesA; Agents in Agents2 should take Jobs from PipelinesA only if >>>> there are no pending Jobs for PipelinesB. >>>> >>>> GoCD supports the first scenario. You can achieve this by assigning 2 >>>> Resources/Environments. Pipelines in PipelinesA get 1 Resource/Environment; >>>> Pipelines in PipelinesB get the other. Agents in Agents1 get the PipelinesA >>>> Resource/Environment; Agents in Agents2 get both. >>>> >>>> GoCD does not support the concept of priority, so scenario 2 is not >>>> supported. The best you could accomplish would be to map each group of >>>> Pipelines to a single group of Agents. >>>> >>>> Hope this helps. If I'm way off base it might help me better understand >>>> your situation if you would provide snippets of your actual configuration. >>>> >>>> Cheers, >>>> Jason >>>> >>>> >>>> On Monday, 24 July 2023 at 11:43:58 UTC-4 Chad Wilson wrote: >>>> >>>>> 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+un...@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+un...@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+un...@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+un...@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+un...@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+un...@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+un...@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 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/43cb7edd-5e0d-4b06-9dac-024e40509d43n%40googlegroups.com >>>> <https://groups.google.com/d/msgid/go-cd/43cb7edd-5e0d-4b06-9dac-024e40509d43n%40googlegroups.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%2BOtp%3DquwcOTJv4jh8xKXf6JpOv5vHADqNkAwqaCS2yEZ%2BtA%40mail.gmail.com >>> <https://groups.google.com/d/msgid/go-cd/CABr%2BOtp%3DquwcOTJv4jh8xKXf6JpOv5vHADqNkAwqaCS2yEZ%2BtA%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/CAA1RwH9z%2Bkpdant8aRrDujZ-nag-mb6m_res0KLrPtYoef7Pqw%40mail.gmail.com >> <https://groups.google.com/d/msgid/go-cd/CAA1RwH9z%2Bkpdant8aRrDujZ-nag-mb6m_res0KLrPtYoef7Pqw%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%2BOtrvLfrhZzs%3DXTDKMFOEQLEiEbxcVtvUk3Lq%3DApFod-XQg%40mail.gmail.com > <https://groups.google.com/d/msgid/go-cd/CABr%2BOtrvLfrhZzs%3DXTDKMFOEQLEiEbxcVtvUk3Lq%3DApFod-XQg%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_u8_45Qyeg%3DESmNUFbdHh-aWv%2BdznV5LZ%3D1JwTOLwG%3Dg%40mail.gmail.com.