예제 #1
0
        protected virtual JenkinsPipelineAgent GetAgent(ExecutableTarget executableTarget, IReadOnlyDictionary <string, JenkinsPipelineAgent> registeredAgents)
        {
            JenkinsPipelineAgent agent;
            string agentLabel = executableTarget.GetAgents().FirstOrDefault();

            if (string.IsNullOrWhiteSpace(agentLabel))
            {
                agent = new JenkinsPipelineAgent
                {
                    AgentType     = JenkinsAgentType.Any,
                    AgentPlatform = JenkinsAgentPlatform.Unix,
                };
            }
            else if (!registeredAgents.TryGetValue(agentLabel, out agent))
            {
                agent = new JenkinsPipelineAgent
                {
                    AgentType     = JenkinsAgentType.Node,
                    AgentPlatform = JenkinsAgentPlatform.Unix,
                    Label         = agentLabel,
                };
            }

            return(agent);
        }
예제 #2
0
        protected virtual JenkinsPipelineStage GetStage(ExecutableTarget executableTarget, IReadOnlyDictionary <string, JenkinsPipelineAgent> registeredAgents)
        {
            IEnumerable <string> artifactProduct       = executableTarget.GetArtifactProducts().ToArray();
            IEnumerable <JenkinsPipelineStash> stashes = artifactProduct
                                                         .Select((v, i) => GetStash(executableTarget, v))
                                                         .OrderBy(s => s.Name);

            IEnumerable <(Target, string[])>     artifactDependencies = ArtifactExtensionsAccessor.ArtifactDependencies[executableTarget.GetDefinition()].ToArray();
            IEnumerable <JenkinsPipelineUnstash> unstashes            = artifactDependencies
                                                                        .SelectMany(d => GetUnstashesFromDependency(executableTarget, d.Item1, d.Item2))
                                                                        .OrderBy(s => s.Name)
                                                                        .Prepend(new JenkinsPipelineUnstash
            {
                Name = "source",
            });

            JenkinsPipelineAgent agent = GetAgent(executableTarget, registeredAgents);

            return(new JenkinsPipelineStage
            {
                Name = executableTarget.Name,
                InvokedTarget = executableTarget.Name,
                Agent = agent,
                Stashes = stashes.ToArray(),
                Unstashes = unstashes.ToArray(),
            });
        }