• 一分钟开始持续集成之旅系列之: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!
    ");
        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 平台的这些功能,我们像是雇了一个永不会累的助手,承担了耗时的构建工作,从而节省了时间,提高了效率。

  • 相关阅读:
    【转】BP神经网络
    【转】Matlab的regionprops详解
    【转】本人常用资源整理(ing...)
    【转】LDA-linear discriminant analysis
    [转]推荐几个机器学习算法及应用领域相关的中国大牛:
    【转】机器学习资料推荐
    《转贴》机器学习 机器视觉 图像处理 牛人牛站
    [转]LLE
    UVA10651
    UVA10051
  • 原文地址:https://www.cnblogs.com/codingdevops/p/13182949.html
Copyright © 2020-2023  润新知