【Oracle云】OCI DevOps Services 构建自动化流水线 (2) - 创建 Build Pipeline CI 流水线

在软件开发的生命周期中,持续集成(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 云原生服务的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue学习总结

声明:本文来源于黑马程序员PDF讲义 双向绑定: 修改表单项标签,发现vue对象data中的数据也发生了变化 双向绑定的作用:可以获取表单的数据的值,然后提交给服务器 事件绑定 v-on: 用来给html标签绑定事件的。需要注意…

Zookeeper分布式队列实战

目录 Zookeeper分布式队列 普通方式实现 设计思路 具体实现 使用Curator实现 具体实现 注意事项 Zookeeper分布式队列 常见的消息队列有:RabbitMQ,RocketMQ,Kafka等。Zookeeper作为一个分布式的小文件管理系统,同样能实现简单的队列功…

从零学习Linux操作系统 第二十三部分 系统中火墙的管理及优化

1 、实验环境设定 第一台主机需要两个网卡 另一台主机一个网卡桥接到VMnet0上 第一台主机保证能够和windows保持连接 设定第一块儿网卡能够与Windows连接 设定第二台主机能够与第一台主机连接 二、火墙中的基本名词及知识 火墙就相当于是一个表格,这个表格里写…

svn 安装路径

SVN客户端安装(超详细) 一、SVN客户端安装 1、下载安装包地址:https://tortoisesvn.net/downloads.html 此安装包是英文版的,还可以下载一个语言包,在同界面的下方 一直点击下一步,直到弹出选择红框 然…

3. Mybatis的XML配置文件(重点)

目录 1 Mybatis的XML配置文件 1.1 XML配置文件规范 1.2 XML配置文件实现 1.3 MybatisX的使用 2. Mybatis动态SQL 2.1 什么是动态SQL 2.2 动态SQL-if 2.2.1 条件查询 2.2.2更新 2.3 动态SQL-foreach 2.4 动态SQL-sql&include 1.mybatis入门 2.mybatis基本操作 1…

AI智能分析+明厨亮灶智慧管理平台助力“舌尖上的安全”

春节是中国最重要的传统节日之一,在春节期间,人们聚餐需求激增,餐饮业也迎来了高峰期。在这个时期,餐饮企业需要更加注重食品安全和卫生质量,以保证消费者的健康和权益,明厨亮灶智慧管理成为了餐饮业中备受…

基于单片机温度控制系统的研究

摘 要:笔者基于单片机的温度控制系统,从单片机选择、传感器选择、系统框架设计等方面概述了单片机的温度控制系统内涵,分析了其运行原理,列举了单片机温度控制系统设计的实操方法,从硬件系统、软件系统、温度检测方法…

springboot144基于mvc的高校办公室行政事务管理系统设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

二叉搜索树操作题目:删除二叉搜索树中的结点

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:删除二叉搜索树中的结点 出处:450. 删除二叉搜索树中的结点 难度 5 级 题目描述 要求 给定二叉…

Ubuntu Linux 下安装和卸载cmake 3.28.2版本

一、安装cmake 1.首先,先从cmake官网下载cmake-3.28.2-linux-x86_64.tar.gz 2.用FinalShell 等文件上传工具,将这个压缩包上传到 虚拟机的某个路径去(自选) 3. cd /usr/local/bin/,然后创建cmake文件夹,…

pnpm : 无法加载文件 D:\tool\nvm\nvm\node_global\pnpm.ps1,因为在此系统上禁止运行脚本

你们好,我是金金金。 场景 新创建的项目,在vscode编辑器终端输入 pnpm i,显示报错如上 解决 在终端输入get-ExecutionPolicy(查看执行策略/权限) 输出Restricted(受限的) 终端再次输入Set-ExecutionPolicy -Scope CurrentUser命令给用户赋予…

STM32低功耗模式

一、低功耗模式介绍 STM32 的低功耗模式有 3 种: 1)睡眠模式(CM3 内核停止,外设仍然运行) 2)停止模式(所有时钟都停止) 3)待机模式(1.8V 内核电源关闭) 在这三种低功耗模式中&#…

Vue3项目封装一个Element-plus Pagination分页

前言:后台系统分页肯定是离不开的,但是ui框架都很多,我们可以定义封装一种格式,所有项目按到这个结构来做. 实例: 第一步:在项目components组件新建一个分页组件,用来进行封装组件. 第二步:根据官方的进行定义,官方提供的这些,需要我们封装成动态模式 第三步:代码改造 <!-…

Unity之第一人称角色控制

目录 第一人称角色控制 &#x1f634;1、准备工作 &#x1f4fa;2、鼠标控制摄像机视角 &#x1f3ae;3、角色控制 &#x1f603;4.杂谈 第一人称角色控制 专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器&#xff0c;是第三人称视角的&#xff0c;以小编…

使用最大边界相关算法处理文章自动摘要

一、需求背景 对于博客或者文章来说&#xff0c;摘要是普遍性的需求。但是我们不可能让作者自己手动填写摘要或者直接暴力截取文章的部分段落作为摘要&#xff0c;这样既不符合逻辑又不具有代表性&#xff0c;那么&#xff0c;是否有相关的算法或者数学理论能够完成这个需求呢&…

【C++】默认成员函数

与普通成员函数差距较大&#xff0c;形式对于我们比较陌生&#xff0c;但这是语法&#xff0c;是我们是必须要掌握的。 目录 类的默认成员函数&#xff1a;构造函数&#xff1a;概念&#xff1a;语法&#xff1a;特性&#xff1a; 析构函数&#xff1a;概念&#xff1a;语法&a…

解决:ModuleNotFoundError: No module named ‘torchvision’

解决&#xff1a;ModuleNotFoundError: No module named ‘torchvision’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named torchvision背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&…

jdk17新特性—— 密封类(Sealed Classes)

目录 一、密封类(Sealed Classes)的概述1.1、概述1.2、特性1.3、注意事项 二、密封类(Sealed Classes)代码示例2.1、密封类(Sealed Classes)代码结构示例2.2、密封类(Sealed Classes)代码示例 三、密封类(Sealed Classes)接口代码示例3.1、密封类(Sealed Classes)接口代码结构示…

微信小程序~上推加载更多组件

本组件使用的是TaroReact 实现的 &#xff0c;具体代码如下 一共分为tsx和less文件 //index.tsx /** RefreshLoading* description 上推加载更多组件* param loading boolean* param style* returns*/import { View } from "tarojs/components"; import React, { FC…

2023蓝帽初赛

APK取证 1.涉案apk的包名是&#xff1f;[答题格式:com.baid.ccs] 用雷电APP智能分析打开 在基本信息里得到应用包名 答案&#xff1a;com.vestas.app 2.涉案apk的签名序列号是&#xff1f;[答题格式:0x93829bd] 同理&#xff0c;在详细信息里面找到了签名序列号 答案&…