aws codebuild 自定义构建环境和本地构建
参考资料
-
Extending AWS CodeBuild with Custom Build Environments
-
Docker in custom image sample for CodeBuild
codebuild自定义构建环境
在创建codebuild项目的时候发现
构建环境是 Docker 映像,其中包含构建和测试项目所需的所有内容的完整文件系统
用rust写一个简单的helloworld,添加一段单元测试
#[derive(Debug)]
struct Rectangle {width: u32,height: u32,
}impl Rectangle {fn can_hold(&self, other: &Rectangle) -> bool {self.width > other.width && self.height > other.height}
}pub fn add_tow(a: i32) -> i32 {a + 2
}#[cfg(test)]
mod tests {use super::*;#[test]fn larger_can_hold_smaller() {let larger = Rectangle { width: 8, height: 7 };let smaller = Rectangle { width: 5, height: 1 };assert!(larger.can_hold(&smaller));}use crate::add_tow;#[test]fn if_add_twos() {assert_eq!(4, add_tow(2));}#[test]fn if_add_twos_info() {let result = add_tow(2);// assert!(5 == result,"failed to add two for 3, get wrong value {}",result);assert_eq!(5,result,"failed to add two for 3, get wrong value {}",result);}
}
创建buildspec.yml
配置
version: 0.2phases:install:commands:- echo "install stage"pre_build:commands:- echo "pre_build stage"- cargo versionbuild:commands:- echo "build stage"- cargo buildpost_build:commands:- echo "post_build test stage"- cargo test
artifacts:files:- target/release/rustdemodiscard-paths: yes
创建codebuild
项目如下
$ aws codebuild create-project --cli-input-json file://buildfile.json
// buildfile.json
{"name": "test-codebuild-rust","source": {"type": "CODECOMMIT","location": "https://git-codecommit.cn-north-1.amazonaws.com.cn/v1/repos/test-codebuild-rust","gitCloneDepth": 1,"gitSubmodulesConfig": {"fetchSubmodules": false},"insecureSsl": false},"sourceVersion": "refs/heads/master^{8f5b871be5bf92ef70155801b2f35e4af0779632}","artifacts": {"type": "S3","location": "zhaojiew-test","path": "","namespaceType": "NONE","name": "rustdemo","packaging": "ZIP","overrideArtifactName": false,"encryptionDisabled": false},"environment": {"type": "LINUX_CONTAINER","image": "xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/myrust:latest","computeType": "BUILD_GENERAL1_SMALL","environmentVariables": [],"privilegedMode": false,"imagePullCredentialsType": "CODEBUILD"},"serviceRole": "arn:aws-cn:iam::xxxxxxxxx:role/service-role/codebuild-test-codebuild-rust-service-role","timeoutInMinutes": 60,"queuedTimeoutInMinutes": 480,"encryptionKey": "arn:aws-cn:kms:cn-north-1:xxxxxxxxx:alias/aws/s3","logsConfig": {"cloudWatchLogs": {"status": "ENABLED"},"s3Logs": {"status": "DISABLED","encryptionDisabled": false}}
}
开始构建
aws codebuild start-build --project-name test-codebuild-rust
第一次在PROVISIONING
阶段报错,由于指定仓库为ecr,需要给codebuild-test-codebuild-rust-service-role
权限拉取ecr镜像
BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE: Unable to pull customer's container image. CannotPullContainerError: Error response from daemon: pull access denied for xxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/myrust, repository does not exist or may require 'docker login': denied: User: CodeBuild
第二次出现POST_BUILD
预期错误,即测试失败
COMMAND_EXECUTION_ERROR: Error while executing command: cargo test. Reason: exit status 101
第三次成功build
此外,在选择build角色的时候,可以选择两个不同的角色
这两个角色的区别在于一个是自动创建的servicerole,另一个是该项目的servicerole
测试过程中使用默认servicerole,即使权限足够也会出现以下报错
BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE: Unable to pull customer's container image. CannotPullContainerError: Error response from daemon: pull access denied for 037047667284.dkr.ecr.cn-north-1.amazonaws.com.cn/myrust, repository does not exist or may require 'docker login': denied: User: CodeBuild
codebuild本地构建
https://docs.aws.amazon.com/codebuild/latest/userguide/use-codebuild-agent.html
本地构建意味着虽然codebuild项目仍旧在aws环境中托管,但是实际的构建环境转移到本地
先决条件
- 安装git和docker
- 安装codebuild代理
设置build的环境镜像,可以直接使用托管的ecr或手动按需build,构建环境中支持的命令和环境可以参考dockerbuild内容
aws codebuild doceker image
codebuild托管的构建环境镜像有以下
- standard 4.0
- standard 5.0
- standard 6.0
- amazonlinux2-x86_64-standard:3.0
- amazonlinux2-x86_64-standard:4.0
- amazonlinux2-aarch64-standard:1.0
- amazonlinux2-aarch64-standard:2.0
docker pull public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:3.0
下载codebuild代理image(x86_64 版本),之后使用构建脚本启动,该代理为构建脚本的默认代理,如果没有会自动下载
docker pull public.ecr.aws/codebuild/local-builds:latest
下载构建脚本
构建脚本的具体内容,https://github.com/aws/aws-codebuild-docker-images/blob/master/local_builds/codebuild_build.sh
$ curl -O https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh
$ chmod +x codebuild_build.sh
$ ./codebuild_build.sh
The image name flag (-i) must be included for a build to run
The artifact directory (-a) must be included for a build to run
# -i 指定build的image环境
# -a 指定构建的输出目录
# -s 需要构建项目目录,默认为当前目录
# -l 覆盖默认的代理镜像
在本地新建maven项目并创建buildspec.yml
version: 0.2phases:install:runtime-versions:java: corretto8pre_build:commands:- echo Initializing environmentbuild:commands:- echo Build started on `date`- mvn compilepost_build:commands:- echo Build completed on `date`- mvn package
artifacts:files:- appspec.yml- scripts/**/*- target/unicorn-web-project.wardiscard-paths: no
开始构建
./codebuild_build.sh -i public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:3.0 -a artificats
构建输出如下
docker run -it -v /var/run/docker.sock:/var/run/docker.sock -e "IMAGE_NAME=public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:3.0" -e "ARTIFACTS=/home/ec2-user/efs/test-build-javaweb/artificats" -e "SOURCE=/home/ec2-user/efs/test-build-javaweb" -e "INITIATOR=ec2-user" public.ecr.aws/codebuild/local-builds:latestRemoving network agent-resources_default
Removing volume agent-resources_source_volume
Removing volume agent-resources_user_volume
Creating network "agent-resources_default" with the default driver
Creating volume "agent-resources_source_volume" with local driver
Creating volume "agent-resources_user_volume" with local driver
Pulling agent (amazon/aws-codebuild-local:latest)...
latest: Pulling from amazon/aws-codebuild-local
Pulling build (public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:3.0)...
3.0: Pulling from codebuild/amazonlinux2-x86_64-standard
Creating agent-resources_agent_1 ... done
Creating agent-resources_build_1 ... done
Attaching to agent-resources_agent_1, agent-resources_build_1
agent_1 | [Container] 2023/02/17 06:09:22 Waiting for agent ping
agent_1 | [Container] 2023/02/17 06:09:22 Waiting for DOWNLOAD_SOURCE
agent_1 | [Container] 2023/02/17 06:09:24 Phase is DOWNLOAD_SOURCE
agent_1 | [Container] 2023/02/17 06:09:24 CODEBUILD_SRC_DIR=/codebuild/output/src116956819/src
agent_1 | [Container] 2023/02/17 06:09:24 yamlDoc
agent_1 | [Container] 2023/02/17 06:09:24 YAML location is /codebuild/output/srcDownload/src/buildspec.yml
agent_1 | [Container] 2023/02/17 06:09:24 No commands found for phase name: install
agent_1 | [Container] 2023/02/17 06:09:24 Processing environment variables
agent_1 | [Container] 2023/02/17 06:09:24 Running command echo "Installing corretto(OpenJDK) version 8 ..."
相关文章:

