Развертывание конвейера Gitlab с использованием rsync - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь развернуть все содержимое текущего репозитория git (включая ветку и коммит) и развернуть его на удаленном сервере, используя rsyn c.

Теперь у меня есть 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/

Я получаю ошибку

> 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

Теперь я не linux эксперт, но параметры, которые " необходимо помнить следующее:

  • S SH порт: 2222
  • S SH ключ (насколько я знаю) успешно импортирован

Кто-нибудь, кто знает, как я могу передать весь контент (исключая некоторые файлы) и «pu sh», который на мой удаленный сервер, как «непрерывная доставка»?

1 Ответ

1 голос
/ 05 февраля 2020

Согласно справочной странице sshpass , вы можете указать пароль в командной строке, используя опцию -p и указать sshpass использовать пароль из переменной окружения SSHPASS при использовании опции -e.

Поскольку вы можете указать пароль только один раз, но вы использовали оба параметра, sshpass не знает, откуда взять пароль (из командной строки или переменной среды), и поэтому не удается.

Параметры -f (для чтения из файла) и -d (для чтения из дескриптора файла) также нельзя использовать в сочетании с любыми другими параметрами.

...