1 内建插件
系统内置了如下内建插件:
-
kubectl : 用于发布kubernetes服务,支持原生kubectl的所有命令。
-
terraform :用于资源编排。
-
kubestar.v2(推荐) : 用于通过kubestar发布kubernetes服务。
-
kubestar(不推荐): 同上。
-
awsecs : 用于发布AWS中ECS服务。
-
sendemail :用于发送邮件。
-
sendmesg : 用于发送消息,根据连接器配置而定,可能是短信也可能是im消息。
-
flowcaller : 用于调用流水线进行应用群发布。
-
cdnrefresh : 对各CDN厂商的CDN进行刷新。
1.1 说明
为了扩展作业步骤所能完成的处理逻辑,OPEN-C3定义了一个内建插件的功能。
内建插件是一个可执行的二进制程序或者脚本,执行过程会在OPEN-C3所部署的服务器中执行。
可以根据需要开发,如需要添加新的内建插件,请提交插件到如下地址:
https://github.com/open-c3/open-c3/tree/v2.2.0/JOB/buildin/ # 其中v2.2.0 是您使用的OPEN-C3版本。
1.2 开发
通过环境变量往插件中传递参数,参数如下:
-
$ENV{CONFIGPATH}: 配置文件,也就是脚本内容文本文件路径
-
$ENV{JOBUUID} : 运行该任务的作业的UUID,如不是作业该变量为空
-
$ENV{NODE} : 机器列表,用逗号分隔
-
$ENV{TICKETFILE} : 票据文件路径
-
$ENV{TIMEOUT} : 超时时间
-
$ENV{TREEID} : 服务树ID
-
$ENV{TASKUUID} : 任务UUID
返回: 插件需要在标准输出中输出“机器ip:ok”,每个操作对象一行,表示该操作对象操作成功。
1.3 插件
1.3.1 kubectl
kubectl 插件支持原生的kubectl命令,需要两个部分配置。
先在票据管理中配置好kubeconfig,在作业步骤中选择上票据后在脚本参数中写上kubectl命令的参数。
其中kubectl可能需要文件,如apply -f app.yaml,文件来源可以有如下两种
情况1: 文件来源于代码仓库
如果是在流水线中使用的kubectl插件,kubectl运行的当前目录下有构建当前版本的文件,可以直接使用。
如代码中有abc.yaml文件,可以直接通过“apply -f abc.yaml”来使用文件。
情况二: 文件来源于当前步骤的配置
可以把需要的文件内容写到“脚本内容”中,然后可以通过关键字CONFIGFILE来指定,如:apply -f CONFIGFILE。
票据管理
在个人票据中管理自己的票据。票据类型选择“作业内建插件”。
票据内容为kubeconfig的内容。
步骤配置例子
- 镜像更新
脚本参数:set image deployment/nginx c3test-nginx=nginx:$version -n c3test
- 发布检查
脚本参数:check c3test deployment/nginx c3test-nginx=nginx:$version
注:check是OPEN-C3扩展的参数。
- 应用发布
#!kubectl
---
apiVersion: v1
kind: Pod
metadata:
name: kube100-site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx:DEPLOYVERSION
ports:
- containerPort: 80
- name: flaskapp-demo
image: jcdemo/flaskapp
ports:
- containerPort: 5000
脚本中用到了关键字${VERSION}, 系统调用过程如果存在构建版本$version,会用$version变量的内容替换${VERSION}。
脚本参数:apply -f CONFIGFILE -n c3test
- 引用代码仓库中的文件
脚本参数:apply -f pod-app.yaml -n c3test
维护注意
需要手动维护OPEN-C3服务所在机器的kubectl命令【单机版更新的是容器中的kubectl】。
wget https://github.com/open-c3/open-c3-install-cache/job-buildin/kubectl -O /bin/kubectl
chmod +x /bin/kubectl
1.3.2 terraform
OPEN-C3提供了内建插件用于调用terraform,通过这个插件可以做资源编排。
配置文件
config文件配置
使用内建插件,点击选择terraform类型。
脚本内容示例如下:
#!terraform
provider "aws" {
access_key = "XXXXXX"
secret_key = "XXXXXX"
region = "us-east-1"
}
resource "aws_instance" "web" {
ami = "ami-2757f631"
instance_type = "t2.micro"
count = 3
subnet_id = "${var.subnetid}"
}
resource "aws_lb" "weblb" {
name = "weblb"
internal = false
load_balancer_type = "application"
security_groups = "${var.sgs}"
subnets = "${var.subnetids}"
enable_deletion_protection = false
}
resource "aws_lb_listener" "front_end" {
load_balancer_arn = aws_lb.weblb.arn
port = "80"
protocol = "HTTP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.webserver.arn
}
}
resource "aws_lb_target_group" "webserver" {
name = "webserver-targetgroup"
port = 80
protocol = "HTTP"
vpc_id = "${var.vpcid}"
}
resource "aws_lb_target_group_attachment" "web1" {
target_group_arn = aws_lb_target_group.webserver.arn
target_id = aws_instance.web[0].id
port = 80
}
resource "aws_lb_target_group_attachment" "web2" {
target_group_arn = aws_lb_target_group.webserver.arn
target_id = aws_instance.web[1].id
port = 80
}
resource "aws_lb_target_group_attachment" "test" {
target_group_arn = aws_lb_target_group.webserver.arn
target_id = aws_instance.web[0].id
port = 80
}
variable "vpcid" {
default = "vpc-07d7ed83ee7375813"
}
variable "subnetid" {
default = "subnet-0b7fd82a07b9b7f66"
}
variable "subnetids" {
default = ["subnet-0b7fd82a07b9b7f66", "subnet-08966f2af1fd1e3d8"]
}
variable "sgs" {
default = ["sg-08f7116e2c9325edb"]
}
票据: 空。上面配置的方式中key已经在配置文件中,所以这里不需要票据。
脚本参数: config
注: 每个terraform作业在系统中都会有一个独立的目录存放config文件。每个config可以编辑一个文件。
可以添加多个config步骤,如脚本参数中写 config lb.tf 。
则在目录中会有一个lb.tf文件。当脚本参数为config时候,其实是config main.tf。
- 操作动作
有四个操作动作:init、plan、apply、destory
四个动作可以在一个步骤中执行,执行过程中按照脚本参数的顺序进行调用。
所以可以配置如下:
1.1. init & plan
使用内建插件,点击选择terraform类型。
脚本内容固定为如下:
#!terraform
票据: 空 脚本参数: init plan
这里是把init和plan两个动作在这里按照顺序执行,执行后可以在日志中看出如果真实执行apply的资源变化情况。
正常应该在plan之后添加一步审批操作,审批后执行下一步的apply。
1.2. apply
使用内建插件,点击选择terraform类型。
脚本内容固定为如下:
#!terraform
票据: 空 脚本参数: apply
1.3. destroy
和apply几乎一样,把脚本参数换成destory即可。destroy用户销毁资源 。
票据
下面以AWS为例说明怎么管理票据,AWS通过下面两个环境变量来控制访问的key。
export AWS_ACCESS_KEY_ID="XXXX"
export AWS_SECRET_ACCESS_KEY="XXXX"
每一行的内容格式必须为: /^export\s+[A-Za-z0-9_]+="[A-Za-z0-9\/]+"\s*$/ 否则系统会提示错误。
如果确定使用票据的方式,在前面配置作业的过程中,除了config步骤,其他操作terraform 的步骤选择上票据。
维护注意
需要手动维护OPEN-C3服务所在机器的terraform命令【单机版更新的是容器中的terraform】。
wget https://github.com/open-c3/open-c3-install-cache/job-buildin/terraform -O /bin/terraform
chmod +x /bin/terraform
1.3.3 awsecs
awsecs作业内建插件用于发布AWS的ECS服务。
票据
在流水线使用过程中CI部分需要用awsecr_push_image.pl把构建的包build成镜像上传到AWS的ECR服务中。
配置作业流程
- apply (应用)
发布应用,是一次发布的操作。
使用内建插件,点击awsecs类型。
脚本内容:
#!awsecs
task-definition: test-front-service
region: cn-northwest-1
cluster: testfoo
service: test-front-service
脚本参数: apply $version
- check(检查发布状态)
配置和apply基本一样,在脚本参数改成 check 即可。
系统会在超时时间内每10秒检查一下服务的状态,直到对应的服务当前检查的版本是Running状态后退出。
维护注意
使用该插件需要安装aws命令,安装方式awsecr_push_image.pl 处查看。
1.3.4 sendemail
sendemail插件用于发送邮件。发送的邮件标题默认会添加“OPEN-C3:”前缀。
注: 该部分不会进行用户地址簿转换,需要直接写邮箱地址。
使用方式
脚本内容第一行为邮件标题,其他脚本内容为邮件内容
脚本参数为邮件接收人列表,多个人用逗号或者空格分隔。
例:
脚本内容:
#!sendemail
邮件测试
邮件内容第一行
邮件内容第二行 abc
脚本参数:
foo@abc.com,bar@gmail.com
1.3.5 sendmesg
sendmesg插件用于发送消息(短信或者飞书等,根据连接器中配置的消息出口而定)。
发送的消息默认会添加“OPEN-C3:”前缀。
注: 该部分不会进行用户地址簿转换,如果要发送短信需要直接写手机号。
使用方式
脚本内容为消息内容
脚本参数为消息接收人列表,多个人用逗号或者空格分隔。
例:
脚本内容:
#!sendmesg
消息内容123
消息内容第二行 。。。
脚本参数:
foo@abc.com,bar@gmail.com,133113xxxxx
1.3.6 flowcaller
OPEN-C3提供的一个方式,支持在作业步骤中可以调用流水线进行应用群发布。
使用
- 学习流水线用法
学习流水线的用法。
- 在作业中调用流水线
2.1. 插件说明
选择内建插件:flowcaller
插件内容:
#!flowcaller # 插件名称
flowid: 70 # 流水线编号
envname: online # 调用的环境,test为测试环境,online为线上环境
env: # 环境变量,没有可以为空
foo: ${foo} # 具体的环境变量,其中${foo}格式的可以从脚本参数自动传递进去
脚本参数: $version $foo_version $foo_rollback_version foo=$foo $ip=$ip
参数格式说明:
$version【固定内容】
$foo_version【传递给流水线的发布版本】
$foo_rollback_version【传递给流水线的回滚版本】
foo=$foo【可以是多个,用于替换插件内容,用于替换流水线变量】
$ip=$ip 【固定内容】
2.2. 作业变量说明
-
在执行时变量的顺序会根据描述的文本进行排序。
-
固定变量【点击查看OPEN-C3中的作业变量用法】:
version: deploy
rollbackVersion: rollback
ip: group:val=openc3skipnode
-
非固定变量属于自定义部分,根据实际情况进行配置,如应用群中的发布版本号都一样,就可以配置一样的变量名。
-
添加到轻应用
学习轻应用的用法,把配置的作业添加到轻应用。
- 执行
进到轻应用列表页:
点击进入配置的应用群发布:
1.3.7 tsunamiudp
tsunamiudp 通过UDP协议传输文件,加速文件分发。
以下说明适用于单机版.
使用
1. 使用内建插件tsunamiudp。
2. 插件参数填写要加速的代理的ip地址,多个地址用英文逗号分隔。
维护
- 添加配置
在配置文件/data/open-c3/Connector/config.inix 中添加如下配置
tsunamiudp:
serverip: 10.x.x.x #tsunamiudp服务端的地址,也就是openc3单机版本的地址。
- 安装tsunami-udp
在单机版本和需要加速的代理服务器中安装tsunami-udp。安装方式如下
# cd /data
# git clone https://github.com/cheetahmobile/tsunami-udp
# cd tsunami-udp
# ./recompile.sh
#注: 如有报错请请安装工具依赖 yum install autoconf automake libtool
#安装路径固定在/data目录中。
- 启动tsunami-udp服务端
在OPENC3单机版本的宿主机上服务守护进程:
/opt/mydan/dan/bootstrap/exec/tsunamiudp
#!/bin/bash
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$MYDanPATH/bin
os=$(uname)
_exit () { echo $1; sleep 60; exit 1; }
if [ "x$os" = "x" ];then
_exit "uname fail"
fi
echo "os: $os";
if [ "x$os" == "xLinux" ] ;then
ulimit -n 655350 || _exit "ulimit -n fail";
ulimit -u 102400 || _exit "ulimit -u fail";
ulimit -s 10240 || _exit "ulimit -s fail";
fi
cd /data/open-c3-data/glusterfs/tsunamiudp || _exit "chdir fail";
pwd
exec /data/tsunami-udp/server/tsunamid 2>&1
- 在代理中添加插件
把OPENC3单机版本的下面文件
/data/open-c3/JOB/buildin/tsunamiudp.code/tsunami2proxy
拷贝到代理机的如下路径(该文件要有可执行权限)
/opt/mydan/dan/agent/code/tsunami2proxy
- 添加网络访问权限
开放服务端(OPENC3的机器)的51038 TCP端口,允许需要加速的代理机访问。
开放代理机的51038-51058 UDP端口,允许OPENC3机器访问(服务端)。
1.3.8 localbash
localbash 在C3上执行shell命令。
使用
命令会在c3的docker容器中执行该命令。