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;。指挥部设在第一个哨所。当指挥部下达…

MongoDB精华总结

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

认清性能问题

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

简述:分布式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…

.NET Community Toolkit 8.0.0 版本发布

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

1、内存

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

基于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;如果尚未安…

Paxos算法详解

Paxos、Raft分布式一致性算法应用场景一文讲述了分布式一致性问题与分布式一致性算法的典型应用场景。作为分布式一致性代名词的Paxos算法号称是最难理解的算法。本文试图用通俗易懂的语言讲述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗师提出的一种基于消息传递的分…

Teiid:数据虚拟化Data Virtualization平台

2019独角兽企业重金招聘Python工程师标准>>> Teiid介绍 http://teiid.jboss.org/ 数据虚拟化的定义 https://en.wikipedia.org/wiki/Data_virtualization http://www.denodo.com/en/data-virtualization/overview 数据虚拟化的文章 Sick of ETL? Database virtuali…

如何仿造一个websocket请求?

之前两次singnalr、 websocket实时推送相关&#xff1a;• .NET WebSockets 核心原理初体验[1]• SignalR 从开发到生产部署避坑指南[2]tag&#xff1a;浏览器--->nginx--> server其中提到nginx默认不会为客户端转发Upgrade、Connection标头&#xff0c; 因为为了让被代理…

从“互联网+教育”到“教育+互联网”——互联网文化基因视域下的审思

作者信息 朱敬/广西师范大学教育学部教授&#xff0c;教育学博士&#xff0c;博士生导师&#xff1b; 蔡建东/河南大学教育学部教授&#xff0c;教育学博士。 本文摘要 近年来国务院与教育部文件逐渐使用“教育互联网”一词&#xff0c;从“互联网教育”到“教育互联网”&a…

Axure RP使用攻略--动态面板的用途(8)

写了几个Axure教程之后发现&#xff0c;可能教程的起点有些高了&#xff0c;过分的去讲效果的实现&#xff0c;而忽略了axure功能以及基础元件的使用&#xff0c;那么从这个教程开始&#xff0c;把这些逐渐的展开讲解。 关于动态面板 动态面板是axure原型制作中使用非常频繁的一…

ABP 6.0.0-rc.1的新特性

2022-07-26官方发布ABP 6.0.0-rc.1版本&#xff0c;本文挑选了几个新特性进行了介绍&#xff0c;主要包括LeptonX Lite默认主题、OpenIddict模块&#xff0c;以及如何将Identity Server迁移到OpenIddict。据ABP官方公众号介绍&#xff0c;ABP 6.0.0稳定版的计划发布日期为2022-…

Java并发包--线程池框架

转载请注明出处&#xff1a;http://www.cnblogs.com/skywang12345/p/3509903.html 线程池架构图 线程池的架构图如下&#xff1a; 1. Executor 它是"执行者"接口&#xff0c;它是来执行任务的。准确的说&#xff0c;Executor提供了execute()接口来执行已提交的 Runna…