在软件开发的生命周期中,持续集成(Continuous Integration, CI)是确保团队协作、代码质量和交付效率的关键环节。
OCI DevOps Services 作为 Oracle 云原生 CI/CD 服务,为开发者提供了标准的CI/CD平台,支持构建自动化的流水线,从代码提交到部署全程实现自动化。
本系列的第二篇文章将深入介绍如何在 OCI DevOps Services 中创建 Build Pipeline(构建流水线),这是 CI 流水线的关键组成部分。
- 基础架构流程 && OCI 代码仓库使用
- Build Pipeline (CI)
- Deployment Pipeline (CD): 即将更新..
- 整合 CI/CD: 即将更新..
通过本系列的文章,您将了解如何在 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-clitype: 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: 40command: | # 生成唯一的镜像tag, 用于后续的镜像推送 export BUILDRUN_HASH=`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7` echo "BUILDRUN_HASH: " $BUILDRUN_HASH- type: CommandtimeoutInSeconds: 600name: "Build the app"command: | # 按照golang并进行代码编译cd ${OCI_PRIMARY_SOURCE_DIR}rm -rf /usr/local/go && tar -C /usr/local -xzf gocli.tar.gzexport PATH=$PATH:/usr/local/go/binecho "======================================"/usr/local/go/bin/go versionecho "======================================"/usr/local/go/bin/go version/usr/local/go/bin/go build -o main .- type: Command # 编译成功的代码包, 通过 docker build 推送至timeoutInSeconds: 1200name: "Build container image"command: |cd ${OCI_PRIMARY_SOURCE_DIR}docker build --pull --rm -t golan_app_base .outputArtifacts: # 输出到Artifacts中,Artifacts需要提前创建- name: golan_app_latest_imagetype: DOCKER_IMAGElocation: golan_app_base:latest
1.3 Dockerfile 示例
FROM golang:latestWORKDIR /appCOPY . /app/EXPOSE 8080CMD [ "/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 的语法介绍
Build Specification
在下一节,我们将介绍 Deployment Pipeline ...
- 基础架构流程 && OCI 代码仓库使用
- Build Pipeline (CI)
- Deployment Pipeline (CD): 即将更新..
- 整合 CI/CD: 即将更新..
通过本系列的文章,您将了解如何在 OCI DevOps Services 中搭建自动化流水线,提高应用开发和交付的效率,同时充分发挥 OCI 云原生服务的作用。