support for remote tmate servers

This commit is contained in:
Brad Rydzewski
2020-11-20 16:47:52 -05:00
parent 9466e54a6c
commit 00b690ce8c
7 changed files with 55 additions and 13 deletions

View File

@@ -1,6 +1,10 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Added
- support for self-hosted tmate instances
## 1.6.1 ## 1.6.1
### Changed ### Changed
- restrict temporary volumes used with docker plugins - restrict temporary volumes used with docker plugins

View File

@@ -202,6 +202,18 @@ func registerCompile(app *kingpin.Application) {
cmd.Flag("tmate-enabled", "tmate enabled"). cmd.Flag("tmate-enabled", "tmate enabled").
BoolVar(&c.Tmate.Enabled) BoolVar(&c.Tmate.Enabled)
cmd.Flag("tmate-server-host", "tmate server host").
StringVar(&c.Tmate.Server)
cmd.Flag("tmate-server-port", "tmate server port").
StringVar(&c.Tmate.Port)
cmd.Flag("tmate-server-rsa-fingerprint", "tmate server rsa fingerprint").
StringVar(&c.Tmate.RSA)
cmd.Flag("tmate-server-ed25519-fingerprint", "tmate server rsa fingerprint").
StringVar(&c.Tmate.ED25519)
// shared pipeline flags // shared pipeline flags
c.Flags = internal.ParseFlags(cmd) c.Flags = internal.ParseFlags(cmd)
} }

View File

@@ -110,6 +110,10 @@ type Config struct {
Tmate struct { Tmate struct {
Enabled bool `envconfig:"DRONE_TMATE_ENABLED" default:"false"` Enabled bool `envconfig:"DRONE_TMATE_ENABLED" default:"false"`
Image string `envconfig:"DRONE_TMATE_IMAGE" default:"drone/drone-runner-docker:1"` Image string `envconfig:"DRONE_TMATE_IMAGE" default:"drone/drone-runner-docker:1"`
Server string `envconfig:"DRONE_TMATE_HOST"`
Port string `envconfig:"DRONE_TMATE_PORT"`
RSA string `envconfig:"DRONE_TMATE_FINGERPRINT_RSA"`
ED25519 string `envconfig:"DRONE_TMATE_FINGERPRINT_ED25519"`
} }
} }

View File

@@ -144,6 +144,10 @@ func (c *daemonCommand) run(*kingpin.ParseContext) error {
Tmate: compiler.Tmate{ Tmate: compiler.Tmate{
Image: config.Tmate.Image, Image: config.Tmate.Image,
Enabled: config.Tmate.Enabled, Enabled: config.Tmate.Enabled,
Server: config.Tmate.Server,
Port: config.Tmate.Port,
RSA: config.Tmate.RSA,
ED25519: config.Tmate.ED25519,
}, },
Environ: provider.Combine( Environ: provider.Combine(
provider.Static(config.Runner.Environ), provider.Static(config.Runner.Environ),

View File

@@ -336,6 +336,18 @@ func registerExec(app *kingpin.Application) {
cmd.Flag("tmate-enabled", "tmate enabled"). cmd.Flag("tmate-enabled", "tmate enabled").
BoolVar(&c.Tmate.Enabled) BoolVar(&c.Tmate.Enabled)
cmd.Flag("tmate-server-host", "tmate server host").
StringVar(&c.Tmate.Server)
cmd.Flag("tmate-server-port", "tmate server port").
StringVar(&c.Tmate.Port)
cmd.Flag("tmate-server-rsa-fingerprint", "tmate server rsa fingerprint").
StringVar(&c.Tmate.RSA)
cmd.Flag("tmate-server-ed25519-fingerprint", "tmate server rsa fingerprint").
StringVar(&c.Tmate.ED25519)
cmd.Flag("debug", "enable debug logging"). cmd.Flag("debug", "enable debug logging").
BoolVar(&c.Debug) BoolVar(&c.Debug)

View File

@@ -57,6 +57,10 @@ type Resources struct {
type Tmate struct { type Tmate struct {
Image string Image string
Enabled bool Enabled bool
Server string
Port string
RSA string
ED25519 string
} }
// Compiler compiles the Yaml configuration file to an // Compiler compiles the Yaml configuration file to an
@@ -236,6 +240,14 @@ func (c *Compiler) Compile(ctx context.Context, args runtime.CompilerArgs) runti
envs["DRONE_DOCKER_VOLUME_PATH"] = volume.HostPath.Path envs["DRONE_DOCKER_VOLUME_PATH"] = volume.HostPath.Path
} }
// create tmate variables
if c.Tmate.Server != "" {
envs["DRONE_TMATE_HOST"] = c.Tmate.Server
envs["DRONE_TMATE_PORT"] = c.Tmate.Port
envs["DRONE_TMATE_FINGERPRINT_RSA"] = c.Tmate.RSA
envs["DRONE_TMATE_FINGERPRINT_ED25519"] = c.Tmate.ED25519
}
// create the .netrc environment variables if not // create the .netrc environment variables if not
// explicitly disabled // explicitly disabled
if c.NetrcCloneOnly == false { if c.NetrcCloneOnly == false {

View File

@@ -63,20 +63,14 @@ remote_debug() {
fi fi
} }
if [ ! -z "${DRONE_TMATE_HOST}" ]; then
echo "set -g tmate-server-host $DRONE_TMATE_HOST" >> $HOME/.tmate.conf
echo "set -g tmate-server-port $DRONE_TMATE_PORT" >> $HOME/.tmate.conf
echo "set -g tmate-server-rsa-fingerprint $DRONE_TMATE_FINGERPRINT_RSA" >> $HOME/.tmate.conf
echo "set -g tmate-server-ed25519-fingerprint $DRONE_TMATE_FINGERPRINT_ED25519" >> $HOME/.tmate.conf
fi
if [ "${DRONE_BUILD_DEBUG}" = "true" ]; then if [ "${DRONE_BUILD_DEBUG}" = "true" ]; then
trap remote_debug EXIT trap remote_debug EXIT
fi fi
` `
// TODO(bradrydzewski) add timeout 30m to tmate
//
// TODO(bradrydzewski) support custom tmate config options:
//
// if [ ! -z "${DRONE_TMATE_SERVER_HOST}" ]; then
// echo "set -g tmate-server-host \"$DRONE_TMATE_SERVER_HOST\"" >> $HOME/.tmate.conf
// echo "set -g tmate-server-port $DRONE_TMATE_SERVER_PORT" >> $HOME/.tmate.conf
// echo "set -g tmate-server-rsa-fingerprint \"$DRONE_TMATE_SERVER_RSA_FINGERPRINT\"" >> $HOME/.tmate.conf
// echo "set -g tmate-server-ed25519-fingerprint \"$DRONE_TMATE_SERVER_ED25519_FINGERPRINT\"" >> $HOME/.tmate.conf
// fi
//