在软件开发的生命周期中,持续集成(Continuous Integration, CI)是确保团队协作、代码质量和交付效率的关键环节。
OCI DevOps Services 作为 Oracle 云原生 CI/CD 服务,为开发者提供了标准的CI/CD平台,支持构建自动化的流水线,从代码提交到部署全程实现自动化。
本系列的第二篇文章将深入介绍如何在 OCI DevOps Services 中创建 Build Pipeline(构建流水线),这是 CI 流水线的关键组成部分。
通过本系列的文章,您将了解如何在 OCI DevOps Services 中搭建自动化流水线,提高应用开发和交付的效率,同时充分发挥 OCI 云原生服务的作用。
我们将探讨如何配置构建环境、定义构建步骤,并利用 OCI 提供的资源实现高效的构建过程。通过这一步,您将更好地理解如何将 OCI DevOps Services 集成到日常开发中,实现持续交付的最佳实践。
1 创建 DevOps CI 流水线
CI流水线的主要组成:
CI流水线文件: 在持续集成(Continuous Integration, CI)的过程中,CI流水线文件是定义整个构建和部署过程的重要组成部分。它包含了任务的执行顺序、依赖关系以及每个任务的具体内容。通过声明式配置的方式,可以清晰的了解每部分的执行操作;
应用代码: 代码是CI流水线的核心,它是通过流水线执行的主要对象。在CI流水线中,代码会被编译、测试、安全和审计等功能集成,最终生成构建产物。通过自动化这些步骤,开发者可以确保代码的质量和稳定性;
制品仓库: 制品仓库是存储构建产物的地方。在CI流水线执行完成后,构建产物(如编译后的代码)会被上传至制品仓库,供后续的部署流水线或其他环境使用。
1.1 示例代码结构
示例流程对golang代码进行推送至代码仓库后,执行编译、打包和归档操作,示例主要包含如下内容:
- build_spec.yaml → ci配置文件
- Dockerfile → 镜像构建文件
- main.go → golang http 主程序
1.2 build_spec.yaml 基础解释
version: 0.1 # ci版本,当前为0.1,固定写法
component: build # 组件名称,固定写法
timeoutInSeconds: 6000 # 构建超时时间,单位为秒
runAs: root # 构建时的用户,root或者opc, root可以实现更多的操作,如安装软件包等
shell: bash # 构建时使用的shell,bash模式
env: # 环境变量
exportedVariables: # 导出的环境变量,可以在后续CD的步骤中使用
- BUILDRUN_HASH # 用于生成唯一的镜像tag
inputArtifacts: # 输入的构建产物,可以是源代码,二进制文件,镜像等
- name: golan-cli
type: URL
url: https://go.dev/dl/go1.18.10.linux-amd64.tar.gz # golang解释器
location: ${OCI_PRIMARY_SOURCE_DIR}/gocli.tar.gz # 本地存储路径
steps: # 构建步骤,标准语法格式
- type: Command # 步骤类型,Command表示执行命令
name: "Define unique image tag"
timeoutInSeconds: 40
command: | # 生成唯一的镜像tag, 用于后续的镜像推送
export BUILDRUN_HASH=`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
echo "BUILDRUN_HASH: " $BUILDRUN_HASH
- type: Command
timeoutInSeconds: 600
name: "Build the app"
command: | # 按照golang并进行代码编译
cd ${OCI_PRIMARY_SOURCE_DIR}
rm -rf /usr/local/go && tar -C /usr/local -xzf gocli.tar.gz
export PATH=$PATH:/usr/local/go/bin
echo "======================================"
/usr/local/go/bin/go version
echo "======================================"
/usr/local/go/bin/go version
/usr/local/go/bin/go build -o main .
- type: Command # 编译成功的代码包, 通过 docker build 推送至
timeoutInSeconds: 1200
name: "Build container image"
command: |
cd ${OCI_PRIMARY_SOURCE_DIR}
docker build --pull --rm -t golan_app_base .
outputArtifacts: # 输出到Artifacts中,Artifacts需要提前创建
- name: golan_app_latest_image
type: DOCKER_IMAGE
location: golan_app_base:latest
1.3 Dockerfile 示例
FROM golang:latest
WORKDIR /app
COPY . /app/
EXPOSE 8080
CMD [ "/app/main" ]
2 创建 CI 流水线步骤
2.1 创建 CI 流水线
2.2 通过 “+” 增加步骤
2.3 创建CI流水线 增加新的集成步骤
2.4 创建CI流水线步骤的基础属性说明
2.5 CI流水线涉及权限配置
2.6 选择代码仓库
支持多种代码仓库的集成:
- OCI Code Repository
- GitHub
- GitLab Cloud/Server
- Bitbucket Cloud
- Visual Builder Studio
- Bitbucket Server
2.7 创建 CI 流水线 - 创建容器镜像制品库
镜像制品库用于docker镜像的上传,主要使用其推送至镜像仓库。
2.8 执行 CI 流水线 && 构建过程
至此CI部分将代码成功推送至镜像仓库。
3 参考资料
Build_spec.yaml 的语法介绍
在下一节,我们将介绍 Deployment Pipeline ...
通过本系列的文章,您将了解如何在 OCI DevOps Services 中搭建自动化流水线,提高应用开发和交付的效率,同时充分发挥 OCI 云原生服务的作用。
🚀 炸鸡物料库 🚀
🔍 内容定位: IT技术领域,云计算、云原生、DevOps 和 AI 等相关的技术资讯、实践和经验分享。面向开发、系统和云计算,提供实用的技术内容。
🎯 目标受众: 面向开发者、系统管理员和云计算从业者,提供实用的技术内容。
🗓️ 更新频率:每周更新,每次分享都为您带来有价值的技术内容。
🤝 互动与反馈: 鼓励读者留言、评论,有问题随时提问,我们将积极互动并提供帮助。
💌 订阅方式: 扫描二维码或搜索“炸鸡物料库”关注,不错过每一篇精彩内容。
🌐 合作与分享: 如果您有技术分享或合作计划,欢迎联系我们,共同成长!