Skip to main content

流水线服务部署

为帮助用户更加深入了解DevOps流水线任务模板的使用场景,可以借助平台的PaaS功能,部署相关服务,在流水线中使用体验。

Tenxbox(演示应用demo)

(1) 通过[容器服务][工作负载]新建Deployment。

tenxbox Deployment YAML 文件

apiVersion:apps/v 1
kind:Deployment
metadata:
name:tenxbox
namespace:namespace 3
labels:
app:tenxbox
name:tenxbox
system/appName:tenxbox
system/svcName:tenxbox
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:tenxbox
strategy:
type:Recreate
template:
metadata:
labels:
app:tenxbox
io.kompose.service:tenxbox
name:tenxbox
system/appName:tenxbox
system/svcName:tenxbox
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:
name:tenxbox
image: 192. 168 .x.x/system_containers/tenxbox: 1. 1 '
ports:
containerPort: 8080
protocol:TCP
resources:
limits:
cpu:' 1 '
memory: 1024 Mi
requests:
cpu:' 1 '
memory: 1024 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName:default
serviceAccount:default

Tenxbox Service YAML 文件

apiVersion:v 1
kind:Service
metadata:
labels:
name:tenxbox
system/appName:tenxbox
system/svcName:tenxbox
name:tenxbox
namespace:namespace 3
spec:
ports:
name:tcp-tenxbox- 0
protocol:TCP
port: 8080
targetPort: 8080
selector:
name:tenxbox
type:ClusterIP
sessionAffinity:None

(2) 通过[网络管理/应用路由/服务代理],增加路由规则。

test

(3) 在流水线任务“服务校验”可添加该应用。

SonarQube

工具简介:SonarQube是管理代码质量的开放平台,可以快速定位代码中潜在的或者明显的错误。

在DevOps中,SonarQube主要用于“SonarQube”任务模板,由包含SonarQube任务的流水线执行后,可在流水线界面“代码质量”标签下查看代码扫描结果。

部署方式:

(1) 通过“容器服务”的“工作负载”新建Deployment。

(2) Deployment部署YAML如下所示。

system_containers/sonarqube: 7. 1 - alpine

在平台系统镜像仓库已配备。

168 .x.x/system_containers/sonarqube: 7. 1 - alpine 具体地址需跟镜像存放地址一致。

sonarqube Deployment YAML 文件

apiVersion:apps/v 1
kind:Deployment
metadata:
name:sonarqube
namespace:project 4
labels:
app:sonarqube
name:sonarqube
system/appName:sonarqube
system/svcName:sonarqube
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:sonarqube
strategy:
type:Recreate
template:
metadata:
labels:
app:sonarqube
io.kompose.service:sonarqube
name:sonarqube
system/appName:sonarqube
system/svcName:sonarqube
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:

name:sonarqube
image:' 192. 168 .x.x/system_containers/sonarqube: 7. 1 - alpine'
ports:
containerPort: 9000
protocol:TCP
resources:
limits:
cpu:' 1 '
memory: 2048 Mi
requests:
cpu:' 1 '
memory: 2048 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName: default
serviceAccount: default

sonarqube Service YAML 文件

apiVersion:v 1
kind:Service
metadata:
labels:
name:sonarqube
system/appName:sonarqube
system/svcName:sonarqube
name:sonarqube
namespace:project 4
spec:
ports:
name:tcp-sonarqube- 0
protocol:TCP
port: 9000
targetPort: 9000
selector:
name:sonarqube
type:ClusterIP
sessionAffinity:None

(3) 为sonarqube配置网络访问方式。在下图所示,增加一条服务代理。

(4) 待服务正常启动后,通过服务代理访问SonarQube服务地址、用户名/密码(默认 admin/admin)用于DevOps流水线中SonarQube相关任务配置。

平台使用示例:测试使用sonarqubeurl和用户名密码为:http://192.168.0.82:17788,admin/admin

(1) 登录sonarqube,创建sonarqube项目。

