> 技术文档 > 本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库


本地Git仓库搭建(DevStar)与Git基本命令

  • 更新:CI/CD流水线的用法练习
    • 前言
    • 注册Runner
    • 编写CI/CD脚本文件
    • 测试
  • 实验环境
  • 搭建平台
  • Git基本命令的使用
    • 本地仓库的创建
    • 代码提交
    • 代码合并
    • 版本发布
  • 总结

更新:CI/CD流水线的用法练习

前言

感谢孟宁老师给我们布置了这样一次富有前瞻性的实验!通过这次实践,我们不仅提前接触到了CI/CD这一现代软件开发的核心理念,更深入体验了自动化流水线的搭建与配置过程。从Docker容器的部署、Gitea Actions的配置,到编译环境的调试和优化,每一个环节都让我们感受到了现代开发工具的强大与便捷。

这次实验让我们真正理解了“代码一提交,测试自动跑,构建自动完成”的开发模式,这种自动化思维将极大提升我们未来的开发效率。特别是在解决环境配置、镜像源切换、依赖安装等实际问题的过程中,我们积累了宝贵的工程实践经验。

相信这些在课堂上难以获得的实战技能,无论是在今后的学习项目中,还是在未来的职业生涯里,都将成为我们的重要技术储备。感谢老师为我们打开了通向现代化软件开发的大门,让我们能够与行业前沿技术接轨!

CI/CD流水线是一种自动化的软件开发实践,它将代码集成和持续部署串联起来。当开发者提交代码后,系统会自动执行编译、测试、构建、部署等一系列步骤,确保代码质量并快速交付到生产环境。

