CI/CD自动构建发布环境搭建使用实践

通过C/C++的cmake工程示例项目,构建Gitlab+Jenkins+Artifactory自动构建发布环境。其中

  • Gitlab提供源码仓库功能,通过webhook自动触发器(trigger)触发Jenkins构建动作
  • Jenkins提供构建发布中心角色,通过从Gitlab拉取源码(Git)、构建(Build)、测试(Test)、发布(Publish)、部署(Deploy), 完成整个CI/CD流程
  • Artifactory提供二进制生成物(tar,zip,deb,exe等)仓库功能,以及每次编译构建详情辅助信息

测试环境

  • Host机器: WSL2(Ubuntu 20.04.2 LTS )
  • 采用docker容器运行服务
    • Gitlab镜像:gitlab/gitlab-ce:latest、
    • Jenkins镜像: jenkins/jenkins:latest
    • Artifactory镜像: docker.binary.io/jfrog/artifactory-oss:latest

安装配置过程中碰到的坑

  • Jenkins内置openjdk11版本,对Gitlab插件太高,需要降到jdk8版本
  • Artifactory TCP端口8081和8082,其中8081是API端口,8082才是Web前端端口,需要将两者都映射出来
  • 新版Jenkins内的Artifactory插件和旧版本配置有较大不同,在Publish时采用直接指定Artifactory服务器地址临时方案
  • Gtilab配置Webhook时,首先需要管理员对网络配置打开webhook网络使能。
  • 如果容器启动过程中异常,用docker logs <容器ID>查看调试日志,基本能找到问题。
  • HOST端volumes映射到容器内,需要保证路径有读写权限

docker-compose.yaml文件

version: "3.2"services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlab-containerrestart: alwaysenvironment:- GITLAB_SECRETS_DB_KEY_BASE=******- GITLAB_HOST=172.26.180.63- GITLAB_PORT=10081- GITLAB_SSH_PORT=10023ports:- "10081:80"- "10023:22"volumes:- '/data/gitlab/config:/etc/gitlab'- '/data/gitlab/logs:/var/log/gitlab'- '/data/gitlab/data:/var/opt/gitlab'jenkins:image: jenkins/jenkins:latestcontainer_name: jenkins-containerrestart: alwaysports:- "8081:8080"- '50000:50000'volumes:- '/var/run/docker.sock:/var/run/docker.sock'- '/data/jenkins/jenkins_home:/var/jenkins_home'environment:- "JENKINS_OPTS=--prefix=/jenkins"- "JAVA_HOME=/var/jenkins_home/opt/jdk1.8.0_202"- "PATH=/var/jenkins_home/opt/jdk1.8.0_202/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"artifactory:image: docker.bintray.io/jfrog/artifactory-oss:latestcontainer_name: artifactory-containerrestart: alwaysports:- "9081:8081"- "9082:8082"volumes:- '/var/opt/jfrog/artifactory:/var/opt/jfrog/artifactory'

在Jenkins容器中设置环境变量JAVA_HOME和PATH,用jdk8替换openjdk11; Artifactory容器把8081和8082端口都映射出来。Jenkins容器启动后除了安装默认插件外,还需要安装: Gitlab、Cmake、Aritfactory等插件,同时把WSL2作为Jenkins的node节点(slave节点)加到构建节点集合内,通过ssh(用户名/密码)方式登录,并设定其标签(cmake ubuntu), 在WSL2子系统内安装cmake,openjdk, gcc,cppcheck等编译工具套件。


工程

Gitlab工程基于jenkinsexample, 涉及Qt部分被剔除。该工程内含Jenkins构建脚本文件Jenkinsfile,通过改动该文件做实验操作。在Jenkins仪表盘界面可以构建流水线(pipeline)和多分枝流水线(multibranch pipeline)项目,在Gitlab端配置集成Jenkins,可将工程和Jenkins项目进行链接,实现自动触发.

Jenkinsfile文件内容

