写在前面

  写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器。服务器上搭建了 Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署 环境后牺牲了大部分性能。造成了一个基于angular编写的前端应用无法自动构建,构建时一直出错,通过错误信息各种搜索并无任何结果。经过反反复复的的试验,用一台1核1G的Debain虚拟机去手动构建并成功,最后经过排查,确定是因为基于Java运行时的Jenkins对内存造成了一个巨大的占用。无奈之举,因为穷,导致不能升级服务器,但又想享受自动构建带来的快感,只好另辟蹊径,将Jenkins这个自动化构建和部署服务进行边缘化,以便去享受自动化构建和部署带来的快感。本文章考虑篇幅问题分为上下两篇。

先决条件

一块根据教程安装Debain系统的树莓派2B+ (低于2B+型号的树莓派性能没经过试验,读者可以尝试)

树莓派安装Docker CE

  本文已根据教程安装Debain系统,接下来安装的Docker的操作过程都是基于Debain系统,若读者的树莓派安装的是其他版本的系统,可另阅读Docker官方提供的安装操作说明,本文就不提供其他系统版本的操作步骤了。

设置Docker源仓库

1.更新 apt 包索引:

$ sudo apt-get update

2.安装包

$ sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common

3.添加Docker的官方GPG密钥:

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88

4.设置稳定的Docker源仓库

$ echo "deb [arch=armhf] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list

安装Docker CE

1.更新 apt 包索引:

$ sudo apt-get update

2.安装最新版本的Docker CE

$ sudo apt-get install docker-ce

3.运行Hello World 测试

$ sudo docker run armhf/hello-world

构建镜像

  因为树莓派本身的CPU架构是ARM,博客园存在大量基于docker搭建Jenkins环境的教程,所依赖官方的镜像都是基于x86架构的CPU构建的,所以我们需要重新根据ARM架构的CPU去构建一个可以运行的Jenkins镜像。并通过通过二次自定义构建的方式,修改镜像本身的配置信息。

  Jenkins官方在Docker Hub上面的镜像是没有ARM版本的,如果直接使用官方在Dokcer Hub上的镜像直接自定义构建会出现错误。笔者在GitHub上找到一个Jenkins for Docker on Raspberry Pi的项目,里面包含构建Jenkins的Dockerfile。经过笔者的反复验证,排除网路环境,设备原因,确信这个项目的Dockerfile是存在问题的。笔者到这里曾经想过放弃,但是既然都这么穷,又没有钱买新的云服务,只好继续硬着头皮往下研究出现错误的原因。最后经过不断的试验,成功解决了这个问题,随后笔者Fork这个项目修复问题并提交到GitHub。如果真正尝试构建ARM版本失败的读者,看了这篇文章之后,就少走弯路了。项目GitHub地址:https://github.com/Loongle/rpi-jenkins

构建Jenkins ARM镜像

1.克隆GitHub项目:

$ git clone https://github.com/Loongle/rpi-jenkins

2.进入项目并开始构建:

$ cd rpi-jenkins
$ sudo docker build . -t jenkins

3.读者可以忽略此步骤,直接到构建自定义镜像的操作。

构建自定义镜像

  单纯的直接构建Jenkins并不能符合本文的主题,现在我们需要通过自定义Dockerfile来扩充我们原本的Jenkins环境设置。当然,如果直接修改笔者GitHub项目里的Dockerfile进行构建,那么这一步也是可以忽略的。见仁见智,看读者喜欢怎么方便怎么来,喜欢怎么折腾就怎么折腾,此处构建没有固定的操作方式,只要能确保树莓派能运行Jenkins就Ok啦。

1.新建Dockerfile:

$ cd ~
$ sudo nano Dockerfile

2.查看docker组id:

cat /etc/group

3.在Dockerfile插入如下代码后,执行保存:

FROM jenkins  # 可将jenkins 替换 loongle/rpi-jenkins:latest 以解决自己构建Jenkins镜像速度慢的问题
USER root ARG dockerGid=996 # 填写/etc/group查到的id

#切换阿里云加速
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo '' > /etc/apt/sources.list \
&& echo '' > /etc/apt/raspi.list \
&& echo "deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free rpi" > /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free rpi" >> /etc/apt/sources.list \
&& echo "deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ jessie main" >> /etc/apt/sources.list.d/raspi.list

#安装依赖关系
RUN apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common

#安装docker-compose
RUN wget https://bootstrap.pypa.io/get-pip.py \
&& python get-pip.py \
&& pip install docker-compose RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group #修改时区
RUN rm -rf /etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone USER jenkins