CI/CD脚本文件是定义流水线具体执行步骤的配置文件,通常使用YAML格式编写。它描述了在什么条件下触发流水线、需要执行哪些任务(如代码检出、编译、测试、部署)、任务的执行顺序和环境要求等。不同平台有不同的脚本文件名,如GitHub Actions使用.github/workflows/*.yml,GitLab CI使用.gitlab-ci.yml,Gitea Actions使用.gitea/workflows/*.yml

本次实验采用Gitea Actions实现对C语言程序的自动编译、测试。

注册Runner

如果没有Runner,通过Git提交的代码就无法触发CI/CD脚本文件事先编写好的一系列操作。

参考文档:

  1. CI/CD脚本文件示例
  2. Act Runner | Gitea Documentation

执行下列命令,在Docker中安装Runner

$ docker pull docker.io/gitea/act_runner:latest # for the latest stable release

进入Gitea个人设置页面,获取用于注册Runner的Token。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
然后在Docker中启动Runner容器,以下为终端命令行记录(Gitea和Runner都在Docker内的情况下适用,其他情况下请自行更改指令):

$ docker network create gitea-network # 创建Docker内网络,方便与Gitea进行连接0e78057a9a591a092d8aafff512a852025e1255d842d4d84e44e69f8a147f54d$ docker network connect gitea-network DevStar-Studio # 将Gitea连接到改网络# 启动Runner镜像,配置名称、网络、Gitea实例地址、注册Runner的Token(从Gitea设置内获取)、以及运行环境$ docker run -d --name gitea-runner --restart unless-stopped --network gitea-network -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/runner-data:/data -e GITEA_INSTANCE_URL=http://DevStar-Studio:3000 -e GITEA_RUNNER_REGISTRATION_TOKEN=QxvED87rQI45QZ9rakVuylcV99ntu5UhFEbCkUVw -e GITEA_RUNNER_LABELS=self-hosted,docker,linux gitea/act_runner:latest6ffe9761fe0de19ff143a9b56c5512e4239730b49edf26e6757f79792a6a73f4$ docker ps # 查看容器信息CONTAINER ID IMAGE COMMAND  CREATED STATUS PORTS NAMES6ffe9761fe0d gitea/act_runner:latest \"/sbin/tini -- /opt/…\" 3 seconds ago Up 2 seconds  gitea-runner5a9d22eb7d44 mengning997/devstar-studio:latest \"/usr/bin/dumb-init …\" 4 hours ago Up 28 minutes 2222/tcp, 0.0.0.0:8081->3000/tcp, :::8081->3000/tcp DevStar-Studio$ docker exec -it gitea-runner cat /etc/os-release # 查看容器系统架构NAME=\"Alpine Linux\"ID=alpineVERSION_ID=3.20.3PRETTY_NAME=\"Alpine Linux v3.20\"HOME_URL=\"https://alpinelinux.org/\"BUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"# 调用阿里云镜像源安装gcc$ docker exec -it gitea-runner sh -c \" echo \'https://mirrors.aliyun.com/alpine/v3.20/main\' > /etc/apk/repositories && echo \'https://mirrs.aliyun.com/alpine/v3.20/community\' >> /etc/apk/repositories && apk update && apk add gcc make musl-dev \"# ......# 调用阿里云镜像源安装Node.js$ docker exec -it gitea-runner sh -c \" echo \'https://mirrors.aliyun.com/alpine/v3.20/main\' > /etc/apk/repositories && echo \'https://mirrors.aliyun.com/alpine/v3.20/community\' >> /etc/apk/repositories && apk update && apk add nodejs npm gcc make musl-dev \"# ......

至此Runner已配置完毕,同样可在Gitea个人设置中查看。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

编写CI/CD脚本文件

在项目目录下创建文件.gitea/workflows/c-cicd.yaml,写入下列内容:

name: C程序构建与测试on: push: # push操作会触发的分支 branches: [ main, master, develop ] pull_request: # pr操作会触发的分支 branches: [ main, master ]jobs: build-and-test: runs-on: self-hosted # 使用本地Runner执行任务 steps: # 阶段0:代码检出(必须步骤) - name: Checkout code uses: https://devstar.cn/actions/checkout@v4 # 重要checkout with: fetch-depth: 1 # 阶段1:手动代码检出验证 - name: Manual checkout and verify run: | echo \"=== 代码检出验证 ===\" echo \"当前工作目录: $(pwd)\" echo \"仓库内容:\" ls -la echo \"检查hello.c文件:\" [ -f hello.c ] && echo \"✓ hello.c文件存在\" || echo \"✗ hello.c文件不存在\" echo  # 阶段2:环境检查 - name: Environment check run: | echo \"=== 构建环境检查 ===\" echo \"操作系统: $(uname -a)\" echo \"GCC版本:\" gcc --version 2>/dev/null || echo \"需要安装gcc\" echo \"Make版本:\" make --version 2>/dev/null || echo \"make可选\" echo  # 阶段3:编译C程序 - name: Compile C program run: | echo \"=== 开始编译 ===\" gcc -o hello hello.c echo \"✓ 编译完成\" echo  # 阶段4:运行测试 - name: Run tests run: | echo \"=== 程序测试 ===\" echo \"运行hello程序:\" ./hello echo \"✓ 程序执行成功\" echo  # 阶段5:编译验证 - name: Build verification run: | echo \"=== 构建产物验证 ===\" ls -la hello echo \"文件类型:\" file hello 2>/dev/null || echo \"可执行文件已生成\" echo \"文件权限: $(ls -l hello | cut -d\' \' -f1)\" echo  # 阶段6:代码质量 - name: Code quality run: | echo \"=== 代码质量检查 ===\" gcc -Wall -Wextra -Werror -o hello_strict hello.c echo \"✓ 严格编译检查通过\" echo  # 阶段7:清理 - name: Cleanup run: | echo \"=== 清理环境 ===\" rm -f hello hello_strict echo \"✓ 清理完成\" 

可以看出此yaml文件简单定义了对可能的git操作会触发的自动化任务。

测试

在项目目录下将c-cicd.yaml也提交到本地Gitea仓库,命令行记录如下:

$ git add .gitea/workflows/c-cicd.yaml$ git commit -m \"Modified yaml file\"[master db7a495] Modified yaml file 1 file changed, 1 insertion(+), 1 deletion(-)$ git push origin masterUsername for \'http://localhost:8081\': ltdzPassword for \'http://ltdz@localhost:8081\':Enumerating objects: 9, done.Counting objects: 100% (9/9), done.Delta compression using up to 4 threadsCompressing objects: 100% (3/3), done.Writing objects: 100% (5/5), 407 bytes | 407.00 KiB/s, done.Total 5 (delta 1), reused 0 (delta 0)remote: . Processing 1 referencesremote: Processed 1 references in totalTo http://localhost:8081/ltdz/TestRepo.git 60ff65e..db7a495 master -> master

然后就可以访问本地Gitea仓库查看Actions栏的Action记录。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
可以看到,Action执行的任务与c-cicd.yaml文件编写的执行阶段对应。
至此对CI/CD流水线的用法练习实验结束。


实验环境

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

搭建平台

按照DevStar的Github仓库要求,在终端中执行下列命令,即可成功安装DevStar到本地部署。如遇网络问题,需要更换可用的docker镜像源。

wget -c https://devstar.cn/assets/install.sh && chmod +x install.sh && sudo ./install.shdevstar helpsudo devstar start --port=8081

执行结果如下图所示:
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
这里我选择在8081号端口运行,故加了后缀--port=8081
随后在浏览器中访问http://localhost:8081即可进入DevStar平台,如下图所示。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
这里的配置选项默认没有改动,点击最下方按钮Install Gitea,等待几秒会跳转到注册页面,按要求扫码后再注册账号,第一个注册的账号会默认为管理员。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
至此,DevStar平台的本地部署已完成。

Git基本命令的使用

本地仓库的创建

在页面左上角找到按钮New Repository,进入配置页。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

图中修改已用红框标出。这里把Default Branch的内容修改成了master,因为本地Git默认的分支名称为master,改成一致为了输入指令时不用再修改。点击Create Repository即可创建仓库。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

代码提交

首先在本地创建一个新的文件夹用于存放文件,然后在终端中运行下列指令。

git log # 查看git日志git init # 初始化当前目录的本地仓库,生成.git文件git remote add origin http://localhost:8081/ltdz/TestRepo.git # 将本地仓库与远程仓库关联,名为origingit add hello.c # 把当前目录中的hello.c文件加入到暂存区,便于后续提交git commit -m \"Added hello.c\" # 将暂存区提交到本地仓库git push -u origin master # 将本地分支的提交推送到远程仓库,,第一次推送要用 -u 确认关系

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
注意在最后一步推送到远程仓库时需要验证DevStar的身份,用户名和密码即注册时的数据,随后即可在仓库中发现新添加的文件hello.c

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

代码合并

在终端中运行下列命令,给仓库创建新的分支:

git branch main # 创建新分支maingit checkout main # 切换到分支maingit branch # 查看当前分支git push -u origin main # 将新创建的分支推送到远程仓库

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
随后即可在仓库中发现新创建的main分支。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
再运行下列指令,在新创建的main分支下提交已经修改后的hello.c

git add hello.cgit commit -m \"Modified hello.c from branch main\"git push origin main

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
随后即可在仓库中的main分支下发现对代码的修改,注意此时master分支下的代码内容没有变化,图中区别已用红框标出。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
此时再切换回master分支,执行下列指令,即可将main分支的改动合并到master分支。

git merge main # 将main分支的改动合并过来git push origin master # 推送到远程仓库

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
此时master分支下的代码内容已经因为代码合并更新。
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

版本发布

在终端中运行下列指令:

git tag -a v1.0.0 -m \"Release Version 1.0.0\" # 定义标签git push origin v1.0.0 # 推送到远程仓库git tag # 查看所有标签

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
对应在仓库中也会显示新的版本:
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
在对应的Releases界面点击New Release即可创建新的Release并发布。

本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库
本地Git仓库搭建(DevStar)与Git基本命令、CI/CD自动化流水线实验_本地搭建git仓库

总结

通过本次实验,我深入学习了如何在本地搭建Git仓库并熟练掌握了Git的基本命令,包括仓库的创建、代码的提交、分支的合并以及版本的发布。我通过实际操作掌握了git initgit addgit commitgit pushgit branchgit mergegit tag等核心命令的使用方法;我通过创建和切换分支学会了如何在不同的分支上进行开发,并将修改合并到主分支。这让我理解了Git分支管理的强大功能,尤其是在多人协作开发中的应用。我通过打标签和发布版本,掌握了如何为代码库的重要节点做标记,并通过代码仓库的Release功能发布版本。这让我对软件版本管理有了更清晰的认识。本次实验的设计非常贴合实际开发需求,内容丰富且循序渐进,让我从零开始逐步掌握了Git的核心技能。希望未来还能有更多这样高质量的实验课程!