pipeline {agent {label 'cmake'}options {buildDiscarder(logRotator(numToKeepStr: '10'))}parameters {booleanParam name: 'RUN_TESTS', defaultValue: true, description: 'Run Tests?'booleanParam name: 'RUN_ANALYSIS', defaultValue: true, description: 'Run Static Code Analysis?'booleanParam name: 'DEPLOY', defaultValue: true, description: 'Deploy Artifacts?'booleanParam name: 'PUBLISH', defaultValue: true, description: 'Publish Artifacts?'}stages {stage('Build') {steps {cmake arguments: '-DCMAKE_CXX_FLAGS=-g', installation: 'InSearchPath'cmakeBuild buildType: 'Release', cleanBuild: true, installation: 'InSearchPath', steps: [[withCmake: true]]}}stage('Test') {when {environment name: 'RUN_TESTS', value: 'true'}steps {ctest 'InSearchPath'}}stage('Analyse') {when {environment name: 'RUN_ANALYSIS', value: 'true'}steps {sh label: '', returnStatus: true, script: 'cppcheck . --xml --language=c++ --suppressions-list=suppressions.txt 2> cppcheck-result.xml'publishCppcheck allowNoReport: true, ignoreBlankFiles: true, pattern: '**/cppcheck-result.xml'}}stage('Deploy') {when {environment name: 'DEPLOY', value: 'true'}steps {sh label: '', returnStatus: true, script: '''cp jenkinsexample ~cp test/testPro ~'''}}stage('Publish'){when {environment name: 'PUBLISH', value: 'true'}steps {script{def server = Artifactory.newServer url: 'http://172.26.180.63:9081/artifactory', username:'admin' , password:'******'def uploadSpec="""{"files":[{"pattern":"jenkinsexample","target":"example-project/${BUILD_NUMBER}/","props":"XXX=xxx;YYY=yyy"}]}"""buildInfo = server.upload spec: uploadSpecbuildInfo.env.collect()server.publishBuildInfo buildInfo}//script}}}
}

Jenkins的新Pipeline语法和旧版本有一些差异,实践中会碰到一些使用错误,可以查看Jenkins项目的console输出定位出错位置,进行调试; 新版本Artifactory插件和旧版本配置有出入(暂时搞不懂如何使用),这里直接定义了Artifactory服务器!

Gitlab+Jenkins+Artifactory, CI/CD自动构建发布环境搭建使用实践相关推荐

  1. 轻量级CI/CD自动构建平台Gitea+Drone保姆级实践教程

    目录 1.关于Gitea 1.1 gitea特性 1.2 快速安装 1.2.1 环境依赖 1.2.2 安装gitea 1.2.3 启动 1.2.4 访问 1.2.5 创建一个测试仓库 2 关于Dron ...

  2. Jenkins+Jmeter+Gitlab+Ant接口自动化持续集成构建(环境搭建配置)

    第一步:环境搭建: 准备工作: Java及jdk配置.jmeter安装配置.Jenkins搭建完成.安装Ant 一.JDK配置 JDK配置请百度自行配置 二.Jmeter安装配置 1.把 apache ...

  3. 专题篇四:Linux企业级CICD持续集成交付发布(终极实战部署:gitlab++jenkins+web(tomcat)+webbook自动发布)

    4,企业级CI/CD 持续集成/交付/发布 实验一:github+jenkins+web(tomcat) 构建的时候 网络连接超时(正常现象) githud仓库地址1.安装对应的插件(jenkins) ...

  4. 自己动手设计一款iOS自动构建发布工具

    2019独角兽企业重金招聘Python工程师标准>>> 自己动手设计一款iOS自动构建发布工具 一.引言 在iOS开发中,你可能经常会遇到这样的场景: 自己负责的功能模块开发完成后, ...

  5. 企业级 CI/CD 工具部署 Serverless 应用的落地实践

    作者 | 李鑫(缤智) 阿里云高级技术专家 来源 | Serverless 公众号,整理自<Serverless 技术公开课> 背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台 ...

  6. Lightly 自动构建开发环境

    对一般的编辑器或集成开发环境而言,由于系统不同以及依赖出现差异,许多人往往面临开发好的项目在部署或协作时,面临功能失常的情况. 通常,构建开发环境耗时长达数小时.以团队协作为例,项目组加入新成员时,往 ...

  7. GitLab CI/CD 自动化构建与发布实践

    流程介绍 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.这篇文章中,我将会介绍基于 GitLab CI/CD 的自动化 ...

  8. GitLab 运行GitLab-Runner CI/CD发布

    本文主要演示使用A发布项目到 B上,和注册GitLab Runner,添加docker类型的Executor来执行构建,并以此为基础完成一个go源码示例项目从编译代码构建.docker镜像打包到应用部 ...

  9. GitOps—通过CI/CD自动化构建虚拟机模版

    <CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)> <什么是DevOps?人员,流程和产品的结合,过程.方法与系统的统称&g ...

最新文章

  1. 电脑pin码忘了登录不进系统_想要大屏打王者,家里电视用不了?投屏到电脑试试...
  2. POJ2942-Knights of the Round Table【tarjan】
  3. python批量打印机excel,python自动化办公系列03_单个以及批量处理excel文件
  4. C++ cin, cin.get, cin.getline. (iostream, std)
  5. axure如何导出原件_彻底抛弃WORD!教你用Axure快速输出高质量的PRD
  6. 柯马机器人示教器编程_COMAU柯马机器人示教器无显示维修过程
  7. DRP系统知识点总结
  8. java web 甘特图_基于Web开发的甘特图控件,支持Java、.Net
  9. 小盒即时通讯IM-全套开源-开箱即用
  10. 美版t430笔记本win8系统下装Ubuntu的一些尝试和遇到的问题
  11. pyqtgraph的plotItem的轴刻度设置/轴刻度值风格设置
  12. python (语音)信号拆分为数据块,计算短期能量和过零率
  13. JS操作符转化字符串为数字
  14. 游戏开发与设计中的“3C”是指什么?
  15. 上海科技大学和南方科技大学计算机,上海科技大学和南方科技大学哪个好?哪个更容易考?...
  16. c语言,计算a+aa+aaa+......,使用函数定义的方法
  17. 独家 | 火灾之后,我们能够利用大数据做些什么?
  18. 任意进制数之间的转换
  19. 5000字干货,10分钟进阶超级用户运营
  20. FLAT:Flat-LAttice Transformer

热门文章

  1. viewport概念
  2. mac selenium 连接已经打开的chrome浏览器
  3. No subject alternative names present solved
  4. 可视化软件之Power BI的安装与下载
  5. Laravel 好玩、好用扩展推荐(持续更新)
  6. 【SQL】同义词 SYNONYM
  7. 技术干货—敏捷测试流程
  8. 《甜蜜蜜》光影交织的甜蜜美梦
  9. git repo使用
  10. 图灵奖得主Judea Pearl:最近值得一读的19篇因果推断论文