Jenkins + Gitlab + Rancher +Docker 可持续集成环境部署
at 6年前 ca Linux pv 3773 by touch
Jenkins + Gitlab + Rancher +Docker 可持续集成环境部署
Docker
Gitlab
Jenkins
Rancher
前言:
之所以要写这篇文章,因为我自己在学习jenkins时遇到了很多的问题,无从下手,网上找来的文章大都是复制粘贴残缺不全的,或者是只写到一半就没有后续的,反正是种种问题。为了帮助初学者,我决定开个博客写一篇关于Jenkins + Gitlab + Rancher +Docker 可持续集成部署环境搭建的文章,也算是对自己知识的一种积累吧。如有问题,欢迎留言。
本文所演示项目用的是基于Swoole4.2.8原生协程的PHP高性能协程全栈框架,php版本为7.2.11,系统为Centos7。有兴趣的同学可去研究研究该框架。
该项目的协同工作流程为:
jenkins 从 gitlab拉取代码制作镜像并上传到私有docker仓库,然后rancher再从私有docker仓库拉取镜像并部署服务。
Docker
安装
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。
社区版是免费的,企业版会提供额外的收费服务,我们使用免费版即可。
先更新环境
yum update
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker
yum install -y docker-ce
启动服务
service docker start
检查Docker服务是否启动
ps aux | grep docker
设置开机启动,如果不想开机自启动可跳过
systemctl enable docker
设置Docker中国镜像
打开配置文件 /etc/docker/daemon.json,并输入下面配置项:
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
然后保存退出即可
卸载Docker
yum remove docker-ce docker-common docker-selinux docker-engine
安装Docker私有仓库
安装私有仓库是为了把Jenkins构建的项目镜像存放在该仓库中,以及后续Rancher部署服务时从该仓库拉取镜像
直接Docker安装
docker run --name docker-registry -d -p 5000:5000 registry
访问仓库
curl -X GET http://127.0.0.1:5000/v2/_catalog
返回信息如下即表示成功
设置允许http协议访问
修改 /etc/docker/daemon.json并添加 “insecure-registries”: [“127.0.0.1:5000”],添加之后如下:
{ "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["127.0.0.1:5000"] }
重启docker
service docker restart
重启私有仓库
docker start xxxx (仓库容器ID)
制作swoft运行环境基础镜像
该镜像在jenkins构建时会用到,我已经上传至docker hub,可通过,镜像名为 422909231cy/swoft-base-env 可下载查看Dockerfile.
Gitlab
为了快速安装及避免不必要的麻烦,直接Docker安装。Gitlab也是区分社区免费版和企业收费版,直接安装CE社区免费版
拉取镜像
docker pull gitlab/gitlab-ce:latest
运行镜像
一般会在宿主机新建3个目录,将gitlab的配置文件(etc),日志文件(log),数据(data)存放在容器之外,方便升级迁移。
mkdir -p /mnt/gitlab/etc mkdir -p /mnt/gitlab/log mkdir -p /mnt/gitlab/data
目录创建完成之后执行以下命令,运行docker
docker run \ -d \ -p 443:443 \ -p 8881:80 \ --name gitlab-ce \ --restart unless-stopped \ -v /mnt/gitlab/etc:/etc/gitlab \ -v /mnt/gitlab/log:/var/log/gitlab \ -v /mnt/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce
执行docker ps 可查看是否运行
如果启动失败,查看日志 docker logs xxxxx(容器ID)
这一步可能稍微花点时间,耐心等待,如果出现如下界面请继续等待,并强制刷新页面,服务启动完成即可进入设置密码界面
配置对外url,域名或者ip,公网能访问即可
vim /mnt/gitlab/etc/gitlab.rb
添加一下配置:
external_url'http://127.0.0.1' (你的域名或者ip地址)
修改配置文件 配置邮箱(以QQ邮箱为例),如果机器没有postfix邮件服务,请先安装 vim /mnt/gitlab/etc/gitlab.rb gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "xxx@qq.com" (替换成自己的QQ邮箱) gitlab_rails['smtp_password'] = "xxxxx" gitlab_rails['smtp_domain'] = "smtp.qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = 'xxx@qq.com' (替换成自己的QQ邮箱,且与smtp_user_name一致)
5、配置项都设置号以后,重新启动gitlab
docker restart xxxx (容器ID)
启动完成后,打开网址 http://127.0.0.1:8881 (你的ip),端口就是上面docker run 设置的对外端口。设置初始密码,账号为root,密码设置完毕之后用root账号登陆即可
设置好以后先创建一个仓库,然后pull到本地,添加swoft框架代码,并提交到远程仓库,再创建2个分支分别为dev,pro。后面需要构建不同的分支代码并部署。
生成 Api Token
进入个人设置中心User Settings,点击 Access Tokens
设置一个名称,勾选api,然后点击按钮生成token,保存下来,后面用于配置jenkins的git插件
Jenkins
Jenkins可通过docker安装,也可通过yum本地安装。两种方式我都试过,但docker的Jenkins版本较低,启动之后安装插件各种报错,于是舍弃,换用yum安装。
Jenkins需要安装JDK,执行 java -version 检查是否安装,如果没有安装请自行百度安装
java -version
下载rpm安装包
wget https://prodjenkinsreleases.blob.core.windows.net/redhat/jenkins-2.153-1.1.noarch.rpm
安装
rpm -ivh jenkins-2.153-1.1.noarch.rpm
打开配置文件 /etc/sysconfig/jenkins 查看端口,找到 JENKINS_PORT 配置项,默认是8080,如果冲突可改为其他端口,如果开启了防火墙记得开放端口,实验改为 8880。另外找到 JENKINS_USER 设置为 root,不然后后面构建镜像是没有权限,也可以将jenkins用户加入docker组
vim /etc/sysconfig/jenkins
将jenkins用户加入docker组
gpasswd -a jenkins docker service jenkins restart
启动。如果启动失败,查看错误日志。
service jenkins start
通过http://ip:port访问jenkins,根据提示操作。需要等jenkins启动完成,刷新页面即可进入设置界面。如下图
执行
cat /var/lib/jenkins/secrets/initialAdminPassword
获取初始密码,复制过来粘贴登陆。
安装插件选择第一项,安装推荐插件即可,然后下一步,创建用户,然后设置url,直接默认即可,下一步就安装完毕了
点击开始使用,即可打开jenkins大门
安装需要插件
依次点击 系统管理 > 插件管理 进入插件安装面板,选择 可选插件,输入gitlab 把筛选出来的插件全部勾选,立即安装,然后重启。相同方法安装docker插件(筛选出来的插件只勾选Docker即可)。然后重启进行插件配置。
jenkins 配置
配置gitlab
a. 进入 系统管理 > 系统设置 找到Gitlab设置项,点击新增,设置参数
b. 点击 新增 展开下面的输入框
c. 设置授权凭证
API token 就是上面再gitlab生成的api token,直接复制过来填上,然后保存
保存之后会自动关闭这个界面回到上面 b 步骤,点击下拉选择刚刚创建的凭证,
点击test显示 Success 表示连接成功。保存当前配置即可。
创建任务
a. 回到首页,点击 新建任务 创建一个任务,随便输入一个任务名称,选择第一项的 构建一个自由风格的软件项目 然后确定进入任务配置页面。
b. 配置项目
勾选参数化构建(当然你也可以选择别的构建方式),选择选项参数,填入你要构建的参数,实验需要构建dev 和 pro分支,我们输入 dev 和pro像个参数
选择 选项参数 会弹出如下输入框,名称 我们在构建时需要用到
填好之后滚动页面往下找到 源码管理 配置项配置gitlab仓库信息,一样需要添加授权凭证,点击Add,会填写凭证信息,有多种方式可以配置,我们选择gitlab账号密码的方式进行配置即可,Repository URL 为gitlab项目的地址,Branch Specifier (blank for ‘any’) 为需要构建的分支名称,与上面 选项参数 名称保持一致
账号及密码凭证
填好之后继续滚动页面往下找到 构建 配置项,点击 增加构建步骤 选择执行 shell
然后把写好的构建shell复制粘贴进来即可,实验所用shell如下
imageRepo='127.0.0.1:5000' # 私有镜像仓库地址 imageName='test/swoft-app' # 镜像名称 imageTag=$RELEASE_BRANCH # 上面设置Branch分支,这里可以当做环境变量使用 cd $WORKSPACE/ # 进入到jenkins的工作区,jenkins会将gitlab仓库代码pull到这里,用于制作镜像文件
# 根据不同的Branch生成不同的swoft的配置文件,区分测试还是生成等
echo ' >>> [INFO] generating entrypoint.sh ...' ( cat << EOF rm -rf ./.env cp ./.env.\$PHP_ENVIRONMENT ./.env echo 'Reconfigured' php /var/www/swoft/bin/swoft start EOF ) > ./.entrypoint.sh
# 生成Docfile
rm -f ./Dockerfile ( cat << EOF FROM 422909231cy/swoft-base-env LABEL maintainer=xxx@qq.com COPY . /var/www/swoft WORKDIR /var/www/swoft EXPOSE 80 ENV PHP_ENVIRONMENT $RELEASE_BRANCH ENTRYPOINT [ "bash", "/var/www/swoft/.entrypoint.sh" ] EOF ) > ./Dockerfile echo ' >>> [INFO] begin building image ...' #删除无用镜像 for sid in `docker images | grep -w $imageName | grep -i -w $imageTag | awk '{print $3}'` do docker rmi $sid -f done #制作镜像 docker build --tag $imageName:$imageTag --rm . echo ' >>> [INFO] begin publishing image ...' imageSid=`docker images | grep -w $imageName | grep -i -w $imageTag | awk '{print $3}'` #重命名本地镜像 docker tag $imageSid $imageRepo/$imageName:$imageTag #push到私有镜像仓库,用于rancher部署服务 docker push $imageRepo/$imageName:$imageTag echo ' >>> [INFO] cleaning ...' #删除刚刚制作的镜像 释放存储空间 docker rmi -f $imageName:$imageTag docker rmi -f $imageRepo/$imageName:$imageTag
然后保存,进入任务界面,点击构建,选择一个分支,然后build,等一会就可以见证奇迹的发生了。(按顺序依次执行)
执行完毕之后可以通过浏览器访问仓库
http://127.0.0.1:5000/v2/_catalog
如果成功可看到该镜像了
{ repositories: [ "test/swoft-app" #刚刚创建的镜像 ] }
到此 jenkins已经成功从gitlab pull代码并制作镜像发布到私有仓库了,后面将是通过rancher部署docker服务的内容了。。。
Rancher
安装Rancher
通过docker直接安装,
docker run -d --restart=unless-stopped -p 8882:80 -p 8443:443 rancher/rancher
然后通过 https://47.93.160.163:8443 访问rancher,根据操作提示
设置admin密码
进入首页如下(设置中文)
配置
添加一个集群,这里选择CUSTOM自定义集群,名称可自定义,其他项保持默认即可,点击下一步
把上图中的代码复制复制下来,在主机中执行。如果是多台主机,根据角色的不同,需要复制多次命令
点击完成。可能会提示主机名称不符合规则,根据规则修改一下即可
修改主机名
hostnamectl set-hostname xxx(主机名)
reboot
重启之后把刚刚创建的集群删除,重新再创建一次。然后进入主机注册状态,等待注册完成即可。
注册中
注册完成 主机变为active状态,可以查看主机的配置信息
集成创建成功之后会生成两个默认的项目 Default + System。System是系统相关,里面运行着一些系统服务,Default为空项目,可以部署自己的服务。
部署服务
配置好之后点击页面底部的 启动 按钮,开始部署服务部署完成即可通过 http://ip:port 访问你的项目了
到此,整个服务搭建就已经完成了。
---------------------
作者:大学同学
来源:CSDN
原文:https://blog.csdn.net/weixin_43865541/article/details/84667868
版权声明:本文为博主原创文章,转载请附上博文链接!
版权声明
本文仅代表作者观点,不代表码农殇立场。
本文系作者授权码农殇发表,未经许可,不得转载。