Clay 的技术空间

用进废退 | 艺不压身

前言

通过 Apache、Subversion 搭建 SVN 服务器,实现使用 HTTP、SVN 协议访问 SVN 仓库,并进行细粒度的权限控制,本教程适用于 Debian/Ubuntu 系统。

系统环境

1
2
3
4
5
6
7
8
# uname -a
# Linux debian 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 GNU/Linux

# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"

安装软件

1
2
3
4
5
6
7
8
9
10
11
# 更新软件索引
# apt-get update

# 安装apache
# apt-get install -y apache2 apache2-utils

# 安装subversion,适用于debian
# apt-get install -y subversion subversion-tools libapache2-mod-svn

# 安装subversion,适用于ubuntu
# apt-get install -y subversion subversion-tools libapache2-mod-svn libapache2-svn
阅读全文 »

上篇:Jenkins 入门教程之二 Jenkins 与 SVN 搭建 CI-CD 环境

下面的实战内容是在上篇内容的基础上进行操作的,为了保证连贯性,建议先将上篇的操作步骤执行完再阅读本篇内容。

通过 Eclipse 创建基于 Maven 的 SpringBoot Web 项目,用于测试 Maven 构建项目

创建 Maven 项目的时候,Archetype 选择”maven-archetype-quickstart”,此 SpringBoot Web 项目不需要 web.xml,只需在 pom.xml 配置文件里指定 packaging 为 war 类型即可。项目内容很简单,访问 JSP 页面直接输出字符串 “hello Jim”。项目源码下载链接已经给出,下载解压后直接导入项目到 Eclipse,执行”spring-boot:run” 命令即可运行项目,浏览器输入以下地址验证是否运行正常:http://127.0.0.1:8080/demo/hello点击下载完整的代码点击下载 SHA256 校验文件

阅读全文 »

系统环境

1
2
CentOS Linux release 7.6.1810 (Core)
Linux centos7.6 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

GIMP 安装

GIMP 算得上是 Linux 系统下的 Photoshop,基于 GTK 编写的图像编辑处理软件,功能非常强大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装EPEL源
# yum install epel-release

# 查看源
# ls /etc/yum.repos.d/

# 更新源
# yum clean all && yum makecache

# 安装基础依赖包
# yum install aalib aalib-devel libexif-devel libjpeg-devel libpng-devel

# 安装GIMP
# yum install gimp
阅读全文 »

主流的云计算平台

  • OpenStack

    • 开源 IaaS 云平台,由 OpenInfra Foundation 主导
    • 组件化架构(Nova、Neutron、Cinder、Swift 等)
    • 支持私有云、公有云和混合云
    • 社区活跃、生态丰富,但部署和运维复杂
  • CloudStack

    • 开源 IaaS 平台,最初由 VMware 贡献给 Apache
    • 项目隶属于 Apache Software Foundation
    • 架构相对简单,易于部署和管理
    • 适合中小规模云环境
  • Eucalyptus

    • 开源私有云平台,兼容 Amazon Web Services(AWS)API
    • 支持 EC2、S3 等接口
    • 早期较流行,现在使用较少
    • 适合构建与 AWS 兼容的私有云
  • vCloud Director

    • VMware 提供的企业级云管理平台,属于商业闭源软件(需要授权许可)
    • 基于 VMware 虚拟化生态(vSphere、NSX 等)
    • 强调多租户管理和资源隔离
    • 适合企业级私有云和服务提供商云平台
阅读全文 »

Docker 四大网络模式

桥接模式、主机模式、容器模式、无网络模式

Docker 四大网络模式之一(bridge)

该模式是 Docker 的默认设置,Docker 守护进程创建了一个虚拟以太网桥 docker0,附加在其上的任何网卡之间都能自动转发数据包。默认情况下,守护进程会创建一对对等接口,将其中一个接口设置为容器的 eth0 接口,另一个接口放置在宿主机的命名空间中,从而将宿主机上的所有容器都连接到这个内部网络上。守护进程还会从网桥的私有地址空间中分配一个 IP 地址和子网给该容器。注意启动容器的时候需要指定 - p(固定端口分配) 或者 -P(动态端口分配)参数来暴露端口,否则 IP 数据包就不能从宿主机之外路由到容器中。

1
2
3
4
5
6
7
8
9
10
11
# docker run -d -p 8888:8080 --net=bridge --name=tomcat8 tomcat:8

# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
223e6aee4801 tomcat:8 "catalina.sh run" 23 seconds ago Up 21 seconds 0.0.0.0:8888->8080/tcp tomcat8

# 查看宿主机的虚拟网桥列表
# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242e6d2901f no veth3074090

阅读全文 »

虚拟机与容器底层实现的对比

