Jenkins和gitlab实现CICD

这篇具有很好参考价值的文章主要介绍了Jenkins和gitlab实现CICD。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 背景

在开发TracerBackend服务的时候,每次更改代码之后需要推送到gitlab,然后ssh登录到Ubuntu的服务器上部署新的代码。服务成功启动之后,在本地执行测试用例,觉得这一套操作流程还是挺复杂的。想起公司的代码发布流程,只要个人分支的代码测试通过之后,合并到master分支的时候会自动构建和发布还是挺方便的,想着是不是能借鉴下,自己弄一个只要代码提交到gitlab的时候Jenkins自动构建自动发布自动生成测试报告呢。

2 执行过程流程图

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkin是部署在docker中的,毕竟docker部署软件比较方便。但是有个问题docker是在宿主机中的,Jenkins是安装docker容器中的,咱们的TracerBackend服务也是用容器部署的,那安装在Jenkins的容器怎么调用到宿主机的docker呢。

其实有好几种方式可以实现

  1. Jenkins安装插件ssh,通过ssh执行执行宿主机命令
  2. 安装Jenkins的将宿主机的docker守护进程和文件夹共享jekins容器中,就可以通过jenkins操作宿主机的docker了
  3. 宿主机启动一个服务专门接收命令,执行命令。

我选择了第三种,写了一个RunShellServicer的服务,该服务在宿主机上运行,专门接收命令然后再宿主机上原封不动的执行命令

因为这个服务比较通用不依赖Jenkins,构建工具换成其他的也能使用,或者觉得Jenkins不好用,自己写一个简单服务监控gitlab,giblab有推送的时间,发送请求到监控服务商也能使用RunShellServicer服务在宿主机执行命令。

3 安装Jenkins

3.1 安装jenkins容器

没有安装docker可以看我以前的博客安装docker

ubuntu 中安装docker-CSDN博客

docker pull jenkins/jenkins:lts
docker run  -u root -d --name=jenkins -p 8011:8080 -v/home/wuzhibin/docker/jenkins:/var/jenkins_home jenkins/jenkins:lts
# 检查容器是否启动成功
docker ps |grep jenkins
# 如果未成功目录添加权限继续执行上一个步骤
chmod 777 -R /home/wuzhibin/docker

3.2 登录jenkins

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

jenkins选择不按照插件,因为docker中安装docket不是最新的版本,好多插件都是按照失败,需要将docker中的Jenkins更新到最新的版本在按照插件

3.3 更新Jenkins的版本

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维
Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

更新Jenkins等待更新完成之后重启Jenkins,可以看到jenkin已经更新到了最新的版本2.440.3

3.4 更新jekins的插件镜像安装插件

Index of /jenkins/updates/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

使用清华的镜像源,找到最新的版本的源更新到Jenkins插件中更新站点中。

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

更新完成之后重启jenkins

4 配置gitlab和Jenkins

4.1 jenkins中配置webhook

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

在Jenkins中配置gitlab webhook, 复制webhook的url和Secret token的值

4.2 gitlab中配置webhook

没有gitlab想使用gitlab管理项目代码可以看这篇博客安装

Docket常见的软件部署1-CSDN博客

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

在项目设置中添加webhook填Jenkins生成的url和Secret token, gitlab网络配置中允许网络外发

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

点击测试看Jenkins中是否能触发自动构建,能自动构建表示配置成功

5 RunShellServicer服务

import os
import uvicorn
from pydantic import BaseModel
from typing import Union
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.openapi.docs import get_swagger_ui_html
from logger import Logger
import subprocess

logger = Logger.get_logger()

desc = """
执行命令服务
在宿主机上执行传入的命令

"""

app = FastAPI(
    title="执行命令服务",
    docs_url=None)
app.mount("/static", StaticFiles(directory="static"), name="static")


@app.get("/docs", include_in_schema=False)
def custom_swagger_ui_html():
    return get_swagger_ui_html(
        openapi_url=app.openapi_url,
        title=app.title + " - Swagger UI",
        oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
        swagger_js_url="/static/swagger-ui-bundle.js",
        swagger_css_url="/static/swagger-ui.css",
    )

