jira中issue状态的改变触发Jenkins构建配置请参考:
配置参考这里https://blog.csdn.net/yan1234abcd/article/details/52131223
脚本是基于python3环境,需pip安装python-gitlab,jira库
脚本比较简单,实现:获取jira流程里面仓库名字段,组字段,组成员信息字段,通过gitlab的api创建仓库,创建组,并把组成员加入到组里,项目加入到组里。请上代码:
#!/usr/bin/env python
from jira import JIRA
import gitlab, os
#登录gitlab
def login_gitlab(url, token):
Gitlab = gitlab.Gitlab(url, token)
return Gitlab
#登录jira
def login_jira(username, password):
jira = JIRA("http://jira.xxxooo.com.cn", basic_auth=(username, password))
return jira
def create_project(gl, project_name, description=None):
# 创建项目
if description:
res = gl.projects.create({"name": project_name, "description": description})
else:
res = gl.projects.create({"name": project_name, })
#res.project.branches.create({'branch': 'dev', 'ref': 'master'})
return res
#创建组
def create_group(gl, group_name, project_name):
group = gl.groups.create({'name': group_name, 'path': group_name})
project_id = gl.projects.list(search=project_name)[0].id
project = gl.projects.get(project_id)
if group_name.split('_')[-1] == 'master':
#把项目加入到组里
project.share(group.id, gitlab.MAINTAINER_ACCESS)
#把成员加入到组里
for i in master_values:
master_name = i.name
user = gl.users.list(username=master_name)[0]
group.members.create({'user_id': user.id,
'access_level': gitlab.MAINTAINER_ACCESS})
else:
#把成员加入到组里
project.share(group.id, gitlab.DEVELOPER_ACCESS)
#把成员加入到组里
for i in developer_values:
developer_name = i.name
user = gl.users.list(username=developer_name)[0]
group.members.create({'user_id': user.id,
'access_level': gitlab.DEVELOPER_ACCESS})
if __name__ == '__main__':
url = "http://0.0.0.0/"
token = "gitlab_token"
gl = login_gitlab(url, token)
username = "jira_user"
password = "jira_passwd"
jira = login_jira(username, password)
#jira钩子传过来的issue的key
scm_key = os.environ['JIRA_ISSUE_KEY']
issue = jira.issue(scm_key)
# 需创建的项目名
repo_name = issue.fields.customfield_10784
#master权限成员
master_values = issue.fields.customfield_11106
#开发权限成员
developer_values = issue.fields.customfield_11107
# 需创建的组名
group_m = repo_name + '_master'
group_d = repo_name + '_developer'
print('开始创建%s' % repo_name)
create_project(gl, repo_name)
print('开始创建master的group,并添加到仓库。\n')
create_group(gl, group_m, repo_name)
print('开始创建developer的group,并添加到仓库。')
create_group(gl, group_d, repo_name)