简体   繁体   English

使用 rsync 部署 Gitlab 管道

[英]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.我正在尝试部署当前 git 存储库的所有内容(包括分支和提交)并使用 rsync 将其部署到远程服务器。

Now I have I gitlab-ci file that has the following content in it:现在我有一个 gitlab-ci 文件,其中包含以下内容:

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:现在我不是 linux 专家,但要记住的“必需”参数如下:

  • SSH port: 2222 SSH 端口:2222
  • SSH key is (as far as I know) successfully imported SSH 密钥(据我所知)已成功导入

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 .根据sshpass联机帮助页,您可以使用选项-p在命令行中指定密码,并在使用选项-e时告诉 sshpass 使用来自环境变量SSHPASS的密码。

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.由于您只能指定一次密码但同时使用了两个选项,因此 sshpass 不知道从哪里获取密码(从命令行或环境变量),因此失败。

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.选项-f (从文件中读取)和-d (从文件描述符中读取)也不能与任何其他选项结合使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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