aws codebuild 自定义构建环境和本地构建
参考资料 Extending AWS CodeBuild with Custom Build Environments Docker in custom image sample for CodeBuild codebuild自定义构建环境 在创建codebuild项目的时候发现 构建环境是 Docker 映像,其中包含构建和测试项目所需的所有内容的完整文件系统 用ru…...

3年功能3年自动化,从8k到23k的学习过程
简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少)其中成功的有4家&…...

leaflet: 数据聚合,显示当前bounds区域中的点的名称列表(078)
第078个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中实现数据聚合的功能 ,左边列出右边可视区域内的marker的名称。这里主要用到了可视区域的范围以及contains函数。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方…...

XXL-JOB分布式任务调度框架(一)-基础入门
文章目录1.什么是任务调度2.常见定时任务方案2.1. 传统定时任务方案示例2.2. 缺点分析3.什么是分布式任务调度?3.1. 并行任务调度3.2. 高可用3.3. 弹性扩容3.4. 任务管理与监测4.市面上常见的分布式任务调度产品5.初识xxl-job6.xxl-job架构设计6.1.设计思想6.2.架构…...
基于CentOS 7 搭建Redis 7集群
我们的目标是使用2台(多台服务器类似)服务器搭建一个3主3从的redis集群。 我们为什么要使用redis 7呢?因为6、7的版本都做了大量优化,比如6引入了多线程(一些JAVA八股文面试还喜欢问redis为什么是单线程)&…...

