迈出持续集成与发布第一步
目的: 实现代码自动部署与多分支多环境发布
前置条件:
linux服务器(centos7+)
docker 环境 (注意最新版本)
git 环境 (注意更新版本)
废话不多说,直接开干,,,
首先我有一台linux服务器,装的操作系统是 centos7.5 内核版本(3.10.0-862.el7.x86_64)
升级安装docker
然后咱们装新 docker
如果原来装了docker 就直接升级,否则就从第3步安装开始
1、停止docker服务
1 | systemctl stop docker |
2、卸载当前安装的版本(注意:操作卸载不会清除之前创建的容器和拉取的镜像,放心!)
1 | yum erase docker \ |
3、开始使用yum安装依赖
1 | yum install -y yum-utils device-mapper-persistent-data lvm2 |
4、配置仓库
1 | yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
5、查看仓库里面可以安装的docker版本
1 | yum list docker-ce --showduplicates | sort -r |
6、安装docker
1 | yum install docker-ce -y |
7、启动服务
1 | systemctl start docker |
8、查看验证版本
1 | docker version |
1 | Client: Docker Engine - Community |
升级Docker后重启容器出现错误Unknown runtime specified docker-runc
1 | grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g' |
1 | systemctl stop docker |
1 | systemctl start docker |
1 | # 设置开机启动 |
docker-compose安装
1 | $ sudo yum install epel-release |
1 | $ sudo yum install -y python-pip |
1 | pip install docker-compose |
拉取jenkins镜像
1 | docker pull jenkins/jenkins:latest |
创建一个目录
1 | mkdir jenkins_co |
编写docker-compose文件
1 | vim docker-compose.yml |
yml文件说明:
- privileged 给容器最高权限
- /var/run/docker.sock 、/usr/bin/docker、/etc/sysconfig/docker、/usr/bin/docker-current 挂载宿主机docker到jenkins容器,以便在武器内部可以使用
- /usr/local/bin/docker-compose 挂载docker-compose 到jenkins容器内
- ./data/jenkins 挂载数据目录
启动jenkins容器
1 | docker-compose up -d |
查看管理员密码
1 | cat ./data/jenkins/secrets/initialAdminPassword |
初次安装,输入查看的密码
选择自定义安装推荐插件
安装ssh插件 用于远程登录主机
拉取gitlab镜像
1 | docker pull gitlab/gitlab-ce |
启动gitlab容器
1 | docker run -d -p 9884:9884 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce |
修改基础url配置
1 | vim /home/gitlab/config/gitlab.rb |
修改监听主机和端口
1 | vim gitlab gitlab-rails gitlab.yml |
升级Git版本
1 | vim /etc/yum.repos.d/wandisco-git.repo |
1 | [wandisco-git] |
1 | sudo rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco |
1 | yum install git |
1 | git --version |
免密ssh登录
1、产生公钥与私钥对
1 | ssh-keygen |
2、查看本机秘钥
1 | cat /root/.ssh/id_rsa |
3、将本机的公钥复制到远程机器的authorized_keys文件中
1 | ssh-copy-id root@192.168.1.231 |
说明:这样做了之后,我们在jenkins里面就可以直接 ssh 插件登录多环境主机操作
配置jenkins部分
所需插件
- Publish Over SSH
- Git Parameter Plug-In
- Gitlab API Plugin
- Gitlab Authentication plugin
- GitLab Plugin
- Docker plugin
- Docker API Plugin
注:
[Git Parameter Plug-In] 插件主要实现多分支 多环境部署
开始一顿配置操作
配置gitlab部分
完成!!!
最后
一般项目都是用 docker + docker-compose 容器化构建的,所以只要jenkins能够使用宿主的的这两个命令基本都OK。
有点瑕疵没解决:
nodejs 插件装不上,有问题,所以我是把前端包上传到部署服务器上,再使用目标服务器node环境进行项目打包部署的。。。 主要原因还是前端项目都没有容器化,都是放在主机的nginx目录下,用子目录区分。