From fb476625c3ac0a38b4d4f401f586d961fe904595 Mon Sep 17 00:00:00 2001 From: william <> Date: Mon, 17 Feb 2020 19:50:46 +0800 Subject: [PATCH] 1. init --- Dockerfile | 15 ++++++++++++++ README.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ action.yml | 42 +++++++++++++++++++++++++++++++++++++ entrypoint.sh | 24 ++++++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 action.yml create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a90c416 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +# Container image that runs your code +FROM alpine:3.10 + +# Copies your code file from your action repository to the filesystem path `/` of the container +COPY entrypoint.sh /entrypoint.sh + +#Make sure to make you entrypoint.sh file executable: +RUN chmod 777 entrypoint.sh + +RUN apk update +RUN apk add --no-cache openssh + + +# Code file to execute when the docker container starts up (`entrypoint.sh`) +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..609fbf1 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# SFTP Deploy action + +> Use this action to deploy your files to server using `SSH Private Key` + +> 使用此`action`部署你的项目到服务器上,`仅支持密钥对连接` + + +## Inputs + +### `username` + +> **Required** sftp username. + +### `server` + +> **Required** sftp server address. + +### `port` + +> sftp srever port , default `22`. + +### `ssh_private_key` + +> **Required** you can copy private_key from your `ssh_private_key.pem file`, keep format, and save at`repo/settings/secrets` + +### `local_path` + +> **Required** `local_path` of you project, if you want put single file:use path like `./myfile`, if you want put directory: use path like `./static/*`, it will put all files under `static` directory. Default to `./*`(will put all files in your repo). + +### `remote_path` +> **Required** remote_path + +### `args` +> args of sftp cmd, E.g.`-o ConnectTimeout=5` + + +## Example usage + + + on: [push] + + jobs: + deploy_job: + runs-on: ubuntu-latest + name: deploy + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: deploy file + uses: ./ # Uses an action in the root directory + with: + username: 'root' + server: 'your server ip' + private_key: ${{ secrets.SSH_PRIVATE_KEY }} + local_path: './static/*' + remote_path: '/var/www/app' #make sure dir exist + args: '-o ConnectTimeout=5' diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..8f7ccdd --- /dev/null +++ b/action.yml @@ -0,0 +1,42 @@ +# action.yml +name: 'Deploy file use sftp' +description: 'deploy file to your server use sftp' +inputs: + username: + description: 'username' + required: true + server: + description: 'your sftp server' + required: true + port: + description: 'your sftp server port, default to 22' + required: true + default: "22" + ssh_private_key: + description: 'you can copy private_key from your *.pem file, keep format' + required: true + local_path: + description: 'will put all file under this path' + required: true + default: ./* + remote_path: + description: 'files will copy to under remote_path' + required: true + default: / + + args: + description: 'sftp args' + required: false + + +runs: + using: 'docker' + image: 'Dockerfile' + args: + - ${{ inputs.username }} + - ${{ inputs.server }} + - ${{ inputs.port }} + - ${{ inputs.ssh_private_key }} + - ${{ inputs.local_path }} + - ${{ inputs.remote_path }} + - ${{ inputs.args }} diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..e9290fe --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,24 @@ +#!/bin/sh -l + +#set -e at the top of your script will make the script exit with an error whenever an error occurs (and is not explicitly handled) +set -eu + + +TEMP_SSH_PRIVATE_KEY_FILE='../private_key.pem' +TEMP_SFTP_FILE='../sftp' + +# keep string format +printf "%s" "$4" >$TEMP_SSH_PRIVATE_KEY_FILE +# avoid Permissions too open +chmod 600 $TEMP_SSH_PRIVATE_KEY_FILE + +echo 'sftp start' + +# create a temporary file containing sftp commands +printf "%s" "put -r $5 $6" >$TEMP_SFTP_FILE +#-o StrictHostKeyChecking=no avoid Host key verification failed. +sftp -b $TEMP_SFTP_FILE -P $3 $7 -o StrictHostKeyChecking=no -i $TEMP_SSH_PRIVATE_KEY_FILE $1@$2 + +echo 'deploy success' +exit 0 +