vm-vs-docker

虚拟机与容器的底层实现原理是不同的,正如上图片的对比。虚拟机实现资源隔离的方法是利用一个独立的 Guest OS,并利用 Hypervisor 虚拟化 CPU、内存、IO 设备等实现的。例如,为了虚拟化内存,Hypervisor 会创建一个 shadow page table,正常情况下,一个 page table 可以用来实现从虚拟内存到物理内存的翻译。相比虚拟机实现资源和环境隔离的方案,Docker 就显得简练很多,它不像虚拟机一样重新加载一个操作系统内核,引导、加载操作系统内核是一个比较耗时而又消耗资源的过程,Docker 是利用 Linux 内核特性(LXC)实现的隔离,运行容器的速度几乎等同于直接启动进程。

阅读全文 »

前言

本教程实战演示基于 SVN + Jenkins + Maven + JDK + Docker 搭建 CI/CD 环境,其中 SVN 基于 Debian 镜像手动安装,而 Jenkins、Maven、JDK 则基于 Tomcat 镜像手动安装。如果仅为了快速体验使用 Jenkins 的功能,可以直接 Pull Jenkins 官方的 Docker 镜像,然后创建并启动 Docker 容器来体验 Jenkins 相关功能,此时可忽略下面教程中的大部分操作步骤。

Docker 环境安装与配置

基于 Docker 搭建 SVN 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 拉取Debian镜像
# docker pull debian

# 创建并启动容器,80是Apache端口,3690是Subversion端口,/var/lib/svn是所有SVN仓库的父目录
# docker run -it -p 9126:80 -p 4690:3690 --name svn-httpd \
-v /container/svn-server:/var/lib/svn \
-d debian

# 连接容器
# docker exec -it svn-httpd /bin/bash

# 修改系统时间
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 参考上面给出的本站教程,使用Apache、Subversion搭建SVN服务器

# 断开容器连接,不停止运行容器
# ctrl + p + q

# 最后如果Subversion容器能正常工作,建议执行commit操作生成Docker备份镜像
# docker commit -a "clay@gmail.com" -m "commit jenkins-svn-httpd image" svn-httpd clay/jenkins-svn-httpd:1.0
阅读全文 »

Jenkins 相关站点

Jenkins 与 Hundson 介绍

Jenkins 与 Hundson 是目前最流行的持续集成及自动化部署工具,基于 Java 语言开发,二者师出同门。2009 年甲骨文收购了 Sun 公司并继承了 Hudson 代码库。在 2011 年年初,甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的项目 Jenkins 和 Hundson。其中 Jenkins 的团队由大部分原始开发人员组成,Hudson 则由甲骨文公司继续管理,所以二者是非常相似的产品。Jenkins 可以整合 Subversion、Git、GitHub 等,而 Husband 同样也可以。其他优秀的持续集成工具还有 Strider、GitLab CI、TeamCity(JetBrains)、Travis CI、Codeship、Codefresh 等。

持续集成介绍

  • 问题:各个小组分别负责各个具体模块开发,本模块独立测试虽然能够通过,但是上线前夕将所有模块整合到一起集成测试却发现存在很多问题,想要解决就需要把很多代码返工重写而且仍然有可能有问题,但现在时间很可能不够了。那怎么做会好一些呢?
  • 概念:Continuous Integration(CI)持续集成指开发人员提交了新代码之后,立刻进行构建、自动化测试。根据测试结果,确定所有模块的代码是否能正确地集成在一起;如果失败,开发团队就要停下手中的工作立即修复它。Martin Fowler 说过:” 持续集成并不能消除 Bug,而是让它们非常容易发现和改正。”
  • 关注点:持续集成的关注点在于尽早发现项目整体运行存在的问题,并尽早解决。
阅读全文 »

前言

谈及 Docker,避免不了需要熟练地记住许多命令及其用法。对于熟悉 Shell 的技术开发人员而言,命令行操作相对容易,熟练之后,命令行便于操作及脚本化。然而,对于对命令行不熟悉的非技术人员来说,进行 Docker 的部署和管理可能会感到困难,学习成本较高。市面上有多种可视化管理工具,各有优缺点。以下是对 DockerUI、Shipyard、Rancher、Portainer 进行简单对比。

DockerUI

  • 优点:

    • 支持容器的批量操作。
    • 支持镜像管理(功能相对薄弱)。
  • 缺点:

    • 不支持多主机、多环境。
    • 管理平台无登录认证机制。
  • 结论:

    • 由于 Web 管理平台缺乏登录认证机制,考虑到使用过程中人员管理、权限管理等因素,难以长期使用,故不推荐。
    • 项目已停止维护,个人临时使用可以考虑。
阅读全文 »