(2) 创建“质量门”,设置阈值,并将项目添加使用该质量门配置,这里做demo,仅添加CodeSmells指标,在实际使用时可根据情况增删“质量门”阈值指标。

(3) 打开平台DevOps/流水线页,创建sonarqube demo流水线并添加sonarqube任务,配置如下所示。其中有三处设置需要注意。

note

  • sonarqube认证设置需使用上面sonarqube服务的地址和账户。
  • 项目配置中使用上面在sonarqube服务中创建的项目。
  • sonarqube检测结果配置,需配置为使用sonarqube质量门状态并配置检测成功的条件。
  • 当配置为使用质量门状态时,代码扫描完后会将扫描结果的指标与“b”中创建的项目对应的质量门阈值指标进行比较,生成扫描最终结果。

    test

    (4) 执行流水线,构建结束后查看扫描结果。

    (5) 同时可在sonarqube服务中查看本次扫描的更多细节。

    Jenkins

    在DevOps中,Jenkins主要用于“Jenkins任务”任务模板。通过该任务,可以配置Jenkins服务中的Job信息并由平台流水线任务触发执行Jenkins的Job构建,可在流水线任务中查看Jenkins构建日志。

    部署方式:在平台使用[容器服务][工作负载]进行部署:

    (1) 通过[容器服务/工作负载]新建Deployment。

    (2) Deployment部署YAML如 system_containers/jenkins:2.60.3-alpine

    在平台系统镜像仓库已配备。

    168.x.x/system_containers/jenkins:2.60.3-alpine,具体地址需跟镜像存放地址一致

    新建 jenkinsDeploymentjenkinsYAML文件。

    apiVersion:apps/v 1
    kind:Deployment
    metadata:
    name:jenkins
    namespace:project 4
    labels:
    app:jenkins
    name:jenkins
    system/appName:jenkins
    system/svcName:jenkins
    annotations:
    sidecar.istio.io/inject:'false'
    spec:
    replicas: 1
    selector:
    matchLabels:
    name:jenkins
    strategy:
    type:Recreate
    template:
    metadata:
    labels:
    app:jenkins
    io.kompose.service:jenkins
    name:jenkins
    system/appName:jenkins
    system/svcName:jenkins
    annotations:
    imagetag_arch:amd 64
    imagetag_os:linux
    sidecar.istio.io/inject:'false'
    system/registry:''
    useReadinessConfig:'true'
    spec:
    containers:
    name:jenkins
    image:' 192. 168 .x.x/system_containers/jenkins: 2. 60. 3 - alpine'
    ports:
    containerPort: 50000
    protocol:TCP
    containerPort: 8080
    protocol:TCP
    resources:
    limits:
    cpu:' 1 '
    memory: 2048 Mi
    requests:
    cpu:' 1 '
    memory: 2048 Mi
    imagePullPolicy:Always
    restartPolicy:Always
    serviceAccountName: default
    serviceAccount: default

    jenkins Service YAML 文件

    apiVersion:v 1
    kind:Service
    metadata:
    labels:
    name:jenkins
    system/appName:jenkins
    system/svcName:jenkins
    name:jenkins
    namespace:project 4
    spec:
    ports:
    name:tcp-jenkins- 0
    protocol:TCP
    port: 50000
    targetPort: 50000
    name:tcp-jenkins- 1
    protocol:TCP
    port: 8080
    targetPort: 8080
    selector:
    name:jenkins
    type:ClusterIP
    sessionAffinity:None

    (3) 为jenkins添加一条服务代理。如下图所示。

    (4) 到[容器应用/服务],查看jenkins的访问地址,如下图所示。

    (5) 获取Jenkins服务初始化密码(Administratorpassword)。从应用部署详情“终端”进入Jenkins容器服务终端页面,通过:cat/var/jenkins_home/secrets/initialAdminPassword查看Jenkins服务初始化密码并初始化Jenkins。

    test

    密码获取页面如下图所示。

    (6) 配置Jenkins服务用户名./密码。安装Jenkisn插件并配置完账户信息后可以在DevOps流水线中Jenkins相关任务配置。

    test

    Jenkins部署完成后,需要登录Jenkins的系统管理,设置生成前等待时间为 0 ,如下图所示。

    平台使用示例:demo测试使用jenkins url及帐号:http://192.168.0.82:59171/admin/admin。

    (1) 新建jenkins任务并选择jenkins项目。

    (2) 在流水线执行记录和jenkins服务中查看job构建结果。

    jenkins服务中freejob构建记录。项目页面如下图所示。

    GitLab

    在DevOps中,GitLab主要用于为流水线及任务提供“代码源”,并通过流水线中相关任务完成对代码CI操作。

    部署方式:在平台使用[容器服务/工作负载]进行部署:

    (1) 通过[容器服务/工作负载]新建Deployment。

    (2) Deployment部署YAML如 system_containers/gitlab-ce: 12.6.2-ce.0在平台系统镜像仓库已配备。

    168.x.x/system_containers/gitlab-ce:12.6.2-ce.0,具体地址需跟镜像存放地址一致。

    新建 gitlab Deployment文件

    apiVersion:apps/v 1
    kind:Deployment
    metadata:
    name:gitlab
    namespace:project 4
    labels:
    app:gitlab
    name:gitlab
    system/appName:gitlab
    system/svcName:gitlab
    annotations:
    sidecar.istio.io/inject:'false'
    spec:
    replicas: 1
    selector:
    matchLabels:
    name:gitlab
    strategy:
    type:Recreate
    template:
    metadata:
    labels:
    app:gitlab
    io.kompose.service:gitlab
    name:gitlab
    system/appName:gitlab
    system/svcName:gitlab
    annotations:
    imagetag_arch:amd 64
    imagetag_os:linux
    sidecar.istio.io/inject:'false'
    system/registry:''
    useReadinessConfig:'true'
    spec:
    containers:
    name:gitlab
    image:' 192. 168 .x.x/system_containers/gitlab-ce: 12. 6. 2 - ce. 0 '
    ports:
    containerPort: 22
    protocol:TCP
    containerPort: 443
    protocol:TCP
    containerPort: 80
    protocol:TCP
    resources:
    limits:
    cpu:' 2 '
    memory: 8192 Mi
    requests:
    cpu:' 2 '
    memory: 8192 Mi
    imagePullPolicy:Always
    restartPolicy:Always
    serviceAccountName: default
    serviceAccount: default

    gitlab Service YAML文件如下所示。

    apiVersion:v 1
    kind:Service
    metadata:
    labels:
    name:gitlab
    system/appName:gitlab
    system/svcName:gitlab
    name:gitlab
    namespace:project 4
    spec:
    ports:
    name:tcp-gitlab- 0
    protocol:TCP
    port: 22
    targetPort: 22
    name:tcp-gitlab- 1
    protocol:TCP
    port: 443
    targetPort: 443
    name:tcp-gitlab- 2
    protocol:TCP
    port: 80
    targetPort: 80
    selector:
    name:gitlab
    type:ClusterIP
    sessionAffinity:None

    (3) 为gitlab添加一条服务代理,切换到[容器应用/服务],查看gitlab的访问地址,如下图所示。

    test

    (4) 待服务正常启动后,配置root账户默认密码。

    (5) gitlab设置完成。为项目添加代码仓库后,创建流水线时可被使用为代码源。具体可参考流水线使用产品手册。

    需要更改服务的IP地址和端口,以免访问不到可用于CI/CD流水线“代码仓库”,配置方法如下:vim/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

    修改里面的IP和端口,然后重启,重启命令为:gitlab-ctlrestart

    平台使用示例:示例中使用GitLab地址和账号为:http://192.168.0.82:20387/

    GitLab在DevOps平台中主要用于提供代码源和作为代码仓库时触发流水线的CI触发源。作为流水线任务的代码源。

    (1) 添加代码仓库,代码仓库页面如下图所示。

    test

    (2) 可选择需要激活使用的代码源。创建流水线并使用已激活代码源作为流水线代码源。

    test

    (3) 创建流水线任务并执行。

    Hitchhiker

    HitchhikerApi是一个RestfulApi集成测试工具,支持计划,响应比较,压力测试,支持上载js文件以挂接请求。主要提供以下功能。

    info

  • 多人协作
  • 自动化Runrequests
  • 压力测试
  • 不同环境的数据对比
  • 用户可查看Hitchhiker官方部署文档。使用 docker-compose方式部署。

    部署方式:在平台使用[容器服务/工作负载]进行部署。

    (1) 通过[容器服务/工作负载]新建hitchhiker-mysql的Deployment。

    apiVersion:apps/v 1
    kind:Deployment
    metadata:
    name:hitchhiker-mysql
    namespace:namespace 3
    labels:
    app:hitchhiker-mysql
    name:hitchhiker-mysql
    system/appName:hitchhiker-mysql
    system/svcName:hitchhiker-mysql
    annotations:
    sidecar.istio.io/inject:'false'
    spec:
    replicas: 1
    selector:
    matchLabels:
    name:hitchhiker-mysql
    template:
    metadata:
    labels:
    app:hitchhiker-mysql
    io.kompose.service:hitchhiker-mysql
    name:hitchhiker-mysql
    system/appName:hitchhiker-mysql
    system/svcName:hitchhiker-mysql
    annotations:
    imagetag_arch:amd 64
    imagetag_os:linux
    sidecar.istio.io/inject:'false'
    system/registry:''
    useReadinessConfig:'true'
    spec:
    containers:
    name:hitchhiker-mysql
    image:' 192. 168 .x.x/system_containers/mysql: 5. 7 '
    ports:

    - containerPort: 3306
    protocol:TCP
    env:
    - name:MYSQL_ROOT_PASSWORD
    value:hitchhiker 888
    - name:MYSQL_DATABASE
    value:hitchhiker-prod
    resources:
    limits:
    cpu:' 1 '
    memory: 2 Gi
    requests:
    cpu:' 1 '
    memory: 2 Gi
    restartPolicy:Always
    serviceAccountName:default
    serviceAccount:default

    (2) hitchhiker-mysql的ServiceYAML文件如下所示。

    apiVersion:v 1
    kind:Service
    metadata:
    labels:
    name:hitchhiker-mysql
    system/appName:hitchhiker-mysql
    system/svcName:hitchhiker-mysql
    name:hitchhiker-mysql
    namespace:namespace 3
    spec:
    ports:
    name:tcp-hitchhiker-mysql- 0
    protocol:TCP
    port: 3306
    targetPort: 3306
    selector:
    name:hitchhiker-mysql
    type:ClusterIP
    sessionAffinity:None

    (3) Hitchhiker的Deployment内容如下。

    apiVersion:apps/v 1
    kind:Deployment
    metadata:
    name:hitchhiker
    namespace:namespace 3
    labels:
    app:hitchhiker
    name:hitchhiker
    system/appName:hitchhiker
    system/svcName:hitchhiker
    annotations:
    sidecar.istio.io/inject:'false'
    spec:
    replicas: 1
    selector:
    matchLabels:
    name:hitchhiker
    strategy:
    type:Recreate
    template:
    metadata:
    labels:
    app:hitchhiker
    io.kompose.service:hitchhiker
    name:hitchhiker
    system/appName:hitchhiker
    system/svcName:hitchhiker
    annotations:
    imagetag_arch:amd 64
    imagetag_os:linux
    sidecar.istio.io/inject:'false'
    system/registry:''
    useReadinessConfig:'true'
    spec:
    containers:
    name:hitchhiker
    image:' 192. 168 .x.x/system_containers/hitchhiker:v 0. 14 '
    ports:
    containerPort: 8080
    protocol:TCP
    containerPort: 11010
    protocol:TCP
    env:
    name:HITCHHIKER_DB_HOST
    value:hitchhiker-mysql
    name:HITCHHIKER_APP_HOST
    value:hitchhiker: 8080 /
    resources:
    limits:
    cpu:' 1 '
    memory: 2048 Mi
    requests:
    cpu:' 1 '
    memory: 2048 Mi
    imagePullPolicy:Always
    restartPolicy:Always
    serviceAccountName:default
    serviceAccount:default

    (4) hitchhiker的Serviceyaml如下所示。

    apiVersion:v 1
    kind:Service
    metadata:
    labels:
    name:hitchhiker
    system/appName:hitchhiker
    system/svcName:hitchhiker
    name:hitchhiker
    namespace:namespace 3
    spec:
    ports:
    name:tcp-hitchhiker- 0
    protocol:TCP
    port: 8080
    targetPort: 8080
    name:tcp-hitchhiker- 1
    protocol:TCP
    port: 11010
    targetPort: 11010
    selector:
    name:hitchhiker
    type:ClusterIP
    sessionAffinity:None

    (5) 为hitchhiker服务配置应用路由。

    (6) 更改hitchhiker的Deployment和Service的yaml,编辑Deployment的步骤如下所示。

    (7) 将环境变量中的 HITCHHIKER_APP_HOST,改为对外的url地址(应用路由的IP和端口号),如:http://192.168.0.73:64259/

    (8) 将容器内的containerPort,从原来的 8080 改为 64259 ,保存Deployment。

    (9) 编辑Service配置文件,将targetPort,从原来的 8080 改为 64259 ,保存Servcie。

    (10)修改后查看服务列表里的访问方式,可以查看外部访问地址。

    (11)待Hitchhiker服务正常启动后,打开页面按照提示信息配置管理员账户。然后即可在hitchhiker服务上创建对应测试用例,并根据流水线使用手册中hitchhiker任务模板配置相应流水线任务,完成API测试工作。

    test

    demo实例hitchhikerurl和账号:http://192.168.0.82:17000/123@123.com/123qwe

    (1) 登录hitchhiker创建测试用例。登录实例页面如下图所示。

    (2) 创建流水线hitchhiker任务,配置如下。

    test

    (3) 执行流水线,查看hitchhiker执行结果。执行记录页面如下图所示。

    test

    Testlink是一个开源的测试管理工具,主要用于管理测试用例,从测试需求、测试计划、测试用例管理和用例执行,到最后的结果分析,一套完整的测试流程控制,帮助测试人员有效的控制测试过程。

    Testlink的主要功能如下所示。

    info

  • 测试需求的管理
  • 测试计划的管理
  • 测试用例的管理
  • 测试用例的执行
  • 测试结果的分析(包括测试结果的图表分析)
  • 基于角色的用户管理
  • 部署方式:

    (1) 在[容器服务/工作负载]创建MariaDB和Testlink的Deployment,[容器服务/网络管理]创建MariaDB和Testlink的Service。

    (2) 参考以下YAML文件,创建对应资源。YAML文件中使用的镜像:system_containers/mariadb:10.3system_containers/testlink: 1 在平台镜像仓库已配备。部署时需将具体镜像地址替换:168 .x.x/system_containers/mariadb:10.3、168.x.x/system_containers/testlink:1

    (3) MariaDB Deployment YAML。

    apiVersion:apps/v 1
    kind:Deployment
    metadata:
    name:mariadb
    namespace:namespace 3
    labels:
    app:mariadb
    name:mariadb
    system/appName:mariadb
    system/svcName:mariadb
    annotations:
    sidecar.istio.io/inject:'false'
    spec:
    replicas: 1
    selector:
    matchLabels:
    name:mariadb
    template:
    metadata:
    labels:
    app:mariadb
    io.kompose.service:mariadb
    name:mariadb
    system/appName:mariadb
    system/svcName:mariadb
    annotations:
    imagetag_arch:amd 64
    imagetag_os:linux
    sidecar.istio.io/inject:'false'
    system/registry:''
    useReadinessConfig:'true'
    spec:
    containers:

    name:mariadb
    image:' 192. 168 .x.x/system_containers/mariadb: 10. 3 '
    ports:
    containerPort: 3306
    protocol:TCP
    env:
    name:MARIADB_USER
    value:bn_testlink
    name:MARIADB_DATABASE
    value:bitnami_testlink
    name:ALLOW_EMPTY_PASSWORD
    value:"yes"
    resources:
    limits:
    cpu:' 1 '
    memory: 2 Gi
    requests:
    cpu:' 1 '
    memory: 2 Gi
    restartPolicy:Always
    serviceAccountName: default
    serviceAccount: default

    (4) mariadb Service YAML配置文件如下所示。

    kind:Service
    metadata:
    labels:
    name:mariadb
    system/appName:mariadb
    system/svcName:mariadb
    name:mariadb
    namespace:namespace 3
    spec:
    ports:
    name:tcp-mariadb- 0
    protocol:TCP
    port: 3306
    targetPort: 3306
    selector:
    name:mariadb
    type:ClusterIP
    sessionAffinity:None

    (5) testlink Deployment YAML如下所示。

    apiVersion:apps/v 1
    kind:Deployment
    metadata:
    name:testlink
    namespace:namespace 3
    labels:
    app:testlink
    name:testlink
    system/appName:testlink
    system/svcName:testlink
    annotations:
    sidecar.istio.io/inject:'false'
    spec:
    replicas: 1
    selector:
    matchLabels:
    name:testlink
    template:
    metadata:
    labels:
    app:testlink
    io.kompose.service:testlink
    name:testlink
    system/appName:testlink
    system/svcName:testlink
    annotations:
    imagetag_arch:amd 64
    imagetag_os:linux
    sidecar.istio.io/inject:'false'
    system/registry:''
    useReadinessConfig:'true'
    spec:
    containers:

    name:testlink
    image:' 192. 168 .x.x/system_containers/testlink: 1 '
    ports:
    containerPort: 3306
    protocol:TCP
    env:
    name:MARIADB_HOST
    value:mariadb
    name:MARIADB_PORT_NUMBER
    value:" 3306 "
    name:TESTLINK_DATABASE_USER
    value:bn_testlink
    name:TESTLINK_DATABASE_NAME
    value:bitnami_testlink
    name:ALLOW_EMPTY_PASSWORD
    value:"yes"
    resources:
    limits:
    cpu:' 1 '
    memory: 2 Gi
    requests:
    cpu:' 1 '
    memory: 2 Gi
    restartPolicy:Always
    serviceAccountName: default
    serviceAccount: default

    (6) testlink Service YAML配置文件如下所示。

    kind:Service
    metadata:
    labels:
    name:testlink
    system/appName:testlink
    system/svcName:testlink
    name:testlink
    namespace:namespace 3
    spec:
    ports:
    name:tcp-testlink- 0
    protocol:TCP
    port: 80
    targetPort: 80
    name:tcp-testlink- 1
    protocol:TCP
    port: 443
    targetPort: 443
    selector:
    name:testlink
    type:ClusterIP
    sessionAffinity:None

    (7) 为Testlink配置服务代理,Testlink默认账户名/密码 user/bitnami。配置完成后即可在平台“软件工程过程管理”中使用Testlink服务。

    平台使用示例:Testlink主要用于“软件工程过程管理”模块中,页面显示如下图所示。

    test

    (1) 从JIRA中导出项目需求,将JIRA中需求导入到Testlink中,作为“产品需求规格”导入。导入页面如下图所示。

    test

    (2) 创建Testlink测试用例集和测试用例,并将创建的测试用例添加到产品需求中。

    test

    (3) 创建测试计划,创建页面如下图所示。

    test

    (4) 将测试用例关联到测试计划中,配置页面如下图所示。

    test

    (5) 关联后可在测试计划中查看到对应测试用例集和测试用例。查看页面如下图所示。

    test

    (6) 在JIRA中创建缺陷,并将缺陷的“测试用例标识”字段输入在testlink相关的关联用例(TD-1)。配置页面如下图所示。

    test

    (7) 在“软件工程过程管理”中查看Testlink测试用例与JIRA中需求的关联关系。

    test