zoukankan      html  css  js  c++  java
  • 四.运维平台之项目管理系统

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

  • 相关阅读:
    ImageMagick出错/undefined in findresource
    只对目录更改权限的办法(xarg)
    关于linux下php环境
    php 上传大文件
    做下载系统时的一些HTML文件头
    POJ 1694 An Old Stone Game ★(排序+树+递归)
    POJ 1991 Turning in Homework ★(区间DP)
    POJ 2452 Sticks Problem ★ (单调栈+RMQ)
    HDU 2069 Coin Change (母函数)
    HDU 2069 Coin Change (母函数)
  • 原文地址:https://www.cnblogs.com/dbslinux/p/13365713.html
Copyright © 2011-2022 走看看