dbslinux

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

分类:

技术点:

相关文章: