mirror of
https://github.com/ChenjxJames/SFTP-Deploy-Action.git
synced 2025-09-10 03:39:47 +08:00
1. init
This commit is contained in:
15
Dockerfile
Normal file
15
Dockerfile
Normal file
@@ -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"]
|
57
README.md
Normal file
57
README.md
Normal file
@@ -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'
|
42
action.yml
Normal file
42
action.yml
Normal file
@@ -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 }}
|
24
entrypoint.sh
Normal file
24
entrypoint.sh
Normal file
@@ -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
|
||||||
|
|
Reference in New Issue
Block a user