Lesson5.3---Python 之 NumPy 统计函数、数据类型和文件操作
一、统计函数 NumPy 能方便地求出统计学常见的描述性统计量。最开始呢,我们还是先导入 numpy。 import numpy as np1. 求平均值 mean() mean() 是默认求出数组内所有元素的平均值。我们使用 np.arange(20).reshape((4,5)) 生成一个初始值默认为 0,终止…...

Puppeteer 爬虫学习
puppeteer简介: Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议 控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行, 但是可以通过修改配置文件运行“有头”模式。能作什么?: 生成…...

如何在Power Virtual Agents中实现身份验证
今天我们介绍一下如何通过身份验证的方式来使用Power Virtual Agents。首先进入“Microsoft 365-管理-Azure Active Directory管理中心”。 进入“Azure Active Directory管理中心”后选择“Azure Active Directory”中的“应用注册”-“新注册”。 输入新创建的应用程序名称后…...

金三银四必备软件测试必问面试题
初级软件测试必问面试题1、你的测试职业发展是什么?测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前 3 年积累测试经验,按如何做好测试工程…...

Java反序列化漏洞——CommonsCollections6链分析
一、前因因为在jdk8u71之后的版本中,sun.reflect.annotation.AnnotationInvocationHandler#readObject的逻辑发生了变化,导致CC1中的两个链条都不能使用,所有我们需要找一个在高版本中也可用的链条。/* Gadget chain: java.io.ObjectInputStr…...

Selenium浏览器自动化测试框架
Selenium浏览器自动化测试框架 目录:导读 1、selenium简介 介绍 功能 优势 2、基本使用 3、获取单节点 4、获取多节点 5、节点交互 6、动作链 7、执行JavaScript代码 8、获取节点信息 9、切换frame 10、延时等待 11、前进和后退 12、cookies 13、选…...

Hashmap链表长度大于8真的会变成红黑树吗?
1、本人博客《HashMap、HashSet底层原理分析》 2、本人博客《若debug时显示的Hashmap没有table、size等元素时,查看第19条》 结论 1、链表长度大于8时(插入第9条时),会触发树化(treeifyBin)方法,但是不一定会树化,若数组大小小于…...
关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮地
除了正确进行接地设计、安装,还要正确进行各种不同信号的接地处理。控制系统中,大致有以下几种地线: (1)数字地:也叫逻辑地,是各种开关量(数字量)信号的零电位。 (2&am…...

排序
一、数据流中的中位数题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。…...

Android DataStore Proto存储接入流程详解与使用
一、介绍 通过前面的文字,我们已掌握了DataStore 的存储,但是留下一个尾巴,那就是Proto的接入。 Proto是什么? Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数据通讯等场景&a…...

HiEV洞察 | 卖一台亏半台,激光雷达第一股禾赛隐忧仍在
作者 | 感知君Alex 编辑 | 王博2月9日晚,禾赛在万众瞩目下登陆纳斯达克,发行价19美元每股,首日涨超11%,市值超过Luminar,登顶全球市值最高的激光雷达公司。 随后两个交易日,其股价均有不同程度的涨幅&#…...

面试题61. 扑克牌中的顺子
题目 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视…...

有特别有创意的网站设计案例
有人说 UI 设计师集艺术性与科学性于一身,不仅需要对工具的使用熟练,更需要对美术艺术有一定的基础了解。如果想要成为优秀的 UI 设计师是一个需要磨砺的过程,需要不断的学习和积累,多看多练多感受,其中对于优质的设计…...
Python基础-数据类型之列表
一、列表的定义 name ["小明", "小红", "笑笑"] 二、列表的使用 除了序列中的操作,列表还有一些其他的操作。 (1)不使用列表方法对列表进行修改 1:通过索引修改列表中的值 name ["Kit…...

Linux系统基本设置:网络设置(三种界面网络地址配置)
网络地址配置:图形界面配置、命令行界面配置、文本图形界面配置 命令行界面配置 查看网络命令: 想要知道你有多少网卡,都可以通过这两个命令来查看 手动设置网络参数,我们可以使用nmcli这个命令来设置,我们需要知道…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...