【教程】使用腾讯云主机搭建持续集成/部署环境

最近一段时间腾讯云和阿里云都在开展非常实惠的活动购买云主机,很多小伙伴都买了云主机来学习和实践。对此,本文主要介绍了如何用云主机从零开始搭建CI/CD(持续集成/持续部署)的环境,以及如何构建一个Spring boot 项目到环境中实现自动部署。

涉及到的技术/应用/工具

  • github
  • maven
  • docker
  • jenkins
  • portainer
  • spring boot
  • docker swarm

搭建需求

  • 腾讯/阿里云虚拟机 >= 2台,只有一台的话可以不做Worker云主机部分。
  • 操作系统 CentOS 7.4 64位

搭建前操作

云主机安全组放通全部端口

为了方便测试,我们将实验的云主机的全部端口放通


image.png

Spring Boot 项目

添加dockerfile-maven-plugin

在pomxml添加下面代码,docker.image.prefix是自己的镜像仓库的命名空间

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

添加Dockerfile文件到项目根目录

没有定置化要求的话,不需要修改内容

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

测试构建镜像

本地环境有安装docker 才可以测试

mvn install dockerfile:build

配置Manager云主机

1.环境搭建

Java安装

sudo yum install java-1.8.0-openjdk-devel -y

git 安装

sudo yum install git -y

maven 安装

sudo yum install maven -y

docker CE 安装

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce -y

Jenkins安装

使用Jenkins仓库

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

安装

sudo yum install jenkins -y

赋予jenkins账号root权限

在jenkins中构建docker镜像时需要用到

gpasswd -a jenkins docker
gpasswd -a jenkins root

启动Jenkins

systemctl start jenkins.service

访问Jenkins

http://119.10.1.100:8080

进入Jenkins

第一次登入Jenkins时需要输入管理员密码,按照提示,使用下面命令查看初始密码

cat /var/lib/jenkins/secrets/initialAdminPassword

复制密码,填入,进入Jenkins.选择默认的插件安装,创建用户,登录Jenkins.

2.配置docker swarm

初始化docker swarm

初始化docker swarm,并保存生成的命令,配置worker云主机的时候使用。注意,这里需要加入可选配置--advertise-addr,ip为manager云主机的外网ip。

docker swarm init  --advertise-addr 119.10.1.100
--------------------------
Swarm initialized: current node (z1z3wrml2geuwg32svyhi0n9e) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-147xlpaecbtusvbxi4ije45gejcheyod31ilq0hezb7ipt2jhn-cbpnu5hjvn12gxxru1pzrhyda 119.10.1.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

创建Portainer

Portainer是Docker Swarm的图形化管理工具

docker service create \
--name portainer \
--publish 80:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock

访问Portainer

http://119.10.1.100:80

配置GitHub

settings -> Developer settings -> Personal access tokens -> Generate new token -> 勾选repo 后,生成token

配置Jenkins

管理插件

找到可选插件Maven Integration Plugin 插件,直接安装。

全局工具配置

配置java路径

/usr

配置git路径

/usr/bin/git

配置maven路径

/usr/share/maven

配置docker路径

/var/lib/docker

系统设置

添加GitHub Servers,Credentials填入在Github中生成的token,Test connection,勾选Manage hooks

容器服务-镜像仓库

通过优惠活动购买的云主机外网带宽一般只有1M,如果使用外网上传/下载镜像的话,等待的时间会很长。所以如果是腾讯云主机,建议使用腾讯云的容器服务里面的镜像仓库。如果是阿里云的话,就使用阿里云的镜像仓库,这样的话上传/下载镜像是使用内网的。1、2百MB的镜像也才只需要几秒就可以下载完成,极大的节省了时间。

腾讯云镜像仓库服务:https://console.cloud.tencent.com/ccs/registry/user?rid=1
阿里云镜像仓库服务:https://cr.console.aliyun.com

以腾讯云镜像仓库为例,第一次使用时限设置仓库密码


image.png

然后新建镜像仓库,类型为公有,否则下载镜像的时候会失败。也可以先push镜像后自动创建,然后再将镜像设置为公有。


image.png

在Jenkins新建Maven项目

输入项目名称,选择Maven project,下一步


image.png

勾选gitHub project,输入项目url


image.png

Source Code Management 勾选git,输入项目url,并且添加Credentials(github 账号、密码)
image.png

Build Triggers 勾选GitHub hook trigger for GITScm polling


image.png

Build 的Goals and options 中 填写 install dockerfile:build
image.png

Post Steps 配置
docker login -u 账号 -p 密码 ccr.ccs.tencentyun.com
docker tag ccr.ccs.tencentyun.com/镜像仓库命名空间/项目名称 ccr.ccs.tencentyun.com/镜像仓库命名空间/项目名称:${BUILD_NUMBER}
docker push ccr.ccs.tencentyun.com/镜像仓库命名空间/项目名称:${BUILD_NUMBER}

image.png

保存后点击项目,构建


image.png

可以看到build history显示以及构建成功,点进去可看构建时候的日志。


image.png

查看镜像
docker images
image.png

部署服务到docker swarm

docker service create --name yong-registry -p 8089:8089 ccr.ccs.tencentyun.com/kioyong/yong-registry:1

查看部署

image.png

更新项目配置
command添加多两行命令

docker service update --image ccr.ccs.tencentyun.com/kioyong/yong-registry:${BUILD_NUMBER} --update-parallelism 1 yong-registry
docker rmi ccr.ccs.tencentyun.com/kioyong/yong-registry:${BUILD_NUMBER}
image.png

保存,测试提交代码后,Jenkins是否正常build,portainer上面的service是否自动部署到最新的镜像,测试service的访问,搭建完成。

配置Worker云主机

配置云主机后,在docker swarm 部署的service将根据内存使用情况自动分发到子节点部署。


image.png

image.png

安装docker CE

安装步骤同Manage主机一样

加入docker swarm 集群

docker swarm join --advertise-addr <当前子节点公网IP地址> --token SWMTKN-1-670a8imixkl71ouo836c2wvxr01ii48v7q5xytc98ihqzadgw0-1k6ogcvy2qic86hmqrtsw863t <主节点公网IP地址>:2377

Portainer 验证是否成功加入。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容