关于Semaphore
Semaphore是Ansible Tower的开源替代产品,提供了前端页面用于管理主机、变量以及运行Playbook,同时也支持API调用。
系统环境
- OS X 10.11.5
- Docker 1.13.0
依赖项
准备MySql
启动MySql
由于Mac系统限制,无法直接访问容器,需要在启动时将容器端口映射到本机。123docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin \--volume=/Users/hellfires/workspace/docker/volumes/mysql:/var/lib/mysql \mysql:5.7新建数据库及用户
12CREATE DATABASE semaphore;GRANT ALL PRIVILEGES ON semaphore.* TO 'semaphore'@'%' IDENTIFIED BY 'abc123';
准备Semaphore镜像
clone项目
1git clone https://github.com/ansible-semaphore/semaphore下载编译好的Semaphore程序包,build时下载不走代理会比较慢
1curl -L https://github.com/ansible-semaphore/semaphore/releases/download/v2.1.0/semaphore_linux_amd64修改Dockerfile
项目本身就包含了Dockerfile,方便我们搭建Docker镜像。简单修改下Dockerfile,增加阿里云alpine镜像,加块build速度12345+RUN echo http://mirrors.aliyun.com/alpine/latest-stable/main/ > /etc/apk/repositories-RUN curl -L https://github.com/ansible-semaphore/semaphore/releases/download/v2.1.0/semaphore_linux_amd64 > /usr/bin/semaphore && chmod +x /usr/bin/semaphore && mkdir -p /etc/semaphore/playbooks+ADD semaphore_linux_amd64 /usr/bin/semaphore+RUN chmod +x /usr/bin/semaphore && mkdir -p /etc/semaphore/playbooksbuild镜像
1docker build -t semaphore .创建playbook仓库
semaphore通过git来访问playbook仓库,可以使用github来存储,方便起见我们在本地init一个git仓库1git init /Users/hellfires/workspace/docker/volumes/semaphore/playbook_repo
运行Semaphore
|
|
其中ANSIBLE_HOST_KEY_CHECKING=False
用于禁用host key checking,避免当目标主机不在known_hosts中时跳出提示,干扰playbook执行。
但是Semaphore执行playbook时不会继承这个环境变量,只能通过修改ansible配置文件方式来实现。
需要在/etc/ansible/ansible.cfg
增加如下配置
|
|
首次使用Semaphore
- 进入dashboard页面,新建project,点击新建的project进入项目主页面
- 进入Key Store页面,新建SSH Key,填入公钥及私钥,用于访问目标服务器或登录git
- 进入Playbook Repositories页面,新建repository,如果是远程仓库,需要指定对应的SSH Key,注意远程仓库不支持https协议访问(因为访问时需要输入密码)。本地仓库直接填目录即可,如
file:///etc/playbook_repo
,SSH Key随便填。 - 进入Inventory页面,新建inventory,类型static,选择可用于访问inventory内目标服务器的SSH Key,编辑inventory内容,增加服务器地址
- 进入Environment页面,增加playbook中使用到的变量,没有可以留空
- 进入Task Templates页面,新建template,用于执行指定的playbook
- 点击run,一切顺利的话就可以看到输出结果了,不顺利的话,看看Semaphore代码吧
存在的问题
通过Semaphore我们可以在页面上完成所有的配置及运行工作,提升了ansible的易用性,尤其对于非开发人员(例如测试)来说。但是当我们的环境和服务器数量较多时,相对于ansible最佳实践中推荐的Convention over configuration方式的配置文件结构,Semaphore扁平式的配置管理方式(包括Environment和Inventory)貌似会给配置带来很多麻烦,这块我们会在后续实践中继续探索。