devops快速入门

nopassword nopassword | 2061 | 2023-05-17

本文档目的旨在帮助第一次接触devops平台的开发人员快速入门

前提

平台各服务部署成功,给当前开发人员分配devops应用权限以及devops功能权限

创建项目集与项目

前提

  • 禅道组件部署成功

目的

  • devops平台的应用服务属于禅道项目,禅道项目属于项目集

使用


  1. 登录devops平台,进入devops首页,点击切换产品栏中的禅道,进入禅道平台
  • image.png
  1. 联系禅道管理员,给当前用户分配禅道项目经理角色
  • image.png
  1. 创建项目集, 填写相关参数
  • image.png

  • image.png

  1. 在指定项目集下创建项目,填写相关参数,项目代码不能为中文
  • image.png
  1. 分配项目成员到指定项目
  • image.png

创建应用服务

前提

  • 当前用户有可以访问的项目

目的

  • 创建应用服务,应用于开发, 管理代码仓库

使用


  • 在devops首页进入要创建应用服务的项目, 首页只会展示当前登录用户有权限能访问的项目

    • image.png
  • 点击应用服务列表左边的创建应用服务按钮

    • image.png

    • image.png

  • 内置代码仓库,使用devops平台内置部署的gitlab

    • 优势: 初始化.gitlab-ci文件和Dockerfile以及基本代码架构
      ,不需要任何修改,即可运行ci
    • 劣势:适合服务从0开发,不适合已有的代码仓库
  • 关联Gitlab仓库,使用devops平台外部使用的gitlab(需要填写仓库地址,有仓库maintainer或者owner), 参数详情详见下面介绍

    • 优势:适合已有的代码仓库,使用gitlab管理的
    • 劣势:会初始化.gitlab-ci文件和Dockerfile, 但是根据代码仓库特殊需求可能需要对.gitlab-ci文件和Dockerfile进行简单修改
  • 接入例子,见文档最后

  • 参数介绍

参数必须说明
服务编码应用服务的编码,由字母开头,只能由字母数字以及中划线和下划线组成,为应用服务的编码
服务模板应用服务的模板类型,目前支持maven单模块,父子模块,用于生成不同语言类型的初始化代码或代码结构
服务名称应用服务的名称
代码仓库代码仓库类型,内置Gitlab仓库会使用内置gitlab创建新的代码仓库,关联Gitlab会绑定外部gitlab代码仓库, 结合服务模板使用
流水线默认是选择自定义流水线,需要绑定一个流水线,界面上自定义,另外一个是内置,系统生成默认流水线
自动构建自动构建是指应用服务关联代码仓库有新的代码提交后自动触发ci持续集成过程
自动部署自动部署是指应用服务的ci流程生成新的镜像制品后,自动触发cd流程,部署应用服务到paas平台
仓库配置关联gitlab仓库时必填, 外部gitlab代码仓库地址
私有token关联gitlab仓库时选填,当选择私有Token方式授权时,需要填写,取值为gitlab用户设置中的access_token
用户名关联gitlab仓库时选填,当选择用户名密码方式授权时,需要填写,取值为登录gitlab的用户名
密码关联gitlab仓库时选填,当选择用户名密码方式授权时,需要填写,取值为登录gitlab的密码

修改应用服务

  • 从应用服务列表中点击应用服务详情,可以修改应用服务是否开启自动构建或者自动部署功能

    • image.png
  • 内置流水线可以切换成自定义流水线,自定义流水线可以绑定新的流水线

  • 自动构建:开启后,代码提交就会自动触发ci流程

  • 自动部署,可以开启服务在指定环境是否开启自动部署,开启后,ci流程结束,生成制品镜像,会自动部署到指定环境

添加子模块

  • 在应用服务列表中类型为maven多模块的应用服务,可以添加子模块,并不是添加代码模块,只是方便新增的模块接入ci

    • image.png

获取gitlab的个人token

  • 登录系统跳转到gitlab
    • image.png

    • image.png

流水线管理

目的

  • 用户使用流水线模块自定义应用服务所需要的流水线

