Jenkins 持续集成国产嵌入式操作系统 RT-Thread 的CI

48c4f1d19a8343675b92eb23a9a09591.png

    我们直接在Jenkins的镜像基础上进行集成RT-Thread 的编译环境, 这样直接使用Shell 命令 最直接了当, 通过 第三方docker等插件, 尝试了计重方案, 没有找到理想中的感觉, 如果其他人有想法可以告知一二。 

我们有现成的镜像, 在文尾会贴出, 但步骤, 我们先讲述一下。

首先 我们建立一个dockerfile , 基于jenkins/jenkins 并将用户设置为root

FROM jenkins/jenkins
USER root
LABEL author maikebing <mysticboy@live.com>
ENV DEBIAN_FRONTEND noninteractive

第二补 , 安装交叉编译环境 以及python , python 不能是 3.x的, 这点务必确保。 同事 git  cppcheck 也需要要。 

RUN apt-get update -y &&  \apt-get  install git  scons  wget bzip2 \build-essential  libncurses-dev  cppcheck   \gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi  qemu-system-arm  python -y &&  \apt-get clean -y

试过多种方案, 都无法正常的使用apt 安装 2.7 的pip , 纠结了半个星期, 可以用下面的方式安装。 

RUN   curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py && python2 get-pip.py &&  \pip install requests && rm get-pip.py

这一步就是是安装交叉编译环境。 

RUN cd /tmp/ &&  wget -q https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/6-2016q4/gcc-arm-none-eabi-6_2-2016q4-20161216-linux.tar.bz2 && \tar xf ./gcc-arm-none-eabi-6_2-2016q4-20161216-linux.tar.bz2 && \mv gcc-arm-none-eabi-6_2-2016q4/ /opt/ && \rm ./gcc-arm-none-eabi-6_2-2016q4-20161216-linux.tar.bz2 && \/opt/gcc-arm-none-eabi-6_2-2016q4/bin/arm-none-eabi-gcc --version 
ENV RTT_EXEC_PATH /opt/gcc-arm-none-eabi-6_2-2016q4/bin/

  stm32刷机程序, 你可以不安装。 

RUN git clone https://git.code.sf.net/p/stm32flash/code stm32flash-code && \cd /stm32flash-code && make && mv stm32flash /usr/bin/  && \cd / && rm /stm32flash-code  -rf && \stm32flash -h

  这里是安装rt-thread的基本环境, evn很烦人, 必须是 %HOME目录下,而且写死的。 其实跟jenkins 的 home目录映射到外面。所以, 我们只能 吧env放在跟目录下。 

RUN git clone https://gitee.com/RT-Thread-Mirror/env.git  /env/tools/scripts && \git clone https://gitee.com/RT-Thread-Mirror/packages.git  /env/packages/packages 
RUN  sed -i -e 's/CONFIG_SYS_PKGS_DOWNLOAD_ACCELERATE=y/CONFIG_SYS_PKGS_DOWNLOAD_ACCELERATE=n/g'  /env/tools/scripts/cmds/.config    
ENV  PATH=$PATH:/env/tools/scripts

用户继续改为 jenkins

USER jenkins

构成镜像后, 

下面是docker-compose 的配置信息, 我们构建成功的镜像是 maikebing/rt-thread_linux_env:jenkinsci 

jenkins:container_name: jenkinshostname: jenkinsrestart: alwaysimage:  maikebing/rt-thread_linux_env:jenkinscienvironment:TZ: "Asia/Shanghai"AVA_OPTS: "-Xmx3g -Xms2G"ports:- "9095:8080"- "50000:50000"volumes:- ./data/jenkins:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.sock

 由于jenkins的默认用户home目录是 挂载在外面的, 所以, 每次我们第一个Build Step 要重新连接,并链接env工具路径,并加入路径当中, 最大的原因其实是rt-thread 的 env 工具 写死了 home路径, 而不是某个安装路径。 

rm $HOME/.env
ln  /env $HOME/.env  -s
export PATH=$PATH:$HOME/.env/tools/scripts
ls /var/jenkins_home/.env/tools/scripts

d0eef4b29d968b3ad4072f70deaa9b97.png

第二个Build Step

pkgs --update

edf111f25669bee90e34c01bf0839695.png

第三Build Step 

scons --target=mdk5

423539da09be70241799d21e84f16977.png

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

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

相关文章

codevs原创抄袭题 5960 信使

题目描述 Description•战争时期&#xff0c;前线有n个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;这是要花费一定时间的&#xff08;以天为单位&#xff09;。指挥部设在第一个哨所。当指挥部下达…

VC解析XML--使用CMarkup类解析XML

经过今天尝试MFC解析XML串&#xff0c;也算有了不少收获&#xff0c;总结一下。 我是使用的CMarkup类对XML进行操作。 CMarkup好象都是先从一个xml文件里面把内容读出来&#xff0c;再进行解析&#xff0c;搞得我恨不得要把我的CString写到xml文件里面…

MongoDB精华总结

概述 MongoDB是属于文档型的NoSQL数据库&#xff0c;也就是文档数据库。文档数据库区别于传统的其它数据库&#xff0c;它是用来管理文档。在传统的数据库中&#xff0c;信息被分割成离散的数据段&#xff0c;而在文档数据库中&#xff0c;文档是处理信息的基本单位&#xff0c…

认清性能问题

本文翻译自 Thinking Clearly About Performance 这是我三年前读到的一篇关于性能问题的好文&#xff0c;读完后还觉不过瘾&#xff0c;怕理解的不够遂又翻译了一遍&#xff0c;这也是当年我的第一次翻译。 这几年来每次碰到性能问题&#xff0c;我都会想起这篇文章&#xff0c…

