CI 持续集成(Jenkins)

3 篇文章 0 订阅
1 篇文章 0 订阅

工程配置准备

摘要
发布准备
  1. Java Code:至少需要将代码托管于远程仓库中(Git)
  2. Jenkins:“CI” 工具,持续化集成
  3. Git:在Jenkins持续化构建时需要使用Git将代码拉取至本地进行构建
  4. Maven:代码构建工具(将 Java 代码构建成 Jar 包)
  5. Docker:使用Docker对其进行镜像构建
  6. Kubernetes(Kubectl):使用Kubectl对目标服务器进行Deploy

持续集成流程图

在这里插入图片描述

步骤负责人工作
1开发人员开发人员需准备预编译代码,以及相应的Dockerfile文件
2单元测试在部署构建前需要经通开发人员对接口进行单元测试
3托管仓库单元测试通过后需提交预编译代码至代码托管仓库
4CI服务持续化通过拉取托管仓库中的代码对代码进行构建,并提交至镜像仓库
5镜像仓库构建的源镜像托管
6容器管理通过Kubernetes对镜像进行Deployment,LB,Health Check等
7集成测试***
8安全测试***
9产品发布***

工具准备
1. Jenkins安装

使用Docker拉取Jenkins镜像(由于健康检查机制,不建议使用K8S来管理Jenkins服务,但可通过数据卷挂载来防止POD驱逐数据丢失)

# 在Hub中搜索Jenkins镜像
docker search jenkins

# 选择好厂家后拉取Jenkins
docker pull jenkins/w***

# 将该镜像重命名
docker tag jenkins/w*** jenkins-servers

# 运行启动Jenkins服务,并挂载数据卷以及 “sock” 以便使用 “Docker-In-Docker”
docker run -u root --rm -d -p 18080:8080 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins-servers

# 开放安全组,访问管理页
GET IP:18080
2. Maven安装
# 寻找官网 Maven 版本
GET http://maven.apache.org/download.cgi

# 进入 Jenkins Servers 容器
docker exec -it jenkins-servers /bin/bash

# 进入home目录
cd /home

# 下载 Maven tar包
wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.6.1-bin.tar.gz

# 配置环境变量,检查安装结果
vi /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH 
source /etc/profile
mvn -v 
3. 安装Git
# 进入 Jenkins Servers 容器
docker exec -it jenkins-servers /bin/bash

# 进入home目录
yum install git

# 查看 Git 安装目录
witch git
4. Docker 与 Kubernetes

Docker 和 K8S 的安装不做示例

CI 基础配置

CI Jenkins 需要一些基础配置
例如:Jenkins需要使用Git工具来拉取代码,需要使用Maven来进行代码构建,需要使用JDK来进行代码运行,在此配置它们,以便Jenkins找到它们。

1. 进入 Jenkins 服务管理端,选择 “Manage Jenkins”

在这里插入图片描述

2. 进入公共配置页

在这里插入图片描述

3. 配置 Git 和 Maven 路径

在这里插入图片描述

Git 凭证配置

私有托管仓库的拉取一般会使用SSH或HTTPS方式,但需要配置身份凭证,否则 CI服务 将无法拉取到它

1. 进入 Jenkins 服务管理端,选择 “凭据”

在这里插入图片描述

2. 进入凭据配置(进入凭据 - 系统 - 全局凭据)

在这里插入图片描述

3. 进入全局凭据,选择 “Add Credentials” (添加一个凭据)

在这里插入图片描述

4. 选择 SSH 凭据(这里示例 SSH 配置,若使用 HTTPS 请选择帐号密码方式)

在这里插入图片描述

5. 填写凭据信息(ID 列默认生成选填,Description 列备注,Username 列为用户名,Private Key 列填写您的 SSH 私钥,请区分公钥私钥,这里填写的是私钥)

在这里插入图片描述

工程搭建

以上对 CI 基础配置进行了示例,接下来是对 CI 工作的搭建

1. 创建视图
1. 添加视图并为视图起个名字

在这里插入图片描述

2. 选择视图配置(在此可以略过配置项,进行应用确认)

在这里插入图片描述

2. 创建 Build Item
1. 新建一个 Item

在这里插入图片描述

2. 起名字,选择构建方式(Maven),点击确认

在这里插入图片描述

3. General(一般)

Discard old builds 【丢弃旧的构建】
描述:Jenkins将会每日清理您产生的构建垃圾

在这里插入图片描述

This project is parameterized 【参数化构建】
描述:这个构建是允许传递参数的,选择 “Add Parameter” 添加一个 “String Parameter”,您将在构建时允许传入一个 String 类型的参数用作 Shell 中使用

在这里插入图片描述
在这里插入图片描述

4. Source Code Management (源代码管理)

Git 【存储库】
描述:配置 CI 服务通过 Git 工具拉取源代码

参数解释:

  1. Repository URL:仓库地址,即源代码托管仓库克隆地址
  2. Credentials:选择拉取身份凭证
  3. Branch Specifier (blank for ‘any’):分支,即指定 CI 服务 拉取哪个分支的源代码