使用

  • 进入devops平台左边菜单栏的流水线管理,点击创建流水线

    • image.png
  • 选择指定的流水线模板

    • image.png
  • 个性化自定义流水线阶段

    • image.png
  • 阶段可配置参数

参数数据格式参数介绍
镜像环境string该任务阶段运行所需要的镜像环境
阶段名称string该任务阶段所属阶段名称
阶段编码string该任务阶段所属阶段编码
脚本命令string该任务阶段执行的脚本
RunnerList该任务阶段在那个runner执行,不必填, 一般情况使用默认值即可
执行条件-分支object除了某分支都执行,或者只有指定分支才执行
执行条件-变量object除了变量等于某值的时候执行,仅当变量等于某值的时候执行
制品目录List下载的制品目录,会传到下个任务阶段供下个阶段使用
保存时间string对应artifacts,制品过期时间,单位为s, 过期不可下载,默认30天
  • 环境变量配置, 全局配置,流水线阶段都可使用,使用格式${变量名},例如${HARBOR_URL}

  • 流水线创建后,上一步创建应用服务的可以选择,选择完后会在代码仓库初始化.gitlab-ci文件和Dockerfile文件

    • image.png

构建应用服务

前提

  • 内置或者外置gitlab配置好gitlab-runner
  • 代码仓库编写完正确的gitlab-ci文件

目的

  • 编译打包代码
  • 质量检测
  • 生成镜像制品

使用

  • 进入devops平台左边菜单栏的代码管理, 点击分支子菜单,该列表展示了应用服务关联代码仓库的分支列表,可以点击分支数据的最后一列,手动构建应用服务(如开启了自动构建,可以省略这一步),触发ci流程。如果是maven多模块的应用服务,可以选择要构建的子服务

    • image.png
  • 应用服务构建之后,点击持续集成tab, 可以查看该应用服务所有的ci流水线执行情况,点击具体的任务可以插件具体的任务执行日志

    • image.png
  • 持续集成,一次ci流程完之后,如果ci过程中有执行sonar代码检查,则可以查看代码质量tab,查看代码质量情况

    • image.png

镜像仓库

前提

  • 应用服务能够正常构建成功

目的

  • 查看应用服务的镜像制品,并对镜像制品进行部署,发布到paas平台

使用


  • 点击devops平台左边菜单栏的镜像仓库菜单,当应用服务手动构建或自动构建完成后,会生成镜像制品,该镜像制品可以部署到梧桐paas

    • image.png
  • 镜像制品部署, 可以指定应用服务依赖的环境变量,可以指定应用服务依赖的服务或者中间件

    • image.png

部署历史

前提

  • 应用服务镜像制品能够成功部署到paas平台

目的

  • 查看应用服务的部署历史情况,并可以跳转到paas平台查看应用服务部署详情

使用

  • 点击devops平台左边菜单栏的部署历史菜单,可以看到某个应用服务的部署记录,并跳转到Paas查看应用服务部署详情,进行高级设置
    • image.png

    • image.png

外部应用服务接入案例

maven单模块

  • 创建流水线,选择maven单模块, 该流水线包含3个步骤 代码检测-代码打包-镜像制作

  • 质量检测 sonarqube检测java代码,不需要,可以删除该阶段

  • 代码打包,使用maven package打包, 必须, 默认持久化的制品目录是targer/app.jar

    • image.png
  • 镜像制作,Dockerfile默认使用target/app.jar(该文件创建应用服务时,会自动生成在代码仓库的代码仓库的main分支或者master分支,优先main分支根目录)

FROM adoptopenjdk/openjdk8

ENV  jar_name=app

RUN mkdir /talkweb-apps

COPY target/${jar_name}.jar /talkweb-apps/app.jar

WORKDIR /talkweb-apps

