Jenkins + Gitlab + Rancher +Docker 可持续集成环境部署

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 

版权声明:本文为博主原创文章,转载请附上博文链接!