2016-06-30 17 views
0

次は私のgithookです:gitlabプリ受けるフックPythonのインポートエラー

import os 
print 'hi from draj pre-receive githook' 
import gitlab, subprocess 

私はgitlabのUbuntuのインスタンスにsshとそれを実行すると、それは正しく「draj事前に受信githookからこんにちは」印刷して終了成功する。私はgithookがためにインストールされているリポジトリにプッシュするとき

は、しかし、私が手:

remote:  import os, gitlab, subprocess 
remote: ImportError: No module named gitlab 
To https://gitlab.learningdollars.com/root/00-boilerplate-draj.git 
! [remote rejected] master -> master (pre-receive hook declined) 

私は、これら2つのポストを見て:How can I run a virtualenv python script as a git pre-commit hookremote: ImportError: No module named gitlab、彼らは環境変数が原因であることを示唆しているように見えます問題。

だから私は環境を印刷するには、私のgithookを変更:

import os 
print 'hi from draj pre-receive githook' 
print 'os.environ: ', os.environ 
import gitlab, subprocess 

だから私は私のgitlabインスタンス上で直接私の前受けるフックを走り、私が得た:私がしようとすると、

hi from draj pre-receive githook 
os.environ: {'LANG': 'en_US.UTF-8', 'USERNAME': 'root', 'TERM': 'xterm-256color', 'SHELL': '/bin/bash', 'MAIL': '/var/mail/root', 'SUDO_UID': '[OBFUSCATED]', 'SUDO_GID': '[OBFUSCATED]', 'SUDO_COMMAND': '/var/opt/gitlab/git-data/repositories/root/00-boilerplate-draj.git/custom_hooks/pre-receive', 'LOGNAME': 'root', 'USER': 'root', 'HOME': '/home/ubuntu', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'SUDO_USER': 'ubuntu', 'LS_COLORS': '[OBFUSCATED]'} 

しかし、

(venv)Govindas-MacBook-Pro:boilerplate_draj govindadasu$ git push origin master 
Counting objects: 2, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (2/2), 284 bytes | 0 bytes/s, done. 
Total 2 (delta 1), reused 0 (delta 0) 
remote: hi from draj pre-receive githook 
remote: os.environ: {'HOME': '', 'GIT_DIR': '.', 'LD_LIBRARY_PATH': '', 'GL_ID': 'user-1', 'PATH': '/opt/gitlab/bin:/opt/gitlab/embedded/bin:/opt/gitlab/embedded/libexec/git-core:/opt/gitlab/embedded/libexec/git-core:/opt/gitlab/bin:/opt/gitlab/embedded/bin:/bin:/usr/bin'} 
remote: Traceback (most recent call last): 
remote: File "/var/opt/gitlab/git-data/repositories/root/00-boilerplate-draj.git/custom_hooks/pre-receive", line 9, in <module> 
remote:  import gitlab, subprocess 
remote: ImportError: No module named gitlab 
To https://gitlab.learningdollars.com/root/00-boilerplate-draj.git 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to 'https://gitlab.learningdollars.com/root/00-boilerplate-draj.git' 

しかし、これらの記事で提供されていないものは、正確にどのように提供されているのですか私はgitlabをインポートするためにpre-receive githookを使って環境を変更するはずですか?

答えて

0

remote: ImportError: No module named gitlabは解決策へのヒントを持っていましたが、bashプリ受信フックは私のgitlabインスタンスでは機能しませんでした。だから私は、作成された汎用事前に受け取る:

#!/usr/bin/env python 
import os, subprocess 
subprocess.call(['/usr/bin/python2.7', './custom_hooks/pre-receive.py']) 

を、あなたが見ることができるように呼び出されただけで、実際のプレインストール受け取るgitlabた環境で働いていたのpythonのインストールを使用して、それから。

関連する問題