【jenkins1】gitlab与jenkins集成

文章目录

  • 1.Jenkins-docker配置:运行在8080端口上,机器只要安装docker就能装载image并运行容器
  • 2.Jenkins与GitLab配置:docker ps查看正在运行,浏览器访问http://10....:8080/
    • 2.1 GitLab与Jenkins的Access Token配置:不涉及具体项目
    • 2.2 新建jenkins job和配置job:jenkins的Dashboard仪表盘界面点击New Item(要登陆),可新建job或者复制已有job,直接复制已有job,拷贝后的job不要运行build,避免回填错误数据到GitLab
    • 2.3 Jenkins pipeline script配置:groovy语言
    • 2.4 Jenkins&GitLab集成环境验证:GitLab推送修改至仓库新分支,验证push event可触发jenkins job,jenkins回填数据至GitLab


1.Jenkins-docker配置:运行在8080端口上,机器只要安装docker就能装载image并运行容器

Jenkins镜像和nginx一样,code push到git上,git通过hook触发构建/测试/部署就是CI(持续集成)CD(持续交付)工具即jenkins(需提供一台运行jenkins的机器)
官网https://www.jenkins.io/下载jenkins,可选择适合你自己系统的版本,也可选择不依赖于系统的docker(前提本机安装了docker)或war包(本机安装了java),如下开启服务端
在这里插入图片描述
执行如上命令出现密码,复制这串密码,浏览器打开http://localhost:8080(客户端),粘贴到管理员密码里。点击安装推荐插件,创建管理员用户y,密码123,到这里jenkins已经安装完成了(装在win上),主要用来配合git服务器。
在这里插入图片描述
在指定服务器上安装docker,使用docker命令进行下载jenkins-docker版本如下:

docker pull jenkins/jenkins:2.54  (docker images查看, 不指定版本就是最新的版本)

-name指定image名字。-p内部container和外部对应关系。-v外部地址和container内部地址对应关系,在container内部修改jenkins的话,外部也会更新。/etc/localtime时间同步。

docker run --privileged=true -d --name jenkins -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v /home/yt/jenkins_home:/var/jenkins_home/ -v /etc/localtime:/etc/localtime jenkins/jenkins:2.54 (或v4)

在这里插入图片描述

docker exec -u 0 -it jenkins bash   # 进入docker container内部,需安装cppcheck等命令
docker save –o jenkins_v4.tar jenkins/jenkins:v4  # 保存docker images为tar包命令
docker load -input jenkins_v4.tar  # 加载tar包为docker images命令

2.Jenkins与GitLab配置:docker ps查看正在运行,浏览器访问http://10…:8080/

2.1 GitLab与Jenkins的Access Token配置:不涉及具体项目

GitLab配置Access Token,用于jenkins连接GitLab获取GitLab API接口:点击右上角用户头像Edit profile,再点击左侧Access Tokens ,命名为gitlab_jenkins,Select scopes全部勾选上,点击创建产生如下字符串。
在这里插入图片描述
如下Manage Jenkins需要admin admin用户。如下Add是一个按钮。
在这里插入图片描述

2.2 新建jenkins job和配置job:jenkins的Dashboard仪表盘界面点击New Item(要登陆),可新建job或者复制已有job,直接复制已有job,拷贝后的job不要运行build,避免回填错误数据到GitLab

在这里插入图片描述
http://10.75.135.34:8084/job/example/,点击Advanced。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下gitlab查看成员,只有Maintainer才有Settings。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 Jenkins pipeline script配置:groovy语言

// 环境模块导入, 清空工作空间
import hudson.*
node(""){
    stage("clear workspace"){
        cleanWs()
    }
}

// 下载源码
node(""){
    stage("download code"){
        echo "download code"
        if (env.gitlabSourceBranch == null){   //当gitlab过来触发的job的话,环境变量上就会有gitlabSourceBranch字串
            git branch: "sw61", credentialsId: '18f53bc3-dc50-4178-acde-d628264ee453', url: 'https://gitlab-dbd...com/bsp_diag/prj_bsp.git'   // null说明不是gitlab触发
        }else{  //gitlab做了push或merge操作时触发,credentialsId就是Access Tokens
            git branch: env.gitlabSourceBranch, credentialsId: '18f53bc3-dc50-4178-acde-d628264ee453', url: env.gitlabSourceRepoHttpUrl
        }
    }
}

