赞
踩
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命令
GitLab配置Access Token,用于jenkins连接GitLab获取GitLab API接口:点击右上角用户头像Edit profile,再点击左侧Access Tokens ,命名为gitlab_jenkins,Select scopes全部勾选上,点击创建产生如下字符串。
如下Manage Jenkins需要admin admin用户。如下Add是一个按钮。
http://10.75.135.34:8084/job/example/,点击Advanced。
如下gitlab查看成员,只有Maintainer才有Settings。
// 环境模块导入, 清空工作空间 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') } }
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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。