gitlab+walle实现自动发布

背景

之前为部门搭建了walle,作为发布系统,管理发布流程,提高了发布效率;
但开发和测试过程中,发布频繁的情况下,需要经常去建立发布单,点击发布等,还是有点麻烦,索性研究了下walle,结合gitlab的cicd实现测服的自动发布

原理

  1. 模拟walle发布流程
  2. walle二开
    对walle进行二次开发,添加需要的api接口,通过python 的requets 模块实现walle登录到发布的流程

gitlab-runner

安装步骤

 gitlab-runner register

根据提示,填入对应的信息

项目中配置.gitlab-ci.yml

.gitlab-ci.yml 关键字解释

关键字 是否必须 描述
image 用于docker镜像,查看docker文档
services 用于docker服务,查看docker文档
stages 定义构建阶段
before_script 定义在每个job之前运行的命令
after_script 定义在每个job之后运行的命令
variable 定义构建变量
cache 定义一组文件列表,可在后续运行中使用
tags 选择要使用runner

配置

tags:为注册runner时填写的tags

stages: 
  - deploy 
  - test

deploy:
  stage: deploy
  tags: 
    - node-01-fat
  script: 
    - python3 /home/gitlab-runner/walle-cd/main.py -e ownner@ownner.co -p Abc123456 -s 9 -i 20
  only:
    - release

test:
  stage: test 
  tags: 
    - node-01-fat
  script:
    - echo test
  only:
    - release
  when: on_success 

walle 源码二开

用python 的socketio-client作为客户端调试walle的socket接口,但始终没有通过鉴权,所以自己将socket部分的通信用http 接口实现了一遍,大部分还是重用walle本身的函数,加一个开关控制是否启用socket,在路由层暴露出来,就可以通过http调用 访问了,改的地方比较多,这里就不贴了,有需要的看源码,或者私信联系吧

walle-cd 源码

main.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from walle_flow import WalleDevopsFlow
import sys, getopt

def main(argv):
    try:
        
        host = "http://admin.walle-web.io"
        branch = 'release'
        opts, args = getopt.getopt(argv,"e:p:s:i:",["email=","passwd=","sId=","pId="])
        email = ""
        passwd = ""
        spaceId = 1
        projectId = 1
        for opt,arg in opts:
            if opt in ["-e","--email"]:
                email = arg
            if opt in ["-p","--passwd"]:
                passwd = arg
            if opt in ["-s","--sId"]:
                spaceId = arg
            if opt in ["-i","--pId"]:
                projectId = arg

        print('start devops flow args:')
        print(args)
        print(opts)
        #创建自动发布流对象
        walle = WalleDevopsFlow(host=host,branch=branch,email=email,spaceId=spaceId,passwd=passwd,projectId=projectId)
        #模拟发布流程
        project = None
        branches = None
        commits = None
        if walle.login() and walle.switch_space():
            #获取项目信息
           project =  walle.get_project_by_id()
           if project:
            #获取分支
          
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值