1. 程式人生 > 實用技巧 >一分鐘開始持續整合之旅系列之:C 語言 + Makefile

一分鐘開始持續整合之旅系列之: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 平臺的這些功能,我們像是僱了一個永不會累的助手,承擔了耗時的構建工作,從而節省了時間,提高了效率。