一分钟开始持续集成之旅系列之:C 语言 + Makefile

2024年C C++最全使用Jenkins搭建持续集成环境的方法(三)_jenkins+gtest(2),2024年最新大厂C C++研发岗面试复盘 在完成前面的系统配置后,还需要针对特定的项目进行邮件设置。选择具体的项目,点击“配置”,进行项目配置页面,点击“增加构建后操作步骤”,选择“E-mail Notification”,如下图所示:在上图中,在“Recipients”中填写收件人邮箱地址,即可实现发送项目构建邮件的功能了。如果想在每次不稳定(unstable)的构建后,都发送邮件通知,则勾选“每次不稳定的构建都发送邮件通知”。 阅读详情

作者:CODING - 朱增辉

前言

make 工具非常强大,配合 makefile 文件可以实现软件的自动化构建,但是执行 make 命令依然需要经历手动输入执行、等待编译完成、将目标文件转移到合适位置等过程,我们真正关心的是最终的输出,却在这些中间过程上浪费了很多时间。利用 CODING 持续集成功能可以实现自动触发构建,构建全程自动化,无须分心看护,节省时间。

本文通过一个 C 语言 + Makefile Demo 项目讲解如何使用 CODING 持续集成功能创建构建计划,自动触发构建,以及如何将生成的目标文件发布到 CODING generic 制品库。

准备工作

环境

本文涉及到以下工具,请确认已存在,或者根据链接的文档进行安装。

另外,您还需准备一个 CODING 项目。

代码

我已经准备了一份简单的示例代码,使用 make 工具构建 Hello-world 程序。

// hello.c
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

您可以通过下面的命令克隆到本地。

git clone https://e.coding.net/coding-public/demo-c-make.git

仓库中还包含了一个 makefile 文件,定义了简单的规则来完成软件构建。

all: hello

hello: hello.o
	gcc -o hello hello.o

hello.o: hello.c
	gcc -c hello.c

clean:
	rm -rf hello.o hello

您可以在本地执行 make 命令以验证构建正常。

make-all

下面我们正式开始通过一个 Demo 演示 CODING 平台持续集成功能的使用。

步骤一 创建制品库

为了方便随时使用构建出来的目标文件,我们将构建物存储到 CODING 平台制品库,因此需要先创建合适的制品仓库,这里创建 generic 仓库比较合适。

从左侧导航栏打开制品库。

artifact-index

单击新建仓库,选择 generic 类型,按照提示指定仓库名称,这里仓库名取为 generic。

artifact-create-generic

步骤二 创建并配置构建计划

从左侧导航栏打开持续集成 --> 构建计划页面,点击新建构建计划配置创建并配置新的构建计划。在弹出的页面中,输入构建计划名称,选择代码仓库,配置来源指的的该构建计划的构建脚本存放位置,对于简单的、变动不频繁的脚本可以使用静态配置的选项,否则更推荐使用代码仓库中的脚本,这样更加灵活,方便管理

ci-create-job

点击使用模板,可根据自己需要选择合适模板,这里选择 简易模板。

ci-module

保存构建计划后,系统会自动将构建模板对应的 Jenkinsfile 推送到仓库,默认为 master 分支。

步骤三 编写构建脚本

构建脚本定义构建过程的具体步骤,是构建计划的核心部分。CODING 平台提供了图形化编辑器方便您快速编写构建脚本。

CODING 持续集成底层基于开源 CI/CD 软件领导者 Jenkins 实现,完全兼容 Jenkins pipeline 构建脚本语法,根据 Jenkins 官方提供的脚本编写指南,可以实现更复杂的构建任务,CODING 也提供了文本编辑器方便您在线编辑。

ci-jenkinsfile-graph

代码仓库中已包含一个简单的构建脚本(Jenkisnfile),您可以按照自己的想法参考编写。

// Jenkinsfile
pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: env.GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: env.GIT_REPO_URL,
            credentialsId: env.CREDENTIALS_ID
          ]]])
        }
      }
      stage('构建') {
        steps {
          echo '构建中...'
          sh 'make'
          echo '构建完成.'
        }
      }
      stage('发布') {
        steps {
          echo '发布中...'
          codingArtifactsGeneric(
            files: 'hello',
            repoName: "${env.GENERIC_REPO_NAME}",
            version: "${env.GIT_COMMIT}",
          )
          echo '发布完成'
        }
      }
    }
  }
}

构建脚本中的大部分内容都比较容易理解,稍显陌生的是 codingArtifactsGeneric 步骤,这是 CODING 官方提供的插件,方便上传到 CODING generic 制品库。该插件通过环境变量 GENERIC_REPO_NAME 获取仓库名,因此需要配置构建计划设置该变量值。