app.add_middleware(
    CORSMiddleware,
    allow_origins="*",
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


class Body(BaseModel):
    cmd: str  # 命令
    params: Union[str, None] = None  # 参数


@app.post("/")
def run_shell(body: Body):
    try:
        cmd = body.cmd
        params = body.params
        logger.info(f"run {cmd} {params}")
        if os.name == "nt":
            encoding = "gbk"
        else:
            encoding = "utf-8"
        res = subprocess.run(f"{cmd} {params}", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, encoding=encoding)
        if res.returncode == 0:
            logger.info(f"{cmd} {params} success")
            message = res.stdout
            logger.info(f"result:{message}")
        else:
            logger.error(f"{cmd} {params} failed")
            message = res.stderr
            logger.error(f"result:{message}")
    except Exception as e:
        logger.exception("执行异常")
        message = str(e)
    return message


if __name__ == '__main__':
    uvicorn.run("main:app", host="0.0.0.0", port=8010, workers=1)

RunShellSeviser是部署在宿主机上的接收容器中Jenkins命令的服务,它会在宿主机上执行

6 验证

1 提交TracerBackend代码

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

2 Jenkins会自动构建

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

3 容器也会被更新

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维

4 TracerBackend项目也被部署起来了

Jenkins和gitlab实现CICD,工具使用教程,jenkins,gitlab,运维文章来源地址https://www.toymoban.com/news/detail-855725.html

到了这里,关于Jenkins和gitlab实现CICD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DevOps极速入门丨Gitlab丨Jenkins丨harbor丨CICD丨自动化丨运维开发

    一、DevOps介绍 软件开发最开始是由两个团队组成: 开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。 运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。 这看似两个目标不同的团队需要协同完成一个软件的开发。 在开发

    2023年04月18日
    浏览(68)
  • k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD

    测试环境使用的jenkins 正式环境使用的gitlab-ci 创建yaml文件 启动服务 配置jenkins 配置nginx jenkins机器上的dockerfile yaml其它都一样除了svc,因为svc需要绑定slb地址 启动 配置dockerfile 配置nginx 结果图 原文

    2024年02月08日
    浏览(55)
  • Kubernetes(k8s)实战:使用k8s+jenkins实现CICD

    CIDI(Continuous Integration,Continuous Delivery Deployment),持续集成,持续部署,持续发布。 也就是说,在本地开发完代码之后,push到远程仓库,然后代码打包、部署的这个过程完全是自动化完成的。 但是我们不要进入一个误区,CICD并不意味着一定就是这一套流程,只要实现了代

    2024年02月12日
    浏览(49)
  • Gitlab中的CICD的使用方法

    一、CI/CD执行机制 二、离线安装gitlab-runner 下载相应版本的gitlab-runner  (下载地址:https://packages.gitlab.com/runner/gitlab-runner) dpkg -i gitlab-runner_12.8.0_amd64.deb gitlab-runner register 第3步中需要的信息可从下图所示位置获取 三、示例 内容如下: before_script:   - date stages:   - test   -

    2024年01月17日
    浏览(40)
  • 【云原生】DevOps之使用Gitlab Runner进行CICD

    在很久之前的文章中,我们已经搭建过了Jenkins+Docker+Harbor+SpringCloud微服务持续集成自动化部署,今天来介绍Gitlab原生的Gitlab Runner CICD功能。 Gitlab实现CICD的方式有很多,比如通过Jenkins,通过Gitlab Runner等,今天主要介绍后者。Gitlab在安装的时候,就默认包含了Gitlab CI的能力,但

    2024年02月03日
    浏览(48)
  • 【运维知识高级篇】超详细的Jenkins教程1(安装部署+配置插件+创建自由风格项目+配合gitlab实现Jenkins自动触发)

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成的工具,用于监控持续重复的工作, 旨在提供一个开放易用的平台,使软件的持续集成变成可能,是持续集成的核心,可以与其他软件进行协作,例如,gitlab推送给测试环境代码,可以通过Jenkins省略步骤,实现自动

    2024年02月05日
    浏览(52)
  • 持续集成交付CICD:Jenkins流水线实现Nexus制品晋级策略

    目录 一、理论 1.开发测试运维环境 二、实验 1.Nexus制品晋级策略 (1)开发测试运维环境 (1)环境 表1 主机 主机 架构 版本 IP 备注 jenkins jenkins主节点       2.414.2 192.168.204.15:8080  gitlab runner (从节点) gitlab gitlab 主节点        12.10.14 192.168.204.8:82   jenkins slave (从节

    2024年02月04日
    浏览(48)
  • 使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

    使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业 开发人员提交代码到 Gitlab 代码仓库 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建 Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建 先进行代码静态分析,单元测试

    2024年04月27日
    浏览(44)
  • git视频教程Jenkins持续集成视频教程Git Gitlab Sonar教程

    @[TOC这里写自定义目录标题) https://edu.51cto.com/lesson/290903.html 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标

    2024年02月11日
    浏览(41)
  • devops完整搭建教程(gitlab、jenkins、harbor、docker)

    DevOps(Development Operations)是一种软件开发方法论和工作流程,旨在促进软件开发团队和运维团队之间的协作与沟通,以实现更高效的软件交付和运营。 持续集成(Continuous Integration,CI):开发团队将代码频繁地集成到共享存储库中,确保代码的一致性和稳定性。 持续交付(

    2024年02月19日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包