// 源码cppcheck扫描
try{
    node(""){
        stage("cppcheck"){
            echo "cppcheck starting"
            pwd()
            sh "/home/cppcheck-1.75/cppcheck 4 --enable=all --inconclusive  --xml --xml-version=2 "+env.WORKSPACE+" 2> cppcheck.xml"
            publishCppcheck ignoreBlankFiles: true, pattern: 'cppcheck.xml'
            def cppcheck_file_obj = new File(env.WORKSPACE+"/cppcheck.xml")
            if (cppcheck_file_obj.isFile()){
                echo "cppcheck.xml file exist"
                result = sh returnStdout: true ,script: "cat "+env.WORKSPACE+"/cppcheck.xml"
                if (result == ""){
                    echo "analyse cppcheck.xml failure,cppcheck.xml is empty"
                    currentBuild.result="FAILURE"
                }else{
                    echo "analyse cppcheck.xml"
                    cppcheck_result = sh returnStdout: true ,script: "cat "+env.WORKSPACE+"/cppcheck.xml | grep 'cppcheck version'"
                    if(cppcheck_result == ""){
                        echo "analyse cppcheck.xml failure,cppcheck.xml format error"
                        currentBuild.result="FAILURE"
                    }else{
                        final_result = sh returnStdout: true ,script: '''cat '''+env.WORKSPACE+'''/cppcheck.xml | grep severity=\\"error\\"'''
                        if(final_result == ""){
                            echo "analyse cppcheck.xml pass"
                        }else{
                            echo "analyse cppcheck.xml failure,cppcheck.xml has error"
                            currentBuild.result="FAILURE"
                        }
                    }
                    
                }
            }else{
                echo "cppcheck.xml file not exist"
                currentBuild.result="FAILURE"
            }
        }
    }
}catch(e) {
    echo "cppcheck failure"
    currentBuild.result="FAILURE"
}

// 源码编译
try{
    node(""){
        stage("compile code"){
            echo "compile code"
            sh "make"   //在docker里编译
        }
    }
}catch(e) {
    echo "compile code failure"
    currentBuild.result="FAILURE"
}

// 验证扫描与编译结果,成功后归档相关文件
node(""){
    stage("archive"){
        echo "archive"
        if(currentBuild.result == 'FAILURE') {
            echo "Something unexpected happened. Please inspect Jenkins logs. Skip archive."
        }else{
            sh '''
            mkdir build
            cp cppcheck.xml build/
            cp *.ko build/
            tar -zcf archive.tar.gz build/
            '''
            archiveArtifacts artifacts: '*.tar.gz', followSymlinks: false
        }
    }
}

// 根据扫描和编译结果,回填数据到GitLab
stage("commit gitlab"){
    echo "commit gitlab"
    if(currentBuild.result == 'FAILURE') {
        updateGitlabCommitStatus(name: 'sw61_bsp_build', state: 'failed')
    }else{
        updateGitlabCommitStatus(name: 'sw61_bsp_build', state: 'success')
    }
}

2.4 Jenkins&GitLab集成环境验证:GitLab推送修改至仓库新分支,验证push event可触发jenkins job,jenkins回填数据至GitLab

在这里插入图片描述
gitlab触发docker_jekins(部署在34服务器上),34 ssh到33编译服务器进行编译回传img到34,34将img传到测试的机器上(测试机器上有测试用例代码文件),34拷完img后触发40测试平台服务器(40是大docker前后端,小docker测试环境 【 ssh/串口/PDU到测试机器上 ,python3 测试用例 】 ,34传来的是选择哪一个小docker ),40将执行pass显示结果传给34,34传给gitlab。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/736250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快排(前后指针实现)

前言 快排解决办法有很多种,这里我再拿出来一种前后指针版本 虽然这个版本的时间复杂度和霍尔一样,逻辑也差不多,但是实际排序过程,确实会比霍尔慢一点 快排gif 快排前后指针实现逻辑: 前后指针实现逻辑(升序):单趟排序…

西瓜视频基于 Hertz 的微服务落地实践

# 1. 西瓜视频微服务架构设计 ## 1.1 西瓜视频介绍 **西瓜视频**是一个开眼界、涨知识的视频 App(Informative Video Platform),作为国内领先的**中长视频**平台,它源源不断地为不同人群提供优质内容,让人们看到更丰…

从零开始搭建一个酷炫的个人博客

效果图 一、搭建网站 git和hexo准备 注册GitHub本地安装Git绑定GitHub并提交文件安装npm和hexo,并绑定github上的仓库注意:上述教程都是Windows系统,Mac系统会更简单! 域名准备 购买域名,买的是腾讯云域名&#xf…

【web1】标签,css,js

