? ? 我們直接在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
第二個Build Step
pkgs --update
第三Build Step?
scons --target=mdk5