コード例 #1
0
ファイル: pod.go プロジェクト: drone/drone-exec
// Pod transforms the containers in the Yaml to use Pod networking, where every
// container shares the localhost connection.
func Pod(c *yaml.Config) error {

	rand := base64.RawURLEncoding.EncodeToString(
		securecookie.GenerateRandomKey(8),
	)

	ambassador := &yaml.Container{
		ID:          fmt.Sprintf("drone_ambassador_%s", rand),
		Name:        "ambassador",
		Image:       "busybox:latest",
		Detached:    true,
		Entrypoint:  []string{"/bin/sleep"},
		Command:     []string{"86400"},
		Volumes:     []string{c.Workspace.Path, c.Workspace.Base},
		Environment: map[string]string{},
	}
	network := fmt.Sprintf("container:%s", ambassador.ID)

	var containers []*yaml.Container
	containers = append(containers, c.Pipeline...)
	containers = append(containers, c.Services...)

	for _, container := range containers {
		container.VolumesFrom = append(container.VolumesFrom, ambassador.ID)
		if container.Network == "" {
			container.Network = network
		}
	}

	c.Services = append([]*yaml.Container{ambassador}, c.Services...)
	return nil
}
コード例 #2
0
ファイル: clone.go プロジェクト: drone/drone-exec
// Clone transforms the Yaml to include a clone step.
func Clone(c *yaml.Config, plugin string) error {
	for _, p := range c.Pipeline {
		if p.Name == clone {
			return nil
		}
	}
	if plugin == "" {
		plugin = "git"
	}

	s := &yaml.Container{
		Image: plugin,
		Name:  clone,
	}

	c.Pipeline = append([]*yaml.Container{s}, c.Pipeline...)
	return nil
}
コード例 #3
0
ファイル: workspace.go プロジェクト: drone/drone-exec
// WorkspaceTransform transforms ...
func WorkspaceTransform(c *yaml.Config, base, path string) error {
	if c.Workspace == nil {
		c.Workspace = &yaml.Workspace{}
	}

	if c.Workspace.Base == "" {
		c.Workspace.Base = base
	}
	if c.Workspace.Path == "" {
		c.Workspace.Path = path
	}
	if !filepath.IsAbs(c.Workspace.Path) {
		c.Workspace.Path = filepath.Join(
			c.Workspace.Base,
			c.Workspace.Path,
		)
	}

	for _, p := range c.Pipeline {
		p.WorkingDir = c.Workspace.Path
	}
	return nil
}