ENTRYPOINT ["java", "-Djava.awt.headless=true", "-jar",  "/talkweb-apps/app.jar"]

  • 环境变量如不需要新增的话,直接保存流水线即可

  • 流水线创建成功后,去到应用服务界面,创建应用服务

    • image.png
  • 创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改

  • 应用服务创建之后,就可以在代码仓库-分支管理处点击构建, 构建可以设置环境变量,环境变量绑定分支,适应有些项目在不同分支可能有不同的构建需求, 该环境变量也可以是创建流水线时那边定义的全局变量

    • image.png

    • image.png

  • 应用服务构建之后,可以在代码仓库-流水线处查看该次构建的状态,若每个阶段都是绿色代表成功,若失败点击失败的任务,跳转查看失败原因,定位问题

    • image.png
  • 特殊需求,如果打包结果不是target/app.jar, 比如target/xxx-snapthot-1.0.jar或者xxx-server/target/app.jar, 此时需求修改代码打包阶段和镜像制作阶段, 将生成的jar包复制成Dockerfile需要的文件目录和名称

    • image.png
    • image.png

War包类型

  • 创建流水线,选择War包类型, 该流水线包含2个步骤 代码打包-镜像制作

  • 代码打包,使用ant插件打包, 必须, 默认持久化的制品目录是仓库根目录下的app.war,

    • image.png
  • 代码打包,会默认在代码仓库代码仓库的main分支或者master分支,优先main分支分支的根目录下生成build.xml文件,用于ant插件打包生成war包

<?xml version="1.0" encoding="UTF-8"?>

<project name="app" default="generwar" basedir=".">

    <property name="build" value="${basedir}/build" />

    <property name="build.class" value="${build}/classes"/>

    <property name="src" value="${basedir}/src" />

    <property name="webRoot" value="${basedir}/WebRoot"/>

    <property name="lib" value="${webRoot}/WEB-INF/lib"/>

    <!--定义CLASSPACH,编译时用到你外部加入的包-->

    <path id="classpath">

        <pathelement location="${src}" />

        <fileset dir="${lib}" includes="***.jar" />

    </path>


    <!--创建一个临时目录-->

    <target name="init" description="创建目录">

        <echo message="创建目录--以执行"/>

        <mkdir dir="${build.class}" />

    </target>



    <!--编译java源文件-->

    <target name="compile" description="编译文件" depends="init">

        <echo message="编译文件"/>

        <javac srcdir="${src}" destdir="${build.class}">

            <classpath refid="classpath" />

            <compilerarg line="-encoding UTF-8"/>
        </javac>

    </target>



    <!--打成WAR包-->

    <target name="generwar" depends="compile">

        <echo message="打成WAR"/>

        <war destfile="app.war" webxml="${webRoot}/WEB-INF/web.xml" >

            <fileset dir="WebRoot" ></fileset>

            <lib dir="${lib}"/>

            <classes dir="${build.class}"/>

        </war>
    </target>

</project>


  • 镜像制作,Dockerfile默认使用app.war(该文件创建应用服务时,会自动生成在代码仓库的代码仓库的main分支或者master分支,优先main分支根目录)
FROM devhub.devcloud.talkweb.com.cn:1080/base/war:0.1.0

ENV  war_name=app

RUN  rm -rf /usr/local/apache-tomcat-9.0.62/webapps/ROOT

COPY ${war_name}.war /usr/local/apache-tomcat-9.0.62/webapps/ROOT.war


  • 环境变量如不需要新增的话,直接保存流水线即可

  • 流水线创建成功后,去到应用服务界面,创建应用服务

    • image.png
  • 创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件以及一个build.xml文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改

  • 应用服务创建之后,就可以在代码仓库-分支管理处点击构建, 构建可以设置环境变量,环境变量绑定分支,适应有些项目在不同分支可能有不同的构建需求, 该环境变量也可以是创建流水线时那边定义的全局变量

    • image.png

    • image.png

