本文档目的旨在帮助第一次接触devops平台的开发人员快速入门
平台各服务部署成功,给当前开发人员分配devops应用权限以及devops功能权限
在devops首页进入要创建应用服务的项目, 首页只会展示当前登录用户有权限能访问的项目
点击应用服务列表左边的创建应用服务按钮
内置代码仓库,使用devops平台内置部署的gitlab
关联Gitlab仓库,使用devops平台外部使用的gitlab(需要填写仓库地址,有仓库maintainer或者owner), 参数详情详见下面介绍
接入例子,见文档最后
参数介绍
参数 | 必须 | 说明 |
---|---|---|
服务编码 | 是 | 应用服务的编码,由字母开头,只能由字母数字以及中划线和下划线组成,为应用服务的编码 |
服务模板 | 是 | 应用服务的模板类型,目前支持maven单模块,父子模块,用于生成不同语言类型的初始化代码或代码结构 |
服务名称 | 是 | 应用服务的名称 |
代码仓库 | 是 | 代码仓库类型,内置Gitlab仓库会使用内置gitlab创建新的代码仓库,关联Gitlab会绑定外部gitlab代码仓库, 结合服务模板使用 |
流水线 | 是 | 默认是选择自定义流水线,需要绑定一个流水线,界面上自定义,另外一个是内置,系统生成默认流水线 |
自动构建 | 否 | 自动构建是指应用服务关联代码仓库有新的代码提交后自动触发ci持续集成过程 |
自动部署 | 否 | 自动部署是指应用服务的ci流程生成新的镜像制品后,自动触发cd流程,部署应用服务到paas平台 |
仓库配置 | 否 | 关联gitlab仓库时必填, 外部gitlab代码仓库地址 |
私有token | 否 | 关联gitlab仓库时选填,当选择私有Token方式授权时,需要填写,取值为gitlab用户设置中的access_token |
用户名 | 否 | 关联gitlab仓库时选填,当选择用户名密码方式授权时,需要填写,取值为登录gitlab的用户名 |
密码 | 否 | 关联gitlab仓库时选填,当选择用户名密码方式授权时,需要填写,取值为登录gitlab的密码 |
从应用服务列表中点击应用服务详情,可以修改应用服务是否开启自动构建或者自动部署功能
内置流水线可以切换成自定义流水线,自定义流水线可以绑定新的流水线
自动构建:开启后,代码提交就会自动触发ci流程
自动部署,可以开启服务在指定环境是否开启自动部署,开启后,ci流程结束,生成制品镜像,会自动部署到指定环境
在应用服务列表中类型为maven多模块的应用服务,可以添加子模块,并不是添加代码模块,只是方便新增的模块接入ci
进入devops平台左边菜单栏的流水线管理,点击创建流水线
选择指定的流水线模板
个性化自定义流水线阶段
阶段可配置参数
参数 | 数据格式 | 参数介绍 |
---|---|---|
镜像环境 | string | 该任务阶段运行所需要的镜像环境 |
阶段名称 | string | 该任务阶段所属阶段名称 |
阶段编码 | string | 该任务阶段所属阶段编码 |
脚本命令 | string | 该任务阶段执行的脚本 |
Runner | List | 该任务阶段在那个runner执行,不必填, 一般情况使用默认值即可 |
执行条件-分支 | object | 除了某分支都执行,或者只有指定分支才执行 |
执行条件-变量 | object | 除了变量等于某值的时候执行,仅当变量等于某值的时候执行 |
制品目录 | List | 下载的制品目录,会传到下个任务阶段供下个阶段使用 |
保存时间 | string | 对应artifacts,制品过期时间,单位为s, 过期不可下载,默认30天 |
环境变量配置, 全局配置,流水线阶段都可使用,使用格式${变量名}
,例如${HARBOR_URL}
流水线创建后,上一步创建应用服务的可以选择,选择完后会在代码仓库初始化.gitlab-ci文件和Dockerfile文件
进入devops平台左边菜单栏的代码管理, 点击分支子菜单,该列表展示了应用服务关联代码仓库的分支列表,可以点击分支数据的最后一列,手动构建应用服务(如开启了自动构建,可以省略这一步),触发ci流程。如果是maven多模块的应用服务,可以选择要构建的子服务
应用服务构建之后,点击持续集成tab, 可以查看该应用服务所有的ci流水线执行情况,点击具体的任务可以插件具体的任务执行日志
持续集成,一次ci流程完之后,如果ci过程中有执行sonar代码检查,则可以查看代码质量tab,查看代码质量情况
点击devops平台左边菜单栏的镜像仓库菜单,当应用服务手动构建或自动构建完成后,会生成镜像制品,该镜像制品可以部署到梧桐paas
镜像制品部署, 可以指定应用服务依赖的环境变量,可以指定应用服务依赖的服务或者中间件
创建流水线,选择maven单模块, 该流水线包含3个步骤 代码检测-代码打包-镜像制作
质量检测 sonarqube检测java代码,不需要,可以删除该阶段
代码打包,使用maven package打包, 必须, 默认持久化的制品目录是targer/app.jar
镜像制作,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"]
环境变量如不需要新增的话,直接保存流水线即可
流水线创建成功后,去到应用服务界面,创建应用服务
创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改
应用服务创建之后,就可以在代码仓库-分支管理处点击构建, 构建可以设置环境变量,环境变量绑定分支,适应有些项目在不同分支可能有不同的构建需求, 该环境变量也可以是创建流水线时那边定义的全局变量
应用服务构建之后,可以在代码仓库-流水线处查看该次构建的状态,若每个阶段都是绿色代表成功,若失败点击失败的任务,跳转查看失败原因,定位问题
特殊需求,如果打包结果不是target/app.jar
, 比如target/xxx-snapthot-1.0.jar
或者xxx-server/target/app.jar
, 此时需求修改代码打包阶段和镜像制作阶段, 将生成的jar包复制成Dockerfile需要的文件目录和名称
创建流水线,选择War包类型, 该流水线包含2个步骤 代码打包-镜像制作
代码打包,使用ant插件打包, 必须, 默认持久化的制品目录是仓库根目录下的app.war,
代码打包,会默认在代码仓库代码仓库的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>
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
环境变量如不需要新增的话,直接保存流水线即可
流水线创建成功后,去到应用服务界面,创建应用服务
创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件以及一个build.xml文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改
应用服务创建之后,就可以在代码仓库-分支管理处点击构建, 构建可以设置环境变量,环境变量绑定分支,适应有些项目在不同分支可能有不同的构建需求, 该环境变量也可以是创建流水线时那边定义的全局变量
创建流水线,选择maven多模块, 该流水线包含3个步骤 代码检查-代码打包-镜像制作
质量检测 sonarqube检测java代码,不需要,可以删除该阶段
代码打包,使用maven package打包, 必需, 由于maven多模块需要ci-cd的模块比较多,所以制品目录做成了变量${package_path}/target/${jar_name}.jar
,具体构建那个子模块,在应用服务构建的时候指定
镜像制作, 不需要做任何修改
环境变量如不需要新增的话,直接保存流水线即可
流水线创建成功后,去到应用服务界面,创建应用服务
创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改
应用服务创建之后,就可以在代码仓库-分支管理处点击构建, maven多模块构建时,默认有两个变量,一个是打包路径,一个是jar包名称(对应流水线制品路径中设置的变量) , 这样就达到了构建不同子模块的功能
打包路径 package_path, 取值为子模块主函数所在module,例如部署platform-server, 取值为(wutong-devops-platform/wutong-devops-platform-server),原理是mvn clean package -pl 子模块路径 -am
jar包名称,jar_name取值为子模块jar包名称去掉.jar后缀
应用服务构建之后,可以在代码仓库-流水线处查看该次构建的状态,若每个阶段都是绿色代表成功,若失败点击失败的任务,跳转查看失败原因,定位问题
提醒: 该方式只适合多模块代码仓库下每个模块的dockerfile内容一致,没有特殊需求,如有其它需求,也需要按需修改自定义流水线或者Dockerfile
例如,打包方式,有的模块是将依赖和代码分开打包,服务运行是需要target目录下的jar和target目录下的lib目录,此时如果只缓存jar包,服务最终会因为缺少依赖而起不来
修改方式,修改代码打包阶段,修改镜像制作阶段,修改代码仓库代码仓库的main分支或者master分支,优先main分支的Dockerfile
创建流水线,选择Node.js, 该流水线包含3个步骤 质量检测-代码打包-镜像制作, 原理是将打包好的dist目录放在nginx静态资源目录进行访问
质量检测 sonarqube检测java代码,不需要,可以删除该阶段
代码打包,使用yarn install, yarn run build
打包, 必需,制品目录为打包出来的dist目录
镜像制作, 不需要做任何修改
环境变量如不需要新增的话,直接保存流水线即可
流水线创建成功后,去到应用服务界面,创建应用服务
创建成功后, 代码仓库的main分支或者master分支,优先main分支会初始化一个gitlab-ci文件和Dockerfile文件,如其它分支也需要ci-cd功能,复制拷贝过去即可,不需要做任何更改
应用服务创建之后,就可以在代码仓库-分支管理处点击构建
应用服务构建之后,可以在代码仓库-流水线处查看该次构建的状态,若每个阶段都是绿色代表成功,若失败点击失败的任务,跳转查看失败原因,定位问题
环境变量,用于替换后端服务配置文件变量,例如mysql连接地址,redis连接地址, nacos配置信息,加载指定的配置文件等。常用于后端服务,例如
环境配置文件, 用于挂载服务所需的一些配置文件,例如前端一般使用nginx作静态代理,需要挂载nginx的conf文件来设置相关配置
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;
}
}
存储设置, 作用就是用于持久化应用服务运行环境下的某个目录,例如文件目录等
依赖, 依赖的作用是服务间可以相互依赖,然后可以通过127.0.0.1:port本地网络去访问依赖的服务,例如前端依赖后端, 后端依赖mysql,redis, nacos等中间件,此时被依赖的服务不需要开启外网访问(但必须开启对内访问)
伸缩, 伸缩的作用是配置服务运行时的cpu以及内存设置,以及是否高可用,可以配置多个实例同时运行(前提时服务支持高可用,没有分布式问题)
端口, 端口是服务开启对内访问和对外访问的入口
真诚点赞 诚不我欺~