ci-job-param

步骤四 配置触发构建规则

CODING 持续功能支持多种触发方式包括代码源触发、定时触发、API 触发及手动触发,这几种触发方式可以同时配置互不冲突,其中代码源触发又可配置为推送到指定分支或标签触发,触发方式多样,可满足绝大部分场景需要。

如前言中所说,我们希望把更多的精力放在源代码上,尽量减少构建所带来的干扰,因此这里必不可少的是配置通过代码源触发,通过配置如下正则表达式,可以在推送代码到匹配的分支名时自动触发构建。

^refs/(heads/(release|release-.*|build-.*|feat-.*|fix-.*|test-.*|mr/.*))

ci-job-trigger

步骤五 执行构建

执行构建最简单的方式是手动触发构建,选中想要构建的构建计划,单击立即构建会弹出配置窗口,在这里可以配置此次构建使用的参数,单击确定即可开始构建。

ci-job-triggerred

按照步骤四的配置,我们的构建计划也支持推送的匹配分支触发构建,您可以执行如下命令创建新分支并推送到远端仓库,即可触发构建。

git checkout -b build-ci-test
git push origin HEAD

ci-branch-trigger

触发后,构建会自动执行,您可以继续做其他事情。

步骤六 下载目标文件

步骤三中定义的构建脚本会将构建出的目标文件发布到 CODING 制品库,如果我们想要在本地使用也是很方便下载的。在制品仓库中单击文件名即可看到指引页,里面给出了对文件不同操作的命令。

artifact-generic-guide

总结

本文通过一个 C 语言 + makefile 的 Demo 项目讲解了 CODING 持续集成、制品库的简单使用。借由 CODING 平台的这些功能,我们像是雇了一个永不会累的助手,承担了耗时的构建工作,从而节省了时间,提高了效率。

嵌入式开发工具链全解析:从编译器到调试器的实战指南 在嵌入式开发中,工具链的选型直接决定项目的成败,这与通用软件开发有着本质差异。交叉编译、链接脚本、调试接口、固件烧录等环节,每一步都紧密关联硬件资源约束。理解GCC、Arm Compiler等编译器的核心参数,掌握Makefile与CMake构建系统的演进逻辑,熟悉JTAG/SWD调试器及J-Link、ST-Link等工具的实际应用,是提升开发效率的关键。同时,通过优化等级、内存映射、ITM日志等调试技巧,可以有效应对程序异常与烧录故障。本文从工程实践出发,梳理嵌入式开发链路上各工具的分工与选型思路,帮助开 阅读详情

相关推荐

嵌入式TDD实战:如何让固件代码变得可测试

在嵌入式系统开发中,单元测试与固件工程常因硬件耦合而被视为难以落地的技术实践。很多人将验证等同于目标板烧录调试,导致反馈缓慢、问题堆积。本文从可测试性设计的核心原理出发,探讨如何通过依赖注入、硬件抽象层与逻辑分层,将寄存器操作与业务决策分离,使大部分算法与状态机逻辑可在PC主机上快速验证。借助Ceedling等自动化测试框架,开发者能够以红绿重构的节奏迭代驱动模块,同时使用虚拟时钟与事件队列化解中断和时序难题。该方法在协议栈、控制算法、按键消抖等场景中显著提升代码质量与重构信心,帮助团队建立测试先行的工程文

weixin_30471561的博客 448

Jenkins从配置到实战(一) - 实现C/C++项目自动化构建

本文章主要介绍了,如何去安装和部署Jenkins,并实现自动拉取项目代码,自动化编译流程。

new9232的博客 7684

Jenkins+GitHub实现C项目的集成开发

Jenkins+GitHub实现C项目的集成开发测试部署,包括了Jenkins的具体安装配置等步骤

jenkins打包部署C语言项目,Jenkins 实现 CI 、CD

什么是CI:Continuous Integration,也就是持续集成什么是CD:Continuous Delivery 和 Continuous Deployment,也就是持续交付、持续部署持续集成:就是开发提交了新代码以后,马上进行构建、(单元)测试。根据测试结果,测试过程能够肯定新代码和原有代码可否正确地集成在一块儿,若是测试过程有问题,那么将返回代码给开发部门持续交付:在持续集成的基础...

weixin_35738619的博客 2096

持续集成持续集成持续集成

持续集成持续集成持续集成持续集成持续集成持续集成持续集成

保姆级教程:DBeaver社区版安装与驱动配置(附阿里云镜像解决下载超时)

本文提供DBeaver社区版的保姆级安装教程,涵盖版本选择、安装路径设置到驱动配置优化。特别针对国内用户遇到的下载超时问题,详细介绍了如何配置阿里云镜像加速驱动下载,确保高效连接MySQL等主流数据库。

weixin_30430169的博客 479

使用coding自动化集成部署vue/react

上一篇有记录到使用jenkins实现自动化部署web项目,这篇讲一下如何使用codin部署 1.创建项目 首先注册一个coding账号并创建一个项目 2.录入凭证 通过上图点击左下角的项目设置进入页面,点击左下角开发者选择》凭证管理》录入凭证 凭证名称:随便填个 root:填写服务器的root 密码:填写服务器的密码 3.制作仓库 这一步的目的是打包后的压缩包自动上传到该目录 地址:web 可以写别的,只是个名称,用来指定仓库 4.构建计划 点击确定后就可以进行相应配置了,也可以从外边进入设置,

muge1161105403的博客 2862

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1182

jenkins自动编译c语言工程,使用Jenkins自动编译C#项目

1. 安装插件`MSBuild Plugin`安装后再构建步骤中会多一个【`Build a Visual Studio project or solution using MSBuild`】选项。2. 配置`MSBuild`在【系统管理】->【全局工具配置】->【MSBuild】中添加本地已安装的`MSBuild`。![](/Uploads/userfiles/e671fced-86e...

weixin_39883670的博客 1336

VTK学习(入门级教程,包括安装和使用)~持续更新中

说明:研究QT+VTK有段时间了,准备把学到的东西分享给大家,这篇博客以VS+QT+VTK为主进行展开学习的。

HXX904的博客 4755

NVIDIA DGX Spark实战指南:从开箱到AI模型高效部署

本文详细介绍了NVIDIA DGX Spark的开箱体验、硬件架构及AI模型高效部署实战指南。从1 PetaFLOP算力的迷你设备到Grace Blackwell超级芯片的深度解析,再到五分钟快速上手指南和大模型部署技巧,帮助开发者充分利用这款全球最小AI超级计算机的性能优势。

weixin_29239279的博客 1364

c语言api文档_一分钟开始持续集成之旅系列之:C 语言 + Makefile

作者:CODING - 朱增辉前言make 工具非常强大,配合 makefile 文件可以实现软件的自动化构建,但是执行 make 命令依然需要经历手动输入执行、等待编译完成、将目标文件转移到合适位置等过程,我们真正关心的是最终的输出,却在这些中间过程上浪费了很多时间。利用 CODING 持续集成功能可以实现自动触发构建,构建全程自动化,无须分心看护,节省时间。本文通过一个 C 语言 + Make...

weixin_39935257的博客 226

VLA数据采集以及训练

直到15s计时结束,弹出下面的内容,这个时候不会录制视频了,这里就是需要复位物体到初始位置,尽量保证物体的初始位置放在一样的位置,计时3s,同样根据自己的复位时间来修改(--dataset.reset_time_s=3),这里和前面录制数据的区别就是fps后面多了一个nment,可以作为一个标记,知道什么时候开始去复位而不会拍到自己的手臂。复制网址,在浏览器打开,会出现下面的窗口,依次检查每一轮是否存在问题,例如是否出现录制不完整,是否存在除了机械臂以外的其他移动物体,这些都可能会影响最终训练的效果。

weixin_45303602的博客 496

C语言项目持续集成:用Makefile理顺构建流程

持续集成是现代软件开发中提升代码质量与交付效率的重要实践,其核心在于将构建、测试与产物归档等步骤自动化。对于C语言项目而言,Makefile扮演着关键角色,它能把繁琐的编译规则封装成一条简单的make命令,为CI流水线提供稳定入口。本文从Makefile原理出发,讲解如何通过all、test、clean等目标实现可复现的构建与测试验证,并结合流水线配置展示完整接入流程,帮助开发者快速将既有C项目纳入持续集成,摆脱“本地能过、CI报错”的困境。

weixin_34318326的博客 312

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2133

Android 12.0 kenel中修改rom系统内部存储的大小

在12.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 1678

用Makefile构建C语言项目的持续集成实战指南

持续集成是现代软件工程中保障代码质量的关键实践,其核心在于将代码变更自动触发到干净环境中完成构建、测试与验证。与解释型语言不同,C语言项目依赖复杂的编译链路、Makefile或CMake等构建系统,环境差异常导致“本地能编译、线上失败”的窘境。通过定义清晰的构建规则与自动化测试入口,开发者可以将重复的手工操作固化为流水线。从通用版本管理到CI/CD平台,无论是托管服务还是自建系统,其价值都在于提供可复现的反馈循环。本文以Makefile为骨架,展示如何组织C语言项目结构、编写规范的构建目标,并快速接入持续集

weixin_28832121的博客 175

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

嵌入式固件美化:从代码规范到架构设计的工程实践

在嵌入式系统开发中,代码的可维护性和可读性是决定项目长期成功的关键因素。其核心原理在于通过建立统一的编码规范、模块化设计和自动化工具链,提升软件质量。从技术价值看,这不仅减少了调试时间,更大幅提升了团队协作效率与项目的可扩展性。典型的应用场景包括资源受限的MCU开发、长期维护的工业控制项目以及多开发者协作的复杂固件。本文将深入探讨如何通过静态代码规范、动态架构设计以及构建系统集成,系统化地实现嵌入式固件美化,涵盖硬件抽象层(HAL)设计、状态机管理以及持续集成(CI)等具体实践,帮助开发者从“能跑就行”迈向

weixin_34268843的博客 411

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

嵌入式固件开发效率提升:7大核心技巧从CI/CD到调试设计

在嵌入式系统开发领域,持续集成与自动化测试是保障软件质量、提升交付效率的基石。其核心原理在于通过自动化的构建、测试与部署流水线,实现快速反馈与质量内建,从而将开发模式从传统的“马拉松”转变为敏捷的“冲刺跑”。这一实践的技术价值在于显著降低集成风险、及早发现缺陷,并支持团队频繁、可靠地发布软件。在嵌入式固件开发这一特定应用场景中,面对硬件依赖、资源受限和调试复杂的挑战,高效的CI/CD流水线结合硬件在环测试、静态代码分析等热词技术,成为破局关键。同时,构建模拟器与硬件抽象层以实现软硬解耦,以及投资于结构化日志

weixin_30832405的博客 442

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

GCC编译全流程:从预处理到链接的实用排错指南

编译器是将高级语言翻译成机器指令的工具,而gcc作为经典编译器,其工作并非一条命令那么简单。源码需依次经过预处理、编译、汇编、链接四个阶段,每个阶段会产生不同类型的错误。例如预处理阶段处理宏和头文件,编译阶段检查语法和类型,链接阶段处理符号解析与重定位。理解这些原理,才能快速应对头文件路径错误、undefined reference、链接顺序混乱等高频工程问题。同时,-I、-L、-l等编译选项的正确搭配,以及静态库与动态库的生成和链接方式,也是构建稳定软件的关键。掌握gcc编译流水线和排错思路,有助于在Ma

weixin_42531923的博客 129

jenkis+gitlab+jmeter 实现C语言项目,定时自动构建编译打包部署启动自动化测试

服务运行环境:linux CentOS 软件:jenkins 前提条件: 已有可用的gitlab和项目,如果没有项目,可以自己创建一个测试项目 第一步:jenkins部署:见博客https://blog.youkuaiyun.com/u010481688/article/details/80707529 第二步:jenkis配置 创建项目 新建item 输入项目名称,选择Freestyle pr...

u010481688的博客 1703

Jenkins之HelloWorld

Jenkins 之 HelloWorld。 Jenkins 的功能非常强大,可以根据团队不同需求,对任务进行详细的配置。本博客介绍使用 Jenkins 完成第一个任务,即 HelloWorld。 主要实现如下功能:关联 GitHub 代码仓库,(C 代码,程序打印 ”helloworld“),由 git push 操作触发任务 ...

逆光倾城的博客 1281

jenkins自动化部署git 项目,jenkins自动部署前端项目

大家好,小编来为大家解答以下问题,jenkins自动化部署git 项目,jenkins自动部署前端项目,现在让我们一起来看看吧!

wenangou6 1260

jenkins测试c语言接口,Jenkins集成接口测试实践(一)

一、准备1.安装Jenkins环境,本次实验中使用的是windows本地版2.eclipse3.GitHub二、接口测试用例的介绍1.框架:maven+TestNG+Rest-assured+Extentreport2.用例结构:使用场景1——希望将用例打包后可移植其他环境下执行的用例全部放于src/main下,而不是src/test下,此时可通过mvn install打包后生成jar包这种场景下...

weixin_39876739的博客 361

jenkins自动编译c语言工程,jenkins搭建cc++自动化构建

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?##设置git源码管理内网搭建GitLab源码托管平台,如下设置,使用的是http方式,点击Add添加gitlab用户名和密码。立即执行构建会出现以下信息表示从gitlab拉取代码成功,clone路径是 /root/.jenkins/workspace/uart##cppcheck静态代码分析###在构建服务器上安装cp...

weixin_42134038的博客 1798
上一篇: 一分钟开始持续集成之旅系列之:Java + GWT
下一篇: 弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践
腾云 CODING
博客等级 码龄8年 203粉丝 260原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值