字节也开始缩招了...

阅读本文大概需要6分钟。最近和一个字节技术总监聊天&#xff0c;得知他们公司居然也开始缩招了。这真让人感到意外&#xff0c;毕竟头条这些年是以极速扩张而闻名。搜了搜新闻还真是&#xff0c;这也意味着互联网行业最后一个坚挺的大户也在开源节流了。最近互联网行业的情况真…

实现打字效果

摘自一个表白网站的效果。 方法&#xff1a; substr() 可在字符串中抽取从 第一个参数表示从指定的下标&#xff0c;第二个参数表示抽取指定数目的字符。 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置&#xff0c;两个参数&#xff0c;第一位指定的字符串&…

php优化-》常用到的部分优化

1.循环内部尽可能不要声明变量&#xff1b; 2.在可以用PHP内部字符串操作函数的情况下&#xff0c;尽量不要用正则表达式&#xff1b; 3.foreach效率更高&#xff0c;尽量用foreach代替while和for循环&#xff1b; 4.用单引号替代双引号引用字符串&#xff1b; 5.尽量的少进行文…

简述:分布式CAP理论和BASE理论

目录 一、什么是CAP&#xff1f; Consistency (一致性)&#xff1a; Availability (可用性): Partition Tolerance (分区容错性): 二、取舍策略 三、Base理论 1、基本可用 2、软状态 3、最终一致性 四、常见产品 Ereka Zookeeper 五、总结 一、什么是CAP&#xf…

WinForm(四)一种实现登录的方式

首先声明&#xff0c;这只是一种登录方式&#xff0c;并不是最好的方式&#xff0c;用这个例子为了说明登录窗体和Application的关系。在登录前&#xff0c;定义了用户实体&#xff0c;然后是一个通用的类&#xff0c;存放进程中当前登录的用户&#xff0c;所以CurrentUser是静…

Java多线程4:synchronized锁机制

脏读 一个常见的概念。在多线程中&#xff0c;难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况&#xff0c;如果不做正确的同步处理&#xff0c;那么产生的后果就是"脏读"&#xff0c;也就是取到的数据其实是被更改过的。 按照正常来看应该打印&quo…

mysql 日期时间类型 自动转型 及 运算

日期时间类型自动转型 -- now()、字符串、数字转datetime类型 create table t(dt datetime);insert into t values(now());insert into t values(2007-9-3 12:10:10);insert into t values(2007/9/3 121010);insert into t values(2007#9#3 121010);insert into t values(20079…

.NET Community Toolkit 8.0.0 版本发布

.NET 社区工具包&#xff08;.NET Community Toolkit &#xff09;现已发布 8.0.0 版&#xff01;.NET 社区工具包是一组适用于所有 .NET 开发人员&#xff0c;且与任何特定 UI 平台无关的帮助程序和 API。该工具包由 Microsoft 维护和发布&#xff0c;是 .NET 基金会的一部分&…

SpringData JPA、Hibernate、Mybatis三者的区别

目录 1.ORM 考虑 SpringData JPA Hibernate MyBatis 2.业务查询的区别 Spring Data JPA Hibernate Mybatis 3.可拓展性 Spring Data JPA Hibernate Mybatis 4.对缓存 Spring Data JPA Hibernate Mybatis 5.难度性 Spring Data JPA Hibernate Mybatis 总述…

1、内存

程序为什么需要内存 程序运行的目的&#xff1a;程序运行是为了得到一定的结果&#xff0c;程序运行其实是在做一系列的数据计算&#xff0c;所以&#xff1a;程序代码数据&#xff1b;程序运行的目的不外乎2个&#xff1a;过程、结果&#xff1b; 用函数来类比&#xff1a;…

Map 遍历取值及jstl的取值

Map 遍历取值及jstl的取值 学习了&#xff1a;http://blog.csdn.net/yanjiaye520/article/details/17354239 1、Java map的便利取值 Java代码 收藏代码 Map<String,String> map new HashMap<String,String>(); map.put("key1", "value1");…

基于CAP组件实现补偿事务与幂等性保障

【.NET Core】| 总结/Edison Zhou1补偿事务和幂等性在微服务架构下&#xff0c;我们会采用异步通信来对各个微服务进行解耦&#xff0c;从而我们会用到消息中间件来传递各个消息。 补偿事务某些情况下&#xff0c;消费者需要返回值以告诉发布者执行结果&#xff0c;以便于发布者…

Docker与k8s

前言 随着k8s 作为容器编排解决方案变得越来越流行&#xff0c;有些人开始拿 Docker 和 k8s进行对比&#xff0c;不禁问道&#xff1a;Docker 不香吗&#xff1f; k8s 是kubernets的缩写&#xff0c;’8‘代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手&#xff…

Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

2019独角兽企业重金招聘Python工程师标准>>> 一、错误信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav…

Redis安装[Windows]

一. redis下载地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根据需要的下载对应版本*.zip即可.(我这里是win7x64) 二.使用 1. 下载之后解压到你相应的目录下: 1 文件介绍&#xff1a; 2 redis-benchmark.exe #基准测试 3 redis-check-aof.e…

简练软考知识点整理-项目启动过程组

启动过程组包含定义一个新项目或现有项目的一个新阶段&#xff0c;授权开始该项目或阶段的一组过程。在启动过程中&#xff0c;定义初步范围和落实初步财务资源&#xff0c;识别那些将相互作用并影响项目总体结果的内外部干系人&#xff0c;选定项目经理&#xff08;如果尚未安…