文章目录 1.标签:input1.1 html:HTML(用于创建网页结构),CSS(对页面进行美化),JavaScript(用于与用户交互)1.2 文本标签:字体属性1.3 a标签&#…

win32API(CONSOLE 相关接口详解)

前言: Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程式达到开启视窗、描绘图形…

解析JSON字符串

QJsonDocument类用于解析JSON字符串,

android studio 模拟器文件查找

android studio 模拟器文件查找 使用安卓模拟器下载文件后通常无法在系统硬盘上找到下载的文件,安卓 studio studio 其实提供了文件浏览工具,找到后可以直接使用 Android studio 打开 打开 Android studioview 菜单view > Tool Windows > Device…

智慧校园的作用是什么?

在近几年,智慧校园以其独有的姿态,悄然改变着教育的面貌。想象一下,当物联网、大数据、人工智能这些前沿技术与传统校园深度融合,教育空间不再局限于实体教室,知识获取也不再受制于时间与地点,一个更加开放…

物联网系统运维——数据库部署,Linux环境下MySQL安装,使用phpMyAdmin管理MySQL,实验CentOS 7安装MySQL

一.MySQL 1.概要 MySQL是一种关联数据库管理系统,关联数据:而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性库将数据保存在不同的表中。性能高、成本低、可靠性好,已经成为最流行的开源数据库。 二.MySQL安装与配置 1. …

P1223 排队接水

题目描述 有 𝑛 个人在一个水龙头前排队接水,假如每个人接水的时间为 𝑇𝑖,请编程找出这 𝑛 个人排队的一种顺序,使得 𝑛个人的平均等待时间最小。 输入格式 第一行为一个整数 &a…

python 字符串驻留机制

偶然发现一个python字符串的现象: >>> a 123_abc >>> b 123_abc >>> a is b True >>> c abc#123 >>> d abc#123 >>> c is d False 这是为什么呢,原来它们的id不一样。 >>> id(a)…

OOM日志分析

目录 1. 日志分析2. MAT 工具2.1 日志打印方式2.1.1 HeapDumpOnOutOfMemoryError(推荐)2.1.2 jmp 命令 2.2 MAT分析方式2.2.1 饼图分析2.2.2 树形图分析2.2.2 泄漏疑点 3. 优化 首先说一下结论:通过MAT工具分析才是最精准的,直接通…

Java程序之简单“记事本”

要求:如下图所示,记事本具有新建、打开文本、保存、关闭等功能。 算法思路: 这是一个使用Java Swing库创建的简单文本编辑器。它包含一个菜单栏,其中包含“文件”菜单以及四个子菜单项:“新建”、“打开”、“保存”和…

【Web APIs】DOM 文档对象模型 ⑤ ( 获取特殊元素 | 获取 html 元素 | 获取 body 元素 )

文章目录 一、获取特殊元素1、获取 html 元素2、获取 body 元素3、完整代码示例 本博客相关参考文档 : WebAPIs 参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/APIgetElementById 函数参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/API/Document/getE…

torchinfo这个包中的summary真的很好用

1.安装直接使用 pip 进行安装即可: pip install torchinfo 2.导入该模块 from torchinfo import summary 3.使用模块 summary(model)#这里的model是你自己的model,可以添加参数进去 4.效果图: 第一个图片是直接打印model吗,…

华为某员工爆料:三年前985本科起薪30万,现在硕士起薪还是30w,感慨互联网行情变化

“曾经的30万年薪,是985本科学历的‘标配’,如今硕士也只值这个价?” 一位华为员工的爆料,揭开了互联网行业薪资变化的冰山一角,也引发了不少人的焦虑:互联网人才“通货膨胀”的时代,真的结束了…

【docker1】指令,docker-compose,Dockerfile

文章目录 1.pull/image,run/ps(进程),exec/commit2.save/load:docker save 镜像id,不是容器id3.docker-compose:多容器:宿主机(eth0网卡)安装docker会生成一…

【Git】win本地 git bash:Connect reset by 20.205.243.166 port22报错问题解决

win10 git bash 控制台 reset 22端口拒绝连接问题: Connection reset by 20.205.243.166 port 221、22端口 无法连接 ssh -T gitgithub.com2、尝试用443端口 仍然无法连接 ssh -T -P 443 gitgithub.com3、重写 git clone 地址 url,全局添加 https 前缀…

国产大模型技术创新分析

国产模型百舸争流,技术创新百花齐放 2023年下半年起,国内大模型领域迎来“百模大战”,各大厂商纷纷加速生成式AI的研发与突破,模型持续迭代升级,展现了人工智能技术的蓬勃发展与无限潜力。 中国大模型市场迅猛发展&am…