在这里插入图片描述

5. Build Triggers 【触发器】

Build periodically 【定时构建】
描述:可通过 “CornTrigger表达式” 对此工程进行持续化集成

# 配置每6小时执行一次构建
H H/6 * * *

在这里插入图片描述

6. Build Environment 【构建环境】

构建环境相对复杂,放在文末示例
描述:构建环境可在本机 CI 服务对外网/内网其他主机进行Deploy,可传输文件和执行脚本

7. Pre Steps 【预发布准备】

预发布钩子
描述:预发布准备中可配置在构建之前需要执行的脚本或其他命令

8. Build 【构建】

Build 【编译工程构建】
描述:可通过Maven工具对源代码进行构建,生产可执行Jar包

# Maven构建命令(仅构建依赖服务)
-pl test-deploy-servers -am install -Dmaven.test.skip=true

在这里插入图片描述

9. Post Steps 【构建后执行】

Run only if build succeeds 【仅以上的构建均成功时执行】
描述:选择此项,可保证当代码编译失败或者其他原因,将不再继续执行此构建

Add post-build step 【添加构建后执行方式】

Execute Shell 【执行 Shell 脚本】
描述:在以上构建成功时,执行此脚本,进行镜像构建

构建脚本内容:

# 定义变量
## 端口号
PORT=8080
## 服务名称
RESOURCE_NAME=test-name
## 命名空间
NAMESPASE=test
## 分支
ACTIVE=test
## 版本号
tag=${tag} 

# 定义常量
## 服务文件名称
RESOURCE_FILE=bolt-$RESOURCE_NAME
## 容器名称
CONTIAINER_NAME=images-$RESOURCE_NAME
## 服务名称
SERVICE_NAME=bolt-v1-$RESOURCE_NAME
## 注册中心 Service IP
CONSUL_ADDRESS=10.0.0.5
## 服务 Service IP
HOST_ADDRESS=10.0.0.6

# 将工作目录的Jar文件复制到自定义目录,因docker build上下文原因若目录中含有过多文件会影响build速度
cp /var/jenkins_home/workspace/$ACTIVE-test-$RESOURCE_NAME/test-servers-$RESOURCE_NAME/target/test-servers-$RESOURCE_NAME-1.0.0.jar /usr/local/games

# 进入此目录准备执行构建
cd /usr/local/games/

# 生成此文件需要执行的配置文件(Jar服务启动需要的yml文件)
cat > /usr/local/games/$RESOURCE_NAME-bootstrap.yml << EOF
#config of server port
server:
  port: $PORT

#logging config
logging:
  #level: info
  config: classpath:log4j2.xml

#spring-cloud config
spring:
  application:
    name: $SERVICE_NAME
  profiles:
    active: $ACTIVE
  cloud:
    config:
      discovery:
        serviceId: test-v1-config
        enabled: true
      fail-fast: true
      retry:
        initial-interval: 1000
        max-attempts: 6
        max-interval: 2000
        multiplier: 1.1
      profile: $ACTIVE
      label: $ACTIVE

---
spring:
  profiles: $ACTIVE
  cloud:
    consul:
      host: $CONSUL_ADDRESS
      port: 8500
      discovery:
        hostname: $HOST_ADDRESS
        serviceName: $SERVICE_NAME
        instance-id: $SERVICE_NAME
        healthCheckPath: /health/check
        healthCheckInterval: 10s
EOF

# 生成 dockerfile 准备构建镜像
cat > /usr/local/games/Dockerfile << EOF
# 源镜像
FROM java:8
# 作者
MAINTAINER cuixiaojian
# copy Jar 文件以及yml文件至容器
COPY $RESOURCE_NAME-bootstrap.yml /home/vms-servers/$RESOURCE_NAME/1.0.0/bootstrap.yml
COPY test-servers-$RESOURCE_NAME-1.0.0.jar /home/test-servers/$RESOURCE_NAME/1.0.0/test-servers-$RESOURCE_NAME-1.0.0.jar
# 指定容器时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 暴露端口
EXPOSE $PORT
# 构建容器时执行的命令
ENTRYPOINT java -Xms256M -Xmx512M -XX:MaxMetaspaceSize=512M -jar /home/vms-servers/$RESOURCE_NAME/1.0.0/test-servers-$RESOURCE_NAME-1.0.0.jar --spring.config.location=/home/test-servers/$RESOURCE_NAME/1.0.0/bootstrap.yml
EOF

# 登录腾讯云镜像仓库
docker login --username=*** --password=*** ccr.ccs.tencentyun.com

# 构建镜像
docker build -t $CONTIAINER_NAME:$tag -f /usr/local/games/Dockerfile .

# 推送镜像上传至腾讯云镜像仓库
docker tag $CONTIAINER_NAME:$tag ccr.ccs.tencentyun.com/$NAMESPASE/$CONTIAINER_NAME:$tag
docker push ccr.ccs.tencentyun.com/$NAMESPASE/$CONTIAINER_NAME:$tag
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值