Я пытаюсь написать правила развертывания с Ansible, чтобы клонировать репозиторий - PullRequest
3 голосов
/ 07 мая 2020

Я выполнил следующие шаги:

  • Ansible войдите как root пользователь
  • Пакеты сервера обновлений
  • Создайте пользователя с именем deploy
  • Клонировать Git Репозиторий с bitbucket.org

Я хочу клонировать репозиторий в качестве пользователя развертывания в его домашнем каталоге, используя метод пересылки s sh.

Но проблема в том, что я не могу получить разрешения даже через s sh пересылку, и ошибка возвращается как: Нет прав на доступ к репозиторию.

Мой инвентарь file:

[production]
rails ansible_host=(my host ip) ansible_user=ubuntu

Мой ansible .cfg файл выглядит следующим образом:

[ssh_connection]
pipelining=True
ssh_args = -o ForwardAgent=true

Мой playbook выглядит так:

---
- hosts: production
  remote_user: root
  become: yes
  tasks:
    - name: Update all packages to latest version
      apt:
        upgrade: dist
    - add deploy user tasks here
      (deploy user add task)
    - name: APP | Clone repo
        git:
          repo: git@github.com:e911/Nepali-POS-Tagger.git
          dest: home/deploy/myproject
          accept_hostkey: true
          force: true
        become: yes
        become_user: deploy
        tags: app

Мой пользователь развертывания создан, но по какой-то причине я не могу клонировать пользователя в качестве пользователя развертывания. У него нет права доступа. Я исследовал и думаю, что это похоже на то, что ключи s sh не привязаны. Когда я вхожу в систему как ubuntu и переключаю пользователя на развертывание, прикрепленные ключи не пересылаются для развертывания. Но у меня нет решения для этого. Как решить эту проблему? Или что я здесь делаю не так?

Вот фрагмент ошибки:

fatal: [rails]: FAILED! => {
    "changed": false,
    "cmd": "/usr/bin/git clone --origin origin '' /home/deploy/myproject",
    "invocation": {
        "module_args": {
            "accept_hostkey": true,
            "archive": null,
            "bare": false,
            "clone": true,
            "depth": null,
            "dest": "/home/deploy/myproject",
            "executable": null,
            "force": true,
            "gpg_whitelist": [],
            "key_file": null,
            "recursive": true,
            "reference": null,
            "refspec": null,
            "remote": "origin",
            "repo": "git@github.com:e911/Nepali-POS-Tagger.git",
            "separate_git_dir": null,
            "ssh_opts": null,
            "track_submodules": false,
            "umask": null,
            "update": true,
            "verify_commit": false,
            "version": "HEAD"
        }
    },
    "msg": "",
    "rc": 128,
    "stderr": "Cloning into '/home/deploy/myproject'...\ngit@github.com: Permission denied (publickey).\r\nfatal: Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.\n",
    "stderr_lines": [
        "Cloning into '/home/deploy/myproject'...",
        "git@github.com: Permission denied (publickey).",
        "fatal: Could not read from remote repository.",
        "",
        "Please make sure you have the correct access rights",
        "and the repository exists."
    ],
    "stdout": "",
    "stdout_lines": []
}

Я пробовал решения здесь: Ansible и Git Permission denied (publickey ) в Git Clone , но это не помогло.

1 Ответ

4 голосов
/ 10 мая 2020

У нас есть альтернативное решение, используя HTTP вместо SSH:

Для GitHub:

  • Создайте Token по ссылке: https://github.com/settings/tokens
  • Дайте разрешение с помощью scope: repo (полный контроль над частными репозиториями)
  • Используйте этот токен git+https://<TOKEN>:x-oauth-basic@github.com/<ORGANIZATION>/<REPO>.git#<BRANCH>

Для BitBucket:

  • Создание случайного Password для вашего репо по ссылке: https://bitbucket.org/account/settings/app-passwords
  • Дать разрешение с областью действия Repositories: Read
  • Используйте этот пароль для клонирования вашего репо как: git clone https://<USERNAME>:<GENERATED_PASSWORD>@bitbucket.org/<ORGANIZATION>/<REPO>.git

Надеюсь, это может быть альтернативой для решения.

...