四.运维平台之项目管理系统

一.运维平台打通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=" 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

原文地址:https://www.cnblogs.com/dbslinux/p/13365713.html