mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-01-24 08:08:38 +00:00
Allow to change directory for steps (#1329)
Add `directory` YAML key that changes the workdir. Can replace a `cd` before your commands start or make it possible to run plugins in a subdirectory.
This commit is contained in:
parent
27ee8ef97d
commit
f6cac78119
5 changed files with 23 additions and 1 deletions
|
@ -502,6 +502,10 @@ Woodpecker gives the ability to detach steps to run them in background until the
|
||||||
|
|
||||||
For more details check the [service docs](./60-services.md#detachment).
|
For more details check the [service docs](./60-services.md#detachment).
|
||||||
|
|
||||||
|
### `directory`
|
||||||
|
|
||||||
|
Using `directory`, you can set a subdirectory of your repository or an absolute path inside the Docker container in which your commands will run.
|
||||||
|
|
||||||
## `services`
|
## `services`
|
||||||
|
|
||||||
Woodpecker can provide service containers. They can for example be used to run databases or cache containers during the execution of pipeline.
|
Woodpecker can provide service containers. They can for example be used to run databases or cache containers during the execution of pipeline.
|
||||||
|
|
|
@ -3,6 +3,7 @@ package compiler
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
@ -68,7 +69,7 @@ func (c *Compiler) createProcess(name string, container *yaml.Container, section
|
||||||
}
|
}
|
||||||
|
|
||||||
if !detached || len(container.Commands) != 0 {
|
if !detached || len(container.Commands) != 0 {
|
||||||
workingdir = path.Join(c.base, c.path)
|
workingdir = c.stepWorkdir(container)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !detached {
|
if !detached {
|
||||||
|
@ -184,3 +185,10 @@ func (c *Compiler) createProcess(name string, container *yaml.Container, section
|
||||||
IpcMode: ipcMode,
|
IpcMode: ipcMode,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Compiler) stepWorkdir(container *yaml.Container) string {
|
||||||
|
if filepath.IsAbs(container.Directory) {
|
||||||
|
return container.Directory
|
||||||
|
}
|
||||||
|
return filepath.Join(c.base, c.path, container.Directory)
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ type (
|
||||||
Tmpfs []string `yaml:"tmpfs,omitempty"`
|
Tmpfs []string `yaml:"tmpfs,omitempty"`
|
||||||
DNS types.Stringorslice `yaml:"dns,omitempty"`
|
DNS types.Stringorslice `yaml:"dns,omitempty"`
|
||||||
DNSSearch types.Stringorslice `yaml:"dns_search,omitempty"`
|
DNSSearch types.Stringorslice `yaml:"dns_search,omitempty"`
|
||||||
|
Directory string `yaml:"directory,omitempty"`
|
||||||
Entrypoint types.Command `yaml:"entrypoint,omitempty"`
|
Entrypoint types.Command `yaml:"entrypoint,omitempty"`
|
||||||
Environment types.SliceorMap `yaml:"environment,omitempty"`
|
Environment types.SliceorMap `yaml:"environment,omitempty"`
|
||||||
ExtraHosts []string `yaml:"extra_hosts,omitempty"`
|
ExtraHosts []string `yaml:"extra_hosts,omitempty"`
|
||||||
|
|
|
@ -27,6 +27,7 @@ cpu_shares: 99
|
||||||
detach: true
|
detach: true
|
||||||
devices:
|
devices:
|
||||||
- /dev/ttyUSB0:/dev/ttyUSB0
|
- /dev/ttyUSB0:/dev/ttyUSB0
|
||||||
|
directory: example/
|
||||||
dns: 8.8.8.8
|
dns: 8.8.8.8
|
||||||
dns_search: example.com
|
dns_search: example.com
|
||||||
entrypoint: /code/entrypoint.sh
|
entrypoint: /code/entrypoint.sh
|
||||||
|
@ -81,6 +82,7 @@ func TestUnmarshalContainer(t *testing.T) {
|
||||||
CPUShares: types.StringorInt(99),
|
CPUShares: types.StringorInt(99),
|
||||||
Detached: true,
|
Detached: true,
|
||||||
Devices: []string{"/dev/ttyUSB0:/dev/ttyUSB0"},
|
Devices: []string{"/dev/ttyUSB0:/dev/ttyUSB0"},
|
||||||
|
Directory: "example/",
|
||||||
DNS: types.Stringorslice{"8.8.8.8"},
|
DNS: types.Stringorslice{"8.8.8.8"},
|
||||||
DNSSearch: types.Stringorslice{"example.com"},
|
DNSSearch: types.Stringorslice{"example.com"},
|
||||||
Entrypoint: types.Command{"/code/entrypoint.sh"},
|
Entrypoint: types.Command{"/code/entrypoint.sh"},
|
||||||
|
|
|
@ -215,6 +215,9 @@
|
||||||
"environment": {
|
"environment": {
|
||||||
"$ref": "#/definitions/step_environment"
|
"$ref": "#/definitions/step_environment"
|
||||||
},
|
},
|
||||||
|
"directory": {
|
||||||
|
"$ref": "#/definitions/step_directory"
|
||||||
|
},
|
||||||
"secrets": {
|
"secrets": {
|
||||||
"$ref": "#/definitions/step_secrets"
|
"$ref": "#/definitions/step_secrets"
|
||||||
},
|
},
|
||||||
|
@ -467,6 +470,10 @@
|
||||||
"items": { "type": "string" },
|
"items": { "type": "string" },
|
||||||
"minLength": 1
|
"minLength": 1
|
||||||
},
|
},
|
||||||
|
"step_directory": {
|
||||||
|
"description": "Read more: https://woodpecker-ci.org/docs/usage/pipeline-syntax#directory",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"services": {
|
"services": {
|
||||||
"description": "Read more: https://woodpecker-ci.org/docs/usage/services",
|
"description": "Read more: https://woodpecker-ci.org/docs/usage/services",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
|
Loading…
Reference in a new issue