Custom Executor does not clean up Temporary Directories
Summary
The Custom Executor doesn't clean up temporary directories it creates for scripts in it's run. See io/ioutil.TempDir:
It is the caller's responsibility to remove the directory when no longer needed.
Steps to reproduce
- Setup a custom executor
- Trigger a build on the custom executor
- Wait for the build to complete
- List files in the temp directory
Actual behavior
A custom-executor#########
is shown in the temp directory
Expected behavior
There should be no custom-executor#########
in the temp directory
Environment description
This happens on my custom LXD runner but would happen on any custom runner currently.
config.toml contents
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "lxd-runner"
url = "https://gitlab.com/"
token = "MASKED"
executor = "custom"
builds_dir = "/builds"
cache_dir = "/cache"
[runners.cache]
Type = "s3"
Path = ""
Shared = false
[runners.cache.s3]
ServerAddress = "s3.amazonaws.com"
AccessKey = "MASKED"
SecretKey = "MASKED"
BucketName = "MASKED"
BucketLocation = "us-east-2"
Insecure = false
[runners.custom]
prepare_exec = "/etc/gitlab-runner/lxd/prepare.sh"
run_exec = "/etc/gitlab-runner/lxd/run.sh"
cleanup_exec = "/etc/gitlab-runner/lxd/cleanup.sh"
Used GitLab Runner version
$ gitlab-runner --version
Version: 12.9.0
Git revision: 4c96e5ad
Git branch: 12-9-stable
GO version: go1.13.8
Built: 2020-03-20T13:01:56+0000
OS/Arch: linux/amd64
Possible fixes
See executors/custom/custom.go line 209.
I've created a branch https://gitlab.com/TronPaul/gitlab-runner/-/tree/cleanup-custom-exec-tmp which I think fixes this. I'm planning on making a merge request, but I'm running into an issue setting up the development environment for gitlab in WSL2. I'm seeing an issue trying to get WSL2 sets a NAME env var for some reason which clashes with Gitlab's usage of that var in the Makefile.gitlab.com/gitlab-org/DESKTOP-SCRG2IJ/apps/gitlab-runner-helper
(as result of make build_current
) which seems to be a private repo? Nothing mentions it in the development guide. Any assistance for fixing that would also be appreciated.