一.运维平台打通gitlab
gitlab服务器搭建--腾讯云及api使用:
1.搭建:
[root@VM_0_5_centos ~]#rz [root@VM_0_5_centos ~]#yum install gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm [root@VM_0_5_centos ~]#vi /etc/gitlab/gitlab.rb external_url \'http://120.53.122.**\' [root@VM_0_5_centos ~]#gitlab-ctl reconfigure [root@VM_0_5_centos ~]#gitlab-ctl start [root@VM_0_5_centos ~]#gitlab-ctl status
禁止 Gitlab 开机自启动: systemctl disable gitlab-runsvdir.service 启用 Gitlab 开机自启动: systemctl enable gitlab-runsvdir.service
访问gitlab服务器http://120.53.122.**/
并配置白名单:
gitlab_rails[\'rack_attack_git_basic_auth\'] = {
\'enabled\' => true,
\'ip_whitelist\' => ["127.0.0.1","120.53.122.**"],
\'maxretry\' => 10,
\'findtime\' => 60,
\'bantime\' => 3600
}
gitlab获取/修改超级管理员root的密码初始密码:
[root@VM_0_5_centos /]# cd /opt/gitlab/bin/
[root@VM_0_5_centos bin]# sudo gitlab-rails console production 开始初始化密码
u=User.where(id:1).first 查找与切换账号(User.all 可以查看所有用户)
u.password=\'12345678\'
u.password_confirmation=\'12345678\' 再次确认密码
u.save! (切记切记 后面的 !号)
2.gitlab简单使用
上传到gitlab:
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
mkdir gitlabcode 也可以把远程项目test1克隆下来
git init
git remote add origin git@120.53.122.78:root/test1.git
git add *
git commit -m "add test.py"
git remote add origin git@120.53.122.78:root/test1.git
push -u origin master
git tag
git tag v1.0
git push origin v1.0
[root@CentOS gitlabcode]# git tag -a v2.0 -m \'v2.0 release\'
[root@CentOS gitlabcode]# git push origin v2.0
3.gitlab api使用:
传上你的客户机公钥
(1)[root@CentOS ~]# ssh-keygen -t rsa -C "your.email@example.com" -b 4096
(2)设置root用户下的access tokens

给项目加描述和tag

