我必须同意你的观点,Gitlab 的 API 包装器 third-party applications 的文档并不理想,但我确实设法让其中一个工作。
为此,我在运行 Ubuntu 14.04 的 vagrant box 中设置了一个沙箱 gitlab 服务器(GitLab Community Edition 8.0.5)。
现在,我使用的 API 包装器是 this one(python-gitlab by Gauvain Pocentek)。我选择这个是因为它有足够多的人主演(撰写本文时有 118 人),而且它是用 python 编写的,所以可移植性不会成为问题(我的主机是 Windows 和 cygwin em>,但我将使用 unix 语法来回答这个问题)。
使用pip 安装非常简单:
$ sudo pip install python-gitlab
一旦安装,您将不得不修改一个配置文件 - 不存在 开箱即用 或者,至少,我找不到它 - (文档不清楚这)。此文件的“官方”名称是 .python-gitlab.cfg,这是 config.py 默认搜索的文件。
无论如何,我根据项目github 中的示例语法创建了自己的.python-gitlab.cfg 版本,如下所示:
[global]
# required setting
default = local
# optional settings
ssl_verify = false
timeout = 5
[local]
# url = http://10.0.3.2:8080
# get the private token from the gitlab web interface
# private_token = vTbFeqJYCY3sibBP7BZM
[remote]
url = YOUR SERVER URL GOES HERE
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = false
[remote-ssl]
url = YOUR HTTPS URL GOES HERE (eg https://gitlab.ccompanyname.com))
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = true (VALID CERTIFICATE) OR false (SELF-SIGNED CERTIFICATE)
您必须从网络界面(在个人资料设置 :: 帐户中找到)为自己获取一个私人令牌,因为正如自述文件指出的那样,
仅支持私有令牌身份验证(不支持用户/密码)。
搞定后,创建项目就可以这样实现了,http:
$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote project create --name YOUR_PROJECT_NAME
喜欢这个https:
$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote-ssl project create --name YOUR_PROJECT_NAME
上面用到的开关,可以通过查看帮助找到:
$ gitlab --help
现在,假设您已经处理了 SSH 密钥(本地和 Web 界面中的),并且您希望 gitlab 存储库名称与本地 git 中的目录相同,然后,像下面这样一个小bash 脚本,可以自动创建项目和本地 repos 推送:
#!/usr/bin/bash
cd 'PATH/TO/YOUR/REPOS/DIRECTORY' # enter your local repos dir here
server="YOUR SERVER" # enter your server URL
user="YOUR USER" # enter your user name
gitlab_cfg="PATH/TO/YOUR/.python-gitlab.cfg" # enter the location of config file
#method="remote" # uncomment for http, comment for https
method="remote-ssl" # uncomment for https, comment for http
for i in $( ls -1 ); do
echo
echo
echo '>> Creating Project'
gitlab -c $gitlab_cfg --gitlab $method project create --name $i
echo '>> Project ' $i 'created'
echo '>> ------'
cd $i
li=$( tr '[A-Z]' '[a-z]' <<< $i) # convert dirname to lowercase, safe with older bashes (<4)
origin="git@$server:$user/$li.git"
echo ">> Reassigning origin to : $origin"
git remote rm origin
git remote add origin $origin
git remote -v
echo '>> Pushing local repo to gitlab'
git push -u origin master
echo '>> Done'
echo
echo
cd ..
done
echo
echo 'Operation finished'
它的作用是创建以外部本地 git 目录中的目录命名的 gitlab 项目,然后将cd 放入每个项目中,更新源,然后执行推送。
这里要提一提的是,gitlab 会将repo url 转换为小写,例如sampleRepo001 在repo 的url 中变成samplerepo001;这就是我在脚本中将目录名转换为小写的原因。
最后,这是一个脚本运行示例:
提醒一下,如果您想使用此脚本,请在应用到实际生产服务器之前进行彻底测试。
更新 - 我添加了一些关于如何处理 HTTPS/SSL 的更多信息。