maven多模块

  • 创建流水线,选择maven多模块, 该流水线包含3个步骤 代码检查-代码打包-镜像制作

  • 质量检测 sonarqube检测java代码,不需要,可以删除该阶段

  • 代码打包,使用maven package打包, 必需, 由于maven多模块需要ci-cd的模块比较多,所以制品目录做成了变量${package_path}/target/${jar_name}.jar,具体构建那个子模块,在应用服务构建的时候指定

    • image.png
  • 镜像制作, 不需要做任何修改

  • 环境变量如不需要新增的话,直接保存流水线即可

  • 流水线创建成功后,去到应用服务界面,创建应用服务

    • image.png
  • 创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改

  • 应用服务创建之后,就可以在代码仓库-分支管理处点击构建, maven多模块构建时,默认有两个变量,一个是打包路径,一个是jar包名称(对应流水线制品路径中设置的变量) , 这样就达到了构建不同子模块的功能

    • image.png

    • image.png

  • 打包路径 package_path, 取值为子模块主函数所在module,例如部署platform-server, 取值为(wutong-devops-platform/wutong-devops-platform-server),原理是mvn clean package -pl 子模块路径 -am

    • image.png
  • jar包名称,jar_name取值为子模块jar包名称去掉.jar后缀

  • 应用服务构建之后,可以在代码仓库-流水线处查看该次构建的状态,若每个阶段都是绿色代表成功,若失败点击失败的任务,跳转查看失败原因,定位问题

    • image.png

提醒: 该方式只适合多模块代码仓库下每个模块的dockerfile内容一致,没有特殊需求,如有其它需求,也需要按需修改自定义流水线或者Dockerfile

  • 例如,打包方式,有的模块是将依赖和代码分开打包,服务运行是需要target目录下的jar和target目录下的lib目录,此时如果只缓存jar包,服务最终会因为缺少依赖而起不来

  • 修改方式,修改代码打包阶段,修改镜像制作阶段,修改代码仓库代码仓库的main分支或者master分支,优先main分支的Dockerfile

    • image.png
    • image.png
    • image.png

vue(React)前端

  • 创建流水线,选择Node.js, 该流水线包含3个步骤 质量检测-代码打包-镜像制作, 原理是将打包好的dist目录放在nginx静态资源目录进行访问

  • 质量检测 sonarqube检测java代码,不需要,可以删除该阶段

  • 代码打包,使用yarn install, yarn run build打包, 必需,制品目录为打包出来的dist目录

    • image.png
  • 镜像制作, 不需要做任何修改

  • 环境变量如不需要新增的话,直接保存流水线即可

  • 流水线创建成功后,去到应用服务界面,创建应用服务

    • image.png
  • 创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改

  • 应用服务创建之后,就可以在代码仓库-分支管理处点击构建

  • 应用服务构建之后,可以在代码仓库-流水线处查看该次构建的状态,若每个阶段都是绿色代表成功,若失败点击失败的任务,跳转查看失败原因,定位问题

paas组件功能介绍

  • 环境变量,用于替换后端服务配置文件变量,例如mysql连接地址,redis连接地址, nacos配置信息,加载指定的配置文件等。常用于后端服务,例如

    • image.png
  • 环境配置文件, 用于挂载服务所需的一些配置文件,例如前端一般使用nginx作静态代理,需要挂载nginx的conf文件来设置相关配置

    • image.png
server {

        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

 
     location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
         try_files $uri $uri/ /index.html;
    }

    location ^~ /gateway/ {
        proxy_pass http://wutong.talkweb.com.cn/idaas-gateway/;
        client_max_body_size 20m;
        proxy_cookie_path / /;
        proxy_pass_header Set_Cookie;
    }

    }
  • 存储设置, 作用就是用于持久化应用服务运行环境下的某个目录,例如文件目录等

    • image.png
  • 依赖, 依赖的作用是服务间可以相互依赖,然后可以通过127.0.0.1:port本地网络去访问依赖的服务,例如前端依赖后端, 后端依赖mysql,redis, nacos等中间件,此时被依赖的服务不需要开启外网访问(但必须开启对内访问)

    • image.png
  • 伸缩, 伸缩的作用是配置服务运行时的cpu以及内存设置,以及是否高可用,可以配置多个实例同时运行(前提时服务支持高可用,没有分布式问题)

    • image.png
  • 端口, 端口是服务开启对内访问和对外访问的入口

    • 对内访问,如果服务需要被其它服务依赖,需要开启
    • 对外访问,如果服务需要外网访问,需要开启,目前支持http域名方式,和tcp端口的方式
      • image.png
文章标签: 常见问题
推荐指数:

真诚点赞 诚不我欺~

devops快速入门

点赞 收藏 评论