(python36env) [vagrant@CentOS devops]$ pip install python-gitlab (python36env) [vagrant@CentOS devops]$ ipython import gitlab url = "http://120.53.122.**/" token = "xzDUyi7ijQw_bo79Wsph" gl = gitlab.Gitlab(url, token) 下面这条是创建用户 res = gl.users.create({\'username\': "devops8", \'password\':"12345678",\'email\': "devops@reboot.com", \'name\': "devops8"}) project = gl.projects.create({\'name\':\'test\'}) 创建项目
这样通过客户机也能连接并写数据到gitlab服务器上了。并且在gitlab服务器上也能看到刚才创建的项目test和用户devops8了...调用api成功!
1.后端:
(1)apps/projects/models.py: -----空
(python36env) [vagrant@CentOS devops]$ django-admin startapp projects (python36env) [vagrant@CentOS devops]$ mv projects apps/ (python36env) [vagrant@CentOS devops]$ python manage.py makemigrations projects (python36env) [vagrant@CentOS devops]$ python manage.py migrate projects
(2)projects/router.py:
from rest_framework.routers import DefaultRouter from .views import ProjectListView, ProjectVersionsView project_router = DefaultRouter() project_router.register(r\'list\', ProjectListView, basename="list") project_router.register(r\'tag\', ProjectVersionsView, basename="tag")
(3)projects/views.py:
from django.views.generic import View from django.http import HttpResponse from utils.gitlab_api import get_user_projects, get_project_versions import json class ProjectListView(View): """ 登陆用户所有项目列表 """ def get(self, request): my_projects = get_user_projects(request) json_list = [] for project in my_projects: json_dict = {} json_dict[\'id\'] = project.id json_dict[\'name\'] = project.name json_dict[\'path_with_namespace\'] = project.path_with_namespace json_dict[\'web_url\'] = project.web_url json_dict[\'description\'] = project.description json_list.append(json_dict) return HttpResponse(json.dumps(json_list), content_type="application/json") class ProjectVersionsView(View): """ 获取指定项目的所有版本 """ def get(self, request): project_id = request.GET.get(\'project_id\') print(project_id) tag_list = [] tags = get_project_versions(int(project_id)) for tag in tags: tag_dict = {} tag_dict[\'name\'] = tag.name tag_dict[\'info\'] = tag.message tag_list.append(tag_dict) return HttpResponse(json.dumps(tag_list), content_type=\'application/json\')
(4)projects/urls.py:
from django.conf.urls import url from .views import * app_name =\'projects\' urlpatterns = [ url(\'^list/$\', ProjectListView.as_view(), name=\'project_list\'), url(\'^tag/$\', ProjectVersionsView.as_view(), name=\'project_tag\') ]
(5)apps/utils/gitlab_api.py
import gitlab from devops.settings import GITLAB_HTTP_URI, GITLAB_TOKEN gl = gitlab.Gitlab(GITLAB_HTTP_URI, GITLAB_TOKEN) def get_user_projects(request): """ 获取gitlab里所有的项目,和登录用户所拥有的项目,以及登录用户所拥有项目的项目成员 :return: [] """ user_projects = [] all_projects = gl.projects.list() print(request.user.username) print(all_projects) # 获取当前用户所有的项目 for project in all_projects: print(project) for member in project.members.list(): # if member.username == request.user.username: if member.username == "root": user_projects.append(project) print(user_projects) return user_projects def get_project_versions(project_id): """ 获取某个项目的版本号 :param project_id: :return: """ project = gl.projects.get(project_id) tags = project.tags.list() print(tags) return tags
(6)devops/urls.py:
from devops.settings import STATIC_ROOT urlpatterns = [ url(r\'^api/\', include(router.urls)), url(r\'^\', include(\'resources.urls\')), url(r\'^api-auth/\', include(\'rest_framework.urls\')), url(r\'^docs/\', include_docs_urls("51reboot接口文档")), url(\'^projects/\', include(\'projects.urls\', namespace=\'projects\')), url(r\'^api-token-auth/\', obtain_jwt_token), ]
(7)devops/settings.py:
STATIC_URL = \'/static/\' STATIC_ROOT = os.path.join(BASE_DIR, "static/") GITLAB_HTTP_URI = "http://120.53.122.**/" GITLAB_TOKEN = "xzDUyi7ijQw_bo79Wsph"
启动报错:
报错ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. 解决办法: 在自己的app下的urls中写上appname
效果如下:
2.前端:
(1)views/project/project/index.vue
<template> <div class="project"> <!--表格--> <project-list :value="projects"/> </div> </template> <script> import { getProjectList } from \'@/api/project/project\' import ProjectList from \'./table\' export default { name: \'Project\', components: { ProjectList }, data() { return { projects: [] } }, created() { this.fetchData() }, methods: { fetchData() { getProjectList().then( res => { this.projects = res console.log(this.projects) }) } } } </script> <style lang=\'scss\' scoped> .project { padding: 10px; } pre { font-weight: bold; color: white; font-size: 16px; background-color: black; } </style>
(2)views/project/project/table.vue
<template> <div class="project-list"> <el-table :data="value" border stripe style="width: 100%"> <el-table-column label="项目名称" prop="path_with_namespace"/> <el-table-column label="项目描述" prop="description"/> <el-table-column label="项目地址" prop="web_url"/> </el-table> </div> </template> <script> export default { name: \'ProjectList\', props: { value: { type: Array, default: function() { return [] } } } } </script> <style lang=\'scss\'> .project-list {} </style>
(3)api/project/project.js
import request from \'@/utils/request\' // 获取当前用户任务列表 export function getProjectList() { return request({ url: \'/projects/list/\', method: \'get\' }) } // 获取当前项目tag列表 export function getProjectTag(params) { return request({ url: \'/projects/tag/\', method: \'get\', params }) }
(4)src/router/index.js
{ path: \'/project\', component: Layout, name: \'项目管理\', meta: { title: \'项目管理\', icon: \'code\' }, children: [ { path: \'project\', name: \'项目管理\', component: () => import(\'@/views/project/project/index\'), meta: { title: \'项目管理\', icon: \'user\' } } ] },
效果如图:
二.发布申请联通gitlab
(python36env) [vagrant@CentOS devops]$ ipython
import gitlab
url = "http://120.53.122.**/"
token = "xzDUyi7ijQw_bo79Wsph"
gl = gitlab.Gitlab(url, token)
p = gl.projects.get(4)
tags = p.tags.list()
tags
Out[15]: [<ProjectTag name:v1.1>, <ProjectTag name:v1.0>]
In [28]: p = gl.projects.get(4)
In [29]: tags = p.tags.list()
In [30]: for tag in tags:
...: print(tag.name)
...: print(tag.message)
...:
v2.0
v2.0 release
v1.1
None
v1.0
None
1
2
3