-
Notifications
You must be signed in to change notification settings - Fork 245
Jenkins Cluster in Docker on Aliyun
Jenkins是一个跨平台的持续集成和构建工具,在网上可以找到很多关于该工具的介绍,此处不再赘述。本文则是给出了一个相对简单的示例,介绍了如何在阿里云ECS上使用Docker部署和使用Jenkins集群。读者需要对以下Docker相关内容有一定的理解:
由于国内连接DockerHub很慢且失败概率很高,建议首先通过阿里云开发者平台申请免费加速器,详见国内加速访问Docker相关资源一文。
后面涉及到的加速器地址均用https://<your_mirror_accelerate_address>.mirror.aliyuncs.com代替
使用Docker Machine创建ECS Swarm集群,需要满足如下先决条件:
- 首先,安装配置Docker开发环境,如果是Windows或Mac用户请先安装docker-toolbox(版本要求大于等于1.9)
- 其次,需要拥有阿里云的账号,并创建Access Key ID和Access Key Secret以供Docker Machine使用ECS开放API创建虚机
注意:测试过程中会创建相应的虚拟机,请保证账号余额充足并及时释放虚拟机
创建步骤:
-
基于DockerHub提供的Discovery API创建token,用于集群发现
docker run swarm create
-
配置相关环境变量
export ECS_ACCESS_KEY_ID=<your_access_key_id> export ECS_ACCESS_KEY_SECRET=<your_access_key_secret> export ECS_REGION=cn-beijing # Mirror of docker engine packages export MACHINE_DOCKER_INSTALL_URL=http://docker-mirror.oss-cn-hangzhou.aliyuncs.com/
-
使用
docker-machine
创建Swarm master。由于Jenkins会使用较多内存,默认的ecs.t1.small只有1G内存,运行起来会比较吃力。所以下面创建的机器均使用2G内存的ecs.s1.small实例docker-machine create \ --driver aliyunecs \ --aliyunecs-instance-type=ecs.s1.small \ --swarm \ --swarm-master \ --swarm-discovery=token://<token> \ --engine-opt registry-mirror=https://<your_mirror_accelerate_address>.mirror.aliyuncs.com \ swarm-ecs-master
-
使用
docker-machine
创建两个Swarm nodesdocker-machine create \ --driver aliyunecs \ --aliyunecs-instance-type=ecs.s1.small \ --swarm \ --swarm-discovery=token://<token> \ --engine-opt registry-mirror=https://<your_mirror_accelerate_address>.mirror.aliyuncs.com \ swarm-ecs-node-1 docker-machine create \ --driver aliyunecs \ --aliyunecs-instance-type=ecs.s1.small \ --swarm \ --swarm-discovery=token://<token> \ --engine-opt registry-mirror=https://<your_mirror_accelerate_address>.mirror.aliyuncs.com \ swarm-ecs-node-2
-
确认集群信息
eval $(docker-machine env --swarm swarm-ecs-master) docker info
docker info将返回Swarm集群的信息,确认包含上面创建的三个机器信息
Containers: 4 Images: 3 Role: primary Strategy: spread Filters: health, port, dependency, affinity, constraint Nodes: 3 swarm-ecs-master: 115.29.52.89:2376 └ Containers: 2 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.018 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-32-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=aliyunecs, storagedriver=aufs swarm-ecs-node-1: 139.129.29.70:2376 └ Containers: 1 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.018 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-32-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=aliyunecs, storagedriver=aufs swarm-ecs-node-2: 139.129.29.75:2376 └ Containers: 1 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.018 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-32-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=aliyunecs, storagedriver=aufs CPUs: 3 Total Memory: 3.053 GiB
简单起见,本文直接使用eeacms/jenkins提供的配置和镜像部署Jenkins,如读者在安全和使用上有定制化的需求建议使用自行创建的镜像。部署详细步骤如下:
-
下载eeacms/jenkins,用于部署配置
git clone https://github.com/eea/eea.docker.jenkins.git cd eea.docker.jenkins
由于这里创建的机器资源有限,作为示例这里去掉
docker-compose.yml
配置中master下的postfix(邮件相关),即如下部分:links: - postfix
-
部署Jenkins master和slave
docker-compose up -d master worker
通过
docker ps -a
可以看到上述命令创建的3个容器,如下所示:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eac52ef8834e eeadockerjenkins_data "sh" 26 minutes ago Exited (0) 19 minutes ago swarm-ecs-node-2/eeadockerjenkins_data_1 d74cb435b1f6 eeacms/jenkins:slave "/bin/sh -c /bin/jenk" 3 days ago Up 19 minutes swarm-ecs-node-2/eeadockerjenkins_worker_1 0b8377eb1e58 eeacms/jenkins:master "/usr/local/bin/jenki" 3 days ago Up 19 minutes 139.129.29.75:50000->50000/tcp, 139.129.29.75:80->8080/tcp swarm-ecs-node-2/0b8377eb1e_0b8377eb1e_eeadockerjenkins_master_1
-
初始化Jenkins master配置,确保slave连接到master。
从上面返回的PORTS信息可以看到,这里Jenkins对外暴露的IP:端口为139.129.29.75:80。通过浏览器打开http://139.129.29.75:80,显示页面如下:
点击左侧列表中的“系统管理”,再选择“系统设置”。在显示的配置页面上无需修改,直接点击应用。过一小段时间后,即可看到左侧列表的“构建执行状态”显示为一个master和一个slave,如下所示:
本小节基于前面部署的Jenkins集群,给出了一个简单的自动构建示例,示例将根据触发条件自动从Github上克隆一份HelloWorld代码并编译、运行。配置步骤如下:
-
配置任务
- 首先新建一个任务,选择“构建一个自由风格的软件项目”
- 然后在接下来的详细配置页面配置“源码管理”,选择Git,并设置仓库地址为https://github.com/learnclang/1-helloworld.git
- 选择“构建触发器”为Poll SCM,设置“日程表”为
H/5 * * * *
,表示每5分钟检查一次代码是否有更新,如果有就执行接下来的构建操作 - 增加一个构建步骤,选择“Execute shell”,填写相关编译运行命令
- 保存配置
-
执行任务
完成配置后,等待约5分钟即可看到首次运行的结果(也可以选择手动触发执行任务)
通过Build History进入到任务“#1”的详情,然后点击左侧的“Console Output”,即可看到所有的执行结果