美文网首页程序猿日记持续集成我爱编程
【教程】使用腾讯云主机搭建持续集成/部署环境

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

作者: yongaliang | 来源:发表于2018-04-06 22:23 被阅读448次

    最近一段时间腾讯云和阿里云都在开展非常实惠的活动购买云主机,很多小伙伴都买了云主机来学习和实践。对此,本文主要介绍了如何用云主机从零开始搭建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 验证是否成功加入。

    相关文章

      网友评论

      • 李伟:既然都用swarm了,怎么不把Jenkins也用docker,应该全部容器化:grin:
        yongaliang:@李伟 会有一些执行script的权限的小问题,所以就没花时间去弄
      • 就是个坏人:不错啊 感谢付出
      • IT人故事会:文章很用心,我会继续支持

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

      本文链接:https://www.haomeiwen.com/subject/bauacftx.html