4.自定义Dockerfile执行构建:

$ sudo docker build . -t auto-jenkins

5.等待构建完成后,启动 Jenkins 即可:

$ sudo docker run --name=jenkins --restart=always --add-host master:192.168.6.200 -p : -p : -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/bin/docker -v /var/jenkins_home:/usr/local/jenkins/ -d auto-jenkins

写在后面

  至此,我们已经成功在树莓派上运行 Jenkins ,笔者将在下一篇中讲述从树莓派上的Jenkins构建项目并发布到云服务器上的Docker环境中。希望正在屏幕上阅读本文的你,能顺利在树莓派上运行你的Jenkins 环境。构建途中出现任何疑问,欢迎在评论区中留言。

参考文献

https://docs.docker.com/install/linux/docker-ce/debian/

https://github.com/Loongle/rpi-jenkins

边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(上)的更多相关文章

  1. 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(下)

    写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...

  2. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

  3. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战

    1.前言与初衷 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用. 本文章会涉及结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲. 本文章主要讲述Docker.Jen ...

  4. GeneXus DevOps 自动化构建和部署流程

    以下视频详细介绍了GeneXus DevOps自动化构建和部署流程,包括通过MS Bulid来管理自动化流程,自动化的架构,以及在GeneXus Server上使用Jenkins做为自动化引擎. 视频 ...

  5. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  6. Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署

    写在前面 Docker一直很火热,一直想把原本的Jenkins自动部署工具搬到Docker上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了dotnet core 2.0 的正式发布,升级 ...

  7. Docker搭建Jenkins+Maven/Gradle——代码自动化运维部署平台(二)

    一.简介 1.Jenkins 概述: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins ...

  8. 使用Docker搭建Django,Nginx,R,Python部署环境

    转载自https://blog.csdn.net/The_One_is_all/article/details/76063968 基本环境: Ubuntu 16.10 docker 17.06.0-c ...

  9. 前端自动化构建工具——gulp环境搭建教程

    gulp是前端工程化的工具,它可以对html,css,js等代码和图片进行压缩,也可以对sass和less等预处理语言进行编译,代码部署.gulp学起来简单,用起来方便,大大提高我们工作效率. 这里可 ...

随机推荐

  1. 213. House Robber II 首尾相同的偷窃问题

    [抄题]: You are a professional robber planning to rob houses along a street. Each house has a certain ...

  2. 基于springboot的restful接口的单元测试示例

    一.知识点 代码中对应的知识点 1.jsonPath github网址 1)操作符见文档 2)方法见文档 3)例子见文档 2.MockMvc(org.springframework.test.web. ...

  3. [SoapUI] 在SoapUI中,设置开关批量保存整个Response,作为期望结果进行校验

    //获取保存response的文件路径和名称 def testSuiteName = context.testCase.testSuite.name def testCaseName = contex ...

  4. SPARK安装三:SPARK集群部署

    使用2.3.0版本,因为公司生产环境是这个版本 一.下载安装 cd /opt wget https://archive.apache.org/dist/spark/spark-2.3.0/spark- ...

  5. FTP服务与配置

    FTP简介 网络文件共享服务主流的主要有三种,分别是ftp.nfs.samba. FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输 ...

  6. .Net 常用插件及第三方库

    .Net 常用插件及第三方库 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址: ...

  7. 【轻松前端之旅】HTML的块元素、行内元素和空元素

    块(block)元素 显示成一块,前后有换行.块元素常用于web页面的主要构造模块.例如:<div>,<p>,<h1>~<h6>,<blockqu ...

  8. MFC设置单文档保存格式以及标题

    在使用MFC编写单文档程序时,有时候需要将编辑的内容序列化为文件,使该文件可以直接以自己的程序打开,这时候需要在保存时将文件后缀改为我们想要的格式. 步骤 打开String Table,找到IDR_M ...

  9. cp备份操作时如何忽略指定的目录

    需求场景:进行CP拷贝备份的时候,子目录里面的某些大文件或是一些log文件是无需备份的,那么在CP操作时需要忽略掉指定的目录. 案例演示如下:备份data目录,但是不包括里面的share子目录. 先看 ...

  10. SpringMVC+JQuery实现头像编辑器

    一.简单说明 本头像编辑器主要实现了图片的上传.显示(不溢出父窗口).旋转.裁剪功能! 图片的上传用到的是异步上传,页面不进行刷新,原理是通过JQuery的异步提交+SpringMVC的上传 上传完毕 ...