13819778ab
- Add repository checkout step to lint workflow - Update Go version in lint workflow to use `go.mod` file and check latest version - Change container image in lint workflow from `golang:1.21-alpine` to `golang:1.22-alpine` - Update Go version in `go.mod` from `1.18` to `1.22` Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> |
||
---|---|---|
.github | ||
docker | ||
tests | ||
.gitignore | ||
.goreleaser.yaml | ||
.hadolint.yaml | ||
DOCS.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
command.go | ||
command_test.go | ||
go.mod | ||
go.sum | ||
main.go | ||
path.go | ||
path_windows.go | ||
path_windows_test.go | ||
plugin.go | ||
plugin_test.go |
README.md
drone-scp
Copy files and artifacts via SSH using a binary, docker or Drone CI.
Feature
- Support routines.
- Support wildcard pattern on source list.
- Support send files to multiple host.
- Support send files to multiple target folder on host.
- Support load ssh key from absolute path or raw body.
- Support SSH ProxyCommand.
+--------+ +----------+ +-----------+
| Laptop | <--> | Jumphost | <--> | FooServer |
+--------+ +----------+ +-----------+
OR
+--------+ +----------+ +-----------+
| Laptop | <--> | Firewall | <--> | FooServer |
+--------+ +----------+ +-----------+
192.168.1.5 121.1.2.3 10.10.29.68
Breaking changes
v1.5.0
: change command timeout flag to Duration
. See the following setting:
- name: scp files
image: appleboy/drone-scp
settings:
host:
- example1.com
- example2.com
username: ubuntu
password:
from_secret: ssh_password
port: 22
- command_timeout: 120
+ command_timeout: 2m
target: /home/deploy/web
source:
- release/*.tar.gz
Build or Download a binary
The pre-compiled binaries can be downloaded from release page. Support the following OS type.
- Windows amd64/386
- Linux arm/amd64/386
- Darwin amd64/386
With Go
installed
export GO111MODULE=on
go get -u -v github.com/appleboy/drone-scp
or build the binary with the following command:
export GOOS=linux
export GOARCH=amd64
export CGO_ENABLED=0
export GO111MODULE=on
go test -cover ./...
go build -v -a -tags netgo -o release/linux/amd64/drone-scp .
Docker
Build the docker image with the following commands:
make docker
Usage
There are three ways to send notification.
Usage from binary
Using public key
drone-scp --host example.com \
--port 22 \
--username appleboy \
--key-path "${HOME}/.ssh/id_rsa" \
--target /home/appleboy/test \
--source your_local_folder_path
Using password
drone-scp --host example.com \
--port 22 \
--username appleboy \
+ --password xxxxxxx \
--target /home/appleboy/test \
--source your_local_folder_path
Using ssh-agent
Start your local ssh agent:
eval `ssh-agent -s`
Import your local public key ~/.ssh/id_rsa
ssh-add
You don't need to add --password
or --key-path
arguments.
drone-scp --host example.com \
--port 22 \
--username appleboy \
--target /home/appleboy/test \
--source your_local_folder_path
Send multiple source or target folder and hosts
drone-scp --host example1.com \
+ --host example2.com \
--port 22 \
--username appleboy \
--password xxxxxxx
--target /home/appleboy/test1 \
+ --target /home/appleboy/test2 \
--source your_local_folder_path_1
+ --source your_local_folder_path_2
Usage from docker
Using public key
docker run --rm \
-e SCP_HOST=example.com \
-e SCP_USERNAME=xxxxxxx \
-e SCP_PORT=22 \
-e SCP_KEY_PATH="${HOME}/.ssh/id_rsa"
-e SCP_SOURCE=SOURCE_FILE_LIST \
-e SCP_TARGET=TARGET_FOLDER_PATH \
-v $(pwd):$(pwd) \
-w $(pwd) \
appleboy/drone-scp
Using password
docker run --rm \
-e SCP_HOST=example.com \
-e SCP_USERNAME=xxxxxxx \
-e SCP_PORT=22 \
+ -e SCP_PASSWORD="xxxxxxx"
-e SCP_SOURCE=SOURCE_FILE_LIST \
-e SCP_TARGET=TARGET_FOLDER_PATH \
-v $(pwd):$(pwd) \
-w $(pwd) \
appleboy/drone-scp
Using ssh-agent, start your local ssh agent:
eval `ssh-agent -s`
Import your local public key ~/.ssh/id_rsa
ssh-add
You don't need to add SCP_PASSWORD
or SCP_KEY_PATH
arguments.
docker run --rm \
-e SCP_HOST=example.com \
-e SCP_USERNAME=xxxxxxx \
-e SCP_PORT=22 \
-e SCP_SOURCE=SOURCE_FILE_LIST \
-e SCP_TARGET=TARGET_FOLDER_PATH \
-v $(pwd):$(pwd) \
-w $(pwd) \
appleboy/drone-scp
Send multiple source or target folder and hosts
docker run --rm \
-e SCP_HOST=example1.com,example2.com \
-e SCP_USERNAME=xxxxxxx \
-e SCP_PASSWORD=xxxxxxx \
-e SCP_PORT=22 \
-e SCP_SOURCE=SOURCE_FILE_LIST_1,SOURCE_FILE_LIST_2 \
-e SCP_TARGET=TARGET_FOLDER_PATH_1,TARGET_FOLDER_PATH_2 \
-v $(pwd):$(pwd) \
-w $(pwd) \
appleboy/drone-scp
Usage from drone ci
Execute from the working directory:
docker run --rm \
-e PLUGIN_HOST=example.com \
-e PLUGIN_USERNAME=xxxxxxx \
-e PLUGIN_PASSWORD=xxxxxxx \
-e PLUGIN_PORT=xxxxxxx \
-e PLUGIN_SOURCE=SOURCE_FILE_LIST \
-e PLUGIN_TARGET=TARGET_FOLDER_PATH \
-e PLUGIN_RM=false \
-e PLUGIN_DEBUG=true \
-v $(pwd):$(pwd) \
-w $(pwd) \
appleboy/drone-scp
You can get more information about how to use scp in drone.
Testing
Test the package with the following command:
make test