go - 无法使用ansible下载golang存储库

标签 go ansible

我正在尝试从 github 下载一个 golang 包。这就是我的剧本的样子

- name: Fetch latest gogs repository
      shell: "go get -u github.com/gogits/gogs"
      become: true
      become_user: git

它抛出以下错误:

{
    "changed": true, 
    "cmd": "go get -u github.com/gogits/gogs", 
    "delta": "0:00:00.002695", 
    "end": "2017-08-22 10:50:02.984669", 
    "failed": true, 
    "invocation": {
        "module_args": {
            "_raw_params": "go get -u github.com/gogits/gogs", 
            "_uses_shell": true, 
            "chdir": null, 
            "creates": null, 
            "executable": null, 
            "removes": null, 
            "warn": true
        }
    }, 
    "rc": 127, 
    "start": "2017-08-22 10:50:02.981974", 
    "stderr": "/bin/sh: go: command not found", 
    "stderr_lines": [
        "/bin/sh: go: command not found"
    ], 
    "stdout": "", 
    "stdout_lines": []
}

当我尝试这个的时候

- name: Fetch latest gogs repository
      shell: "go get -u {{ gogs_repo }}"
      environment:
        - PATH: $PATH:/usr/local/go/bin:/usr/bin
        - GOPATH: "{{gogs_home}}/{{ gogs_project_directory }}/src"
        - GOBIN:  "{{gogs_home}}/{{ gogs_project_directory }}/bin"
      become: true
      become_user: git

我遇到了这个错误

fatal: [atul-ec2]: FAILED! => {
    "changed": false, 
    "failed": true, 
    "module_stderr": "Shared connection to ec2-13-126-203-235.ap-south-1.compute.amazonaws.com closed.\r\n", 
    "module_stdout": "Traceback (most recent call last):\r\n  File \"/tmp/ansible_gntmXa/ansible_module_command.py\", line 220, in <module>\r\n    main()\r\n  File \"/tmp/ansible_gntmXa/ansible_module_command.py\", line 163, in main\r\n    os.chdir(chdir)\r\nOSError: [Errno 13] Permission denied: '/home/ec2-user/goprojects/src/src/github.com/gogits/gogs'\r\n", 
    "msg": "MODULE FAILURE", 
    "rc": 1
}

这里是我的变量

---
  go_version: go1.7.linux-amd64.tar.gz
  go_url: https://storage.googleapis.com/golang/{{ go_version }}
  go_hash: sha256:702ad90f705365227e902b42d91dd1a40e48ca7f67a2f4b2fd052aaa4295cd95
  go_project_dir: goprojects
  go_home: "{{ ansible_env.HOME }}"
  gogs_home: "/home/git"
  gogs_project_directory: "git.varadev.com"
  gogs_repo: github.com/gogits/gogs

但是当我在我的服务器上使用以下命令时

which go

我明白了

/usr/local/go/bin/go

当我手动尝试 go get -u github.com/gogits/gogs 时,它工作正常。

最佳答案

希望这可以帮助您作为起点:

---
- hosts: all
  connection: local 

  tasks:
  - name: check go version
    command: go version
    register: result
    changed_when: no
    ignore_errors: true

  - set_fact:
      go_path: "{{ lookup('env', 'GOPATH') | default(ansible_env.HOME+'/go', true) }}"
    when: not result|failed

  - name: go get gogs
    shell: go get -u github.com/gogits/gogs
    environment:
      GOPATH: "{{ go_path }}"
    register: gogs
    when: not result|failed

  - debug: var=gogs

试着在你的远程服务器上输入:

ansible-playbook gogs.yml -i localhost,

如果可行,稍后再远程尝试。

通常你不想这样做,因为你想通过 ssh 远程执行它,但是由于你到目前为止已经尝试过并且出现了一些错误,可能通过本地尝试 connection: local 可以帮助更详细地调试此问题。

关于go - 无法使用ansible下载golang存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45815938/

相关文章:

xml - func Encode(),编码xml的所有部分

Ansible - 是否可以在任务/剧本中运行或合并两个不同的 list ?

git - Ansible:如何在一个剧本中的其他主机上运行任务?

linux - 如何使用 Ansible 安装 MongoDB?

node.js - 将 pm2 与 ansible 结合使用

docker - 使用 Ansible 安装 Docker

go - 如何在循环外使用模板变量?

go - 将带有前导零的整数传递给golang中的函数

pointers - Golang 向下类型转换结构

node.js - 通过 POST 登录不会产生有效 session