基于 docker的jenkins-ansible-gitlab 实现自动化部署

项目环境:

操作系统:SUSE Linux Enterprise Server 12 SP3 (x86_64)

软件:docker,jenkins,ansible,gitlab

软件介绍:

Docker:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,比虚拟机更加强大,体积小,运行速度快,Docker 容器可以打包为镜像文件(类似VM虚拟机的那些快照文件),迁移的时候我们只需要在新服务器上安装 Docker,就能把之前打包好的镜像文件导入到 Docker 里面,运行容器,就能实现访问,不需要重新配置环境

Jenkins:Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能

Ansible:ansible 是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible 是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible 所运行的模块,ansible 只是提供一种框架

GitLab:GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的web服务。GitLab是由 GitLabInc. 开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务

1、安装 pip(通用的 Python 包管理工具):

1. zypper se pip

2. zypper install python-pip

3. pip --version (检测 pip 是否安装成功)

2、安装docker:

1. pip install docker

2. pip install docker-compose

3. 或者创建一个 install_docker.sh 文件,输入如下内容:

安装 docker

cd ../pkgs/docker-ee

yum install docker-ee-selinux-17.03.1.ee.3-1.el7.centos.noarch.rpm

yum install docker-ee-17.03.1.ee.3-1.el7.centos.x86_64.rpm

安装 docker-compose

cd ..

cp docker-compose /usr/local/bin

chmod +x /usr/local/bin/docker-compose

mkdir /etc/docker

cp daemon.json /etc/docker/daemon.json

启动 docker

service docker start

4. 执行 install_docker.sh

bash install_docker.sh

3、拉取 jenkins 镜像

docker pull jenkins:alpine

拉取 jenkins 镜像

4、生成并启动 jenkins 容器

生成 jenkins:docker run -itd -p 3003:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/hzq/jenkins:/var/jenkins_home jenkins

Jenkins 工作空间: /home/hzq/jenkins/workspace/

查看 jenkins 日志:docker logs jenkins

启动 jenkins:docker start jenkins

查看 jenkins 容器是否启动

jenkins 容器成功启动

进入 /home/hzq/jenkins 目录,复制 secrets/initialAdminPassword 里的密钥,在下面安装 jenkins 的时候会用到

5、安装 jenkins

在浏览器输入服务器 IP地址 + 3003 端口进入安装页面

输入上面复制的密钥后点击继续

输入密钥

自定义插件

开始安装

设置管理员信息

进入主页

6. 下载 gitlab 镜像,并启动 gitlab

下载 gitlab 镜像

docker pull gitlab/gitlab-ce

启动 gitlab

sudo docker run --detach

--hostname gitlab.xxxxx.com

--publish 443:443 --publish 80:80 --publish 10022:22

--name gitlab

--restart always

--volume /data/gitlab/config:/etc/gitlab

--volume /data/gitlab/logs:/var/log/gitlab

--volume /data/gitlab/data:/var/opt/gitlab

gitlab/gitlab-ce:latest (注:改为10022 端口,避免与系统的 22 端口发生冲突)

启动 gitlab 容器

通过设定的地址 + 端口进入gitlab 登录界面

进入到个人项目页面

7. 进入 jenkins 页面配置 jenkins 和 gitlab

新建一个任务

创建好项目的名称,选择一个构建一个自由风格的软件项目

创建任务

添加描述

Repository URL 处填写 git 仓库地址

Credentials 处添加 ssh 密钥

触发器构建,点击高级

点击高级按钮后,生成一个 secret token(复制到gitlab当中)

gitlab和 jenkins 通讯,需要此 token 和上面的 url

生成 secret token

登录到gitlab页面,进入 Settings 里的 Integrations

配置 webhooks

填写 jenkins 上配置的参数

8. 项目测试

克隆 gitlab上面的项目到本地

克隆项目

测试项目

成功自动拉取项目

进入 jenkins 工作空间 (/home/hzq/jenkins/workspace/)

创建和推送的first_demo.txt 已经被成功拉取

9.使用 ansible 自动化部署项目

Ansible 配置: /etc/ansible/ansible.cfg

配置管理主机: /etc/ansible/hosts

在hosts文件中添加管理主机的IP地址列表:172.17.0.1 ... etc.

关于 ansible 的配置可以参考:

Jenkins配置ansible

ansible 配置好后,我们在本地新建一个 ansible.sh 的脚本 (执行一些 git 命令)

ansible.sh

删除刚刚创建的 first_demo.txt 文件,执行ansible.sh 脚本,测试结果

成功执行

jenkins 也成功响应

成功自动拉取

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181213A1BQZF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券