14

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

 3 years ago
source link: https://segmentfault.com/a/1190000023006077
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者: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 命令以验证构建正常。

N7jAZ3y.png!web

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

步骤一 创建制品库

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

从左侧导航栏打开 制品库

A3qIzya.png!web

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

j2u2eyi.png!web

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

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

zmuQRn2.png!web

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

rY7rAra.png!web

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

步骤三 编写构建脚本

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

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

2U3q6z6.png!web

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

e6VrQzJ.png!web

步骤四 配置触发构建规则

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

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

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

qqYBFzj.png!web

步骤五 执行构建

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

YNryAjE.png!web

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

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

FFZBVn6.png!web

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

步骤六 下载目标文件

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

uaIrAzI.png!web

总结

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK