简体   繁体   中英

Gitlab pipeline deploy using rsync

I'm trying to deploy all the content of the current git repository (including branch and commit) and deploy that to a remote server using rsync.

Now I have I gitlab-ci file that has the following content in it:

image: ubuntu:18.04

.init_development_ssh: &init_development_ssh |
    eval $(ssh-agent -s)
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    [[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    ssh-add <(echo "$STAGING_PRIVATE_KEY")

.tag: &tag
  tags:
    - pixel-rp

stages:
  - lint
  - deploy

linting code:
  # Use the LUA image
  image: mhndev/docker-lua
  <<: *tag
  stage: lint
  before_script:
    - luarocks install luacheck
  script: luacheck fx-server-data
  allow_failure: true

deploy to testing:
  <<: *tag
  stage: deploy
  before_script:
    - apt -y update && apt -y upgrade && apt install -y openssh-client rsync sshpass
    - *init_development_ssh
  script:
    - sshpass -p "$SSH_PASS" -e "ssh -p 2222" rsync -rav --exclude='.git/' --exclude='.gitlab-ci.yml' --delete-excluded /builds/pixel-rp/pixel-server/ user@IP:/home/user/FXServer/server-data/

The error I get is

> Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
    -f filename   Take password to use from file
    -d number     Use number as file descriptor for getting password
    -p password   Provide password as argument (security unwise)
    -e            Password is passed as env-var "SSHPASS"
    With no parameters - password will be taken from stdin
    -P prompt     Which string should sshpass search for to detect a password prompt
    -v            Be verbose about what you're doing
    -h            Show help (this screen)
    -V            Print version information
 At most one of -f, -d, -p or -e should be used
 Conflicting password source

Now I'm not a linux expert, but the parameters that are "required" to keep in mind are the following:

  • SSH port: 2222
  • SSH key is (as far as I know) successfully imported

Anyone who knows how I can take all the content (exclude some files) and "push" that to my remote server as "continious delivery"?

According to the manpage of sshpass , you can specify the password in the command line using the option -p and tell sshpass to use the password from the environment variable SSHPASS when using the option -e .

As you can only specify the password once but you used both options, sshpass does not know where to take the password from (from the command line or the environment variable) and therefor fails.

The options -f (to read from a file) and -d (to read from a file descriptor) also can't be used in combination with any of the other options.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM