一分钟开始持续集成之旅系列之:C 语言 + Makefile
作者: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 命令以验证构建正常。

下面我们正式开始通过一个 Demo 演示 CODING 平台持续集成功能的使用。
步骤一 创建制品库
为了方便随时使用构建出来的目标文件,我们将构建物存储到 CODING 平台制品库,因此需要先创建合适的制品仓库,这里创建 generic 仓库比较合适。
从左侧导航栏打开制品库。

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

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

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

保存构建计划后,系统会自动将构建模板对应的 Jenkinsfile 推送到仓库,默认为 master 分支。
步骤三 编写构建脚本
构建脚本定义构建过程的具体步骤,是构建计划的核心部分。CODING 平台提供了图形化编辑器方便您快速编写构建脚本。
CODING 持续集成底层基于开源 CI/CD 软件领导者 Jenkins 实现,完全兼容 Jenkins pipeline 构建脚本语法,根据 Jenkins 官方提供的脚本编写指南,可以实现更复杂的构建任务,CODING 也提供了文本编辑器方便您在线编辑。

代码仓库中已包含一个简单的构建脚本(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 获取仓库名,因此需要配置构建计划设置该变量值。

步骤四 配置触发构建规则
CODING 持续功能支持多种触发方式包括代码源触发、定时触发、API 触发及手动触发,这几种触发方式可以同时配置互不冲突,其中代码源触发又可配置为推送到指定分支或标签触发,触发方式多样,可满足绝大部分场景需要。
如前言中所说,我们希望把更多的精力放在源代码上,尽量减少构建所带来的干扰,因此这里必不可少的是配置通过代码源触发,通过配置如下正则表达式,可以在推送代码到匹配的分支名时自动触发构建。
^refs/(heads/(release|release-.*|build-.*|feat-.*|fix-.*|test-.*|mr/.*))

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

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

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

总结
本文通过一个 C 语言 + makefile 的 Demo 项目讲解了 CODING 持续集成、制品库的简单使用。借由 CODING 平台的这些功能,我们像是雇了一个永不会累的助手,承担了耗时的构建工作,从而节省了时间,提高了效率。
一分钟开始持续集成之旅系列之:C 语言 + Makefile的更多相关文章
- 一分钟开始持续集成之旅系列之:Java + GWT
作者:CODING - 朱增辉 前言 Google Web Toolkit(GWT)是一个开源.免费的 Web 开发框架,通过该框架,您可以使用 Java 构建复杂.高性能的 JavaScript 应 ...
- Jenkins持续集成企业实战系列之Jenkins插件下载及邮件配置-----05
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战系列之Jenkins手动构建-----04
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战系列之Jenkins配置演示-----03
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战系列之Jenkins持续集成简介及安装-----02
1. Jenkins持续集成简介 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求, ...
- Jenkins持续集成企业实战系列之两种网站部署的流程-----01
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Linux环境:持续集成环境部署系列
之前的博客介绍了Linux环境下持续集成环境部署的一些内容,这篇博客将其整理一下,算做一个index,方便自己和大家查阅... 1.linux下安装JDK Jenkins是一个java开源的持续集成工 ...
- Jenkins持续集成 & .NET
最近受累于测试环境每次发布都很麻烦,而且我们有多个测试环境,因此专门抽时间做了Jenkins的配置和研究. 折腾了两天终于绿灯以后,先来个截图,BlueOcean UI还是很nice的. 环境搭建 找 ...
- Jenkins持续集成
Jenkins持续集成 & .NET 最近受累于测试环境每次发布都很麻烦,而且我们有多个测试环境,因此专门抽时间做了Jenkins的配置和研究. 折腾了两天终于绿灯以后,先来个截图,Blu ...
随机推荐
- 枚举&注解
枚举:自定义枚举类 使用Enum关键字定义的枚举类 注解:jdk内置的基本注解类型(3个) 自定义注解类型 对注解进行注解(元注解4个) 利用反射获取注解信息(反射部分涉及) 自定义枚举类: Test ...
- Linux SCP命令远程复制文件
从本地复制到远程 scp 本地文件 远程用户名@远程地址:远程目录(此命令回车后会要求输入密码,验证通过后会把本地文件复制到远程目录中,文件名不变) 或者 scp 本地文件 远程用户名@远程地址:远程 ...
- 一文让你快速上手 Mockito 单元测试框架
前言 在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用.为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改,简化集成,方便代码重构以及许多 ...
- SpringBoot实现微信小程序登录的完整例子
目录 一.登录流程 二.后端实现 1.SpringBoot项目结构树 2.实现auth.code2Session 接口的封装 3.建立用户信息表及用户增删改查的管理 4.实现登录认证及令牌生成 三.前 ...
- Spring相关面试题-整理
1.什么是Spring MVC?简单介绍一下你对Spring MVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View, ...
- 【SpringMVC】使用三层架构实现登录,注册。(下篇)
上篇写了构思与界面层,本篇写一下业务逻辑层.数据访问层 目录 业务逻辑层 包:pojo 用户类(JavaBean):User public class User { private String us ...
- Java实现 LeetCode 622 设计循环队列(暴力大法)
622. 设计循环队列 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器" ...
- Mysql索引扫盲总结
本文总结了一些MySQL索引的基本概念和原理,如果可以快速清晰回答这些问题可以出门左转提提宝贵建议. 什么是索引?索引为什么查询快,索引的数据结构是什么? 聚簇索引/非聚簇索引区别? 什么是覆盖索引? ...
- 一篇关于Android M以后权限介绍的不错的文章
文章地址:http://www.jianshu.com/p/e1ab1a179fbb/
- Spring AOP学习笔记02:如何开启AOP
上文简要总结了一些AOP的基本概念,并在此基础上叙述了Spring AOP的基本原理,并且辅以一个简单例子帮助理解.从本文开始,我们要开始深入到源码层面来一探Spring AOP魔法的原理了. 要使用 ...