OpsAny数字化研发平台-社区版部署¶
研发平台部署¶
OpsAny数字化研发平台,可以管理应用的资源、CI/CD流水线、持续部署、制品仓库等。需要依赖第三方的开源工具,需要单独准备主机部署Gitlab、Jenkins、Nexus、StackStorm,或者直接集成企业已经部署的开源工具,需要注意版本问题,有一定的使用门槛。如果你对DevOps不熟悉或者完全不了解,或者内存少于16G,请不要部署!【人生苦短,何必自寻烦恼!- OpsAny】
1.设置admin密码
在执行安装前,请注意,你是否修改过admin的密码,默认情况下会从$INSTALL_PATH/conf/.passwd_env获取,如果你修改过密码,请修改此文件中对应的值。
INSTALL_PATH=/data/opsany
vim $INSTALL_PATH/conf/.passwd_env
2.使用自动化脚本部署应用平台。
# 该命令会部署应用平台、流水线、持续部署、制品仓库,四个平台。
cd /opt/opsany-paas/install/
./saas-ce-install.sh dev
刷新工作台,或者退出重新登录,即可在导航菜单查看到新增的平台。
3.打开【平台导航】-【流水线/持续部署/制品仓库】-【系统设置】,进行工具的集成,如没有工具,请根据下面的文档进行部署。 注意:Gitlab和Jenkins是使用的API Token,Nexus暂时使用的用户和密码验证。
应用平台依赖部署¶
请注意下方端口冲突的问题,自行解决部署问题。建设使用单独主机,系统配置:8C、16G内存,100G磁盘。
- Gitlab:版本必须大于13.12 监听端口:80 8080等。
- Jenkins:流水线依赖,版本必须大于2.328。需要安装Gitlab插件 监听端口:8008 8009
- Nexus: 制品仓库依赖,版本需要是3.x 监听端口:8014 8015
- StackStorm: 持续部署依赖,版本需要是3.6.0 监听端口:8005 9100 9102 9202
- SonarQube: 代码扫描,版本需要是9.9.6 监听端口:8016
部署Docker基础环境¶
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 请注意,不要整体复制粘贴执行,会造成有些命令执行不成功,但是又没发现。
# step 1: 安装必要的一些系统工具
sudo apt-get -y update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce jq uuid wget git ntpdate mysql-client
systemctl enable --now docker
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate time1.aliyun.com
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭SELinux和防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 请注意,不要整体复制粘贴执行,会造成有些命令执行不成功,但是又没发现。
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y git uuid wget docker-ce mariadb jq ntpdate unzip
systemctl enable --now docker
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate time1.aliyun.com
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭SELinux和防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 安装Docker和依赖的软件包
dnf config-manager --add-repo=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf -y install docker-ce --nobest
dnf -y install mariadb jq git uuid unzip
systemctl enable --now docker
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭SELinux和防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 安装Docker
dnf config-manager --add-repo=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf -y install docker-ce --nobest
systemctl enable --now docker
# 安装部署依赖的软件包
dnf -y install mariadb jq git uuid unzip wget
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭SELinux和防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 安装Docker
dnf config-manager --add-repo=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf -y install docker-ce --nobest
systemctl enable --now docker
# 安装部署依赖的软件包
dnf -y install mariadb jq git uuid unzip wget
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭SELinux和防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 安装Docker和依赖的软件包
yum -y install docker mariadb jq git uuid unzip wget
systemctl enable --now docker
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1.1 安装环境检查
- 检查主机是否可以正常访问互联网,主机内存不低于8G。
- 关闭SELinux和防火墙,设置规范化主机名,保证主机名可以解析。
- 可以使用IP地址访问OpsAny,如果使用域名访问,请确保域名可以真实解析(修改hosts无效)
1.2 安装Docker和MySQL客户端
# 安装Docker和依赖的软件包
zypper refresh
zypper install -y docker mariadb jq git uuid unzip wget
systemctl enable --now docker
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Jenkins流水线集成¶
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成和持续交付工具,Jenkins的前身Hudson是一个可扩展的持续集成引擎。官方网站https://jenkins.io/
1.安装Jenkins¶
目前Jenkins版本主要分为两个大的版本LTS长期支持版和周更新版。大家可以根据实际情况进行选择,本书选择的是当前的LTS版本,可以从这里获取最新版本和安装方法:https://pkg.jenkins.io/redhat/。
# Step1: 准备运行环境
INSTALL_PATH=/data/opsany
PAAS_DOCKER_REG=registry.cn-beijing.aliyuncs.com/opsany
mkdir -p ${INSTALL_PATH}/jenkins-home && chmod -R 777 ${INSTALL_PATH}/jenkins-home
# Step2: 启动Jenkins Master
docker run --restart=always --name opsany-devops-jenkins -t \
-v /etc/localtime:/etc/localtime:ro \
-v ${INSTALL_PATH}/jenkins-home:/var/jenkins_home \
-p 8008:8080 -p 8009:5000 \
-d ${PAAS_DOCKER_REG}/jenkins:2.452.2-lts
1.安装Jenkins
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y fontconfig java-11-openjdk jenkins
2.启动Jenkins
[root@linux-node2 ~]# vim /etc/sysconfig/jenkins
#修改端口为8008端口,为了防止和其它服务端口冲突
JENKINS_PORT="8008"
[root@linux-node2 ~]# vim /usr/lib/systemd/system/jenkins.service
Environment="JENKINS_PORT=8008"
[root@linux-node2 ~]# systemctl daemon-reload
[root@linux-node2 ~]# systemctl restart jenkins && systemctl enable jenkins
2.访问Jenkins¶
在浏览器输入http://192.168.56.12:8008
来访问jenkins,并进行初始化,全部默认参数即可。如果是云主机,请打开安全组的8008、8009端口。然后访问进行初始化操作。
1.首次访问要求输入初始化密码继续,可以直接从挂载路径获取。
cat ${INSTALL_PATH}/jenkins-home/secrets/initialAdminPassword
2.插件选择安装-【推荐插件】,请确保所有插件均正常成功安装。如果有安装失败的,请重试!
3.Jenkins插件安装¶
完成Jenkins初始化后,需要在Jenkins安装以下插件:
- Gitlab
- Nexus Artifact UploaderVersion
4.集成Jenkins到流水线平台¶
打开【流水线】-【系统设置】,点击右上角(新增工具),根据提示填写信息。
- Jenkins地址:Jenkins的访问地址,可以是内网IP地址,例如http://192.168.56.12:8008。
- 用户名:需要Jenkins的管理员用户,在安装Jenkins时设定的管理员用户。
- API Token:在Jenkins用户头像下拉菜单选择“设置”打开设置页面。在API Token配置项下方创建。
5.集成说明¶
- 在应用平台创建的每个应用,会自动在Jenkins上创建一个,应用唯一标识命名的文件夹。
- 在流水线平台创建的每个流水线,会创建在对应的应用的文件夹下。
- 如果在部署OpsAny之前已经有了Jenkins。可以根据上述要求创建文件夹,然后创建应用,即可自动对应起来。(文件夹名称是应用系统唯一标识)。
- 需要用户自行配置构建环境。
6.使用Jenkins进行构建¶
通常我们不建议直接使用Jenkins Master进行流水线构建,而是单独准备一台Jenkins Slave的主机,如果你想快速的演示流水线的功能,可以自行在Master容器中部署运行环境,例如:
安装Maven
docker exec -it --user root opsany-devops-jenkins /bin/bash
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources
apt update -y && apt install -y vim wget git
cd /usr/local/src
wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
tar zxf apache-maven-3.9.9-bin.tar.gz
mv apache-maven-3.9.9 /usr/local/
ln -s /usr/local/apache-maven-3.9.9/ /usr/local/maven
在后面流水线中可以直接使用绝对路径:/usr/local/maven/bin/mvn,注意,首次运行会下载依赖,时间较长。例如:
# 运行单元测试
/usr/local/maven/bin/mvn test
# 编译代码
/usr/local/maven/bin/mvn compile
# 生成部署包
/usr/local/maven/bin/mvn package
DevOps案例Java:https://gitee.com/unixhot/devops-demo-java.git
Nexus制品仓库集成¶
OpsAny支持Nexus制品仓库,Nexus是非常流行的免费制品仓库,而且是支持多种语言制品的管理。使用端口8014和8015。
1.准备运行环境。¶
INSTALL_PATH=/data/opsany
PAAS_DOCKER_REG=registry.cn-beijing.aliyuncs.com/opsany
mkdir -p ${INSTALL_PATH}/nexus-data && chmod -R 777 ${INSTALL_PATH}/nexus-data
2.启动nexus,并设置内存大小,挂载数据卷。¶
可以根据实际情况调整内存大小。-Xms500m -Xmx500m,如果内存足够,建议不低于4G。注意修改内存中的JVM的内存大小,测试设置500M可以,生产建议大约2G。
docker run -d -p 8014:8081 -p 8015:5000 --restart=always --name opsany-devops-nexus \
-v ${INSTALL_PATH}/nexus-data:/nexus-data \
-e INSTALL4J_ADD_VM_PARAMS="-Xms500m -Xmx500m -XX:MaxDirectMemorySize=500m" \
${PAAS_DOCKER_REG}/nexus3:3.37.0
3.访问Nexus,设置admin用户密码。¶
- 1.进行系统初始化
1)首次登录需要设置Admin密码。
cat ${INSTALL_PATH}/nexus-data/admin.password
2)普通用户请关闭匿名访问,选择:“Disable anonymous access”
3)默认Nexus会自动创建7个仓库,分别是Maven的4个仓库和nuget的4个仓库。如果不使用,可以直接删除。
Nexus的仓库类型介绍:
- hosted : 本地存储,即同docker官方仓库一样提供本地私服功能。
- proxy : 提供代理其他仓库的类型,如docker中央仓库。
-
group : 组类型,实质作用是组合多个仓库为一个地址。 目前OpsAny制品仓库仅支持hosted类型的制品,其它类型的制品,暂时需要手工在Nexus上进行配置。
-
2.创建Docker镜像仓库
点击系统管理-【Repository】-【Create Repository】-【docker(hosted)】
4.配置Docker信任仓库¶
请修改下面的IP地址为Nexus的地址。
[root@linux-node1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://tdimi5q1.mirror.aliyuncs.com"],
"insecure-registries" : ["http://192.168.56.11:8015"]
}
[root@linux-node1 ~]# systemctl restart docker
5.测试Nexus的Docker镜像访问。¶
docker login http://192.168.56.11:8015
如果是云主机,请打开安全组的8014、8015端口。然后访问进行初始化操作。在OpsAny创建业务和应用后,点击某个应用进入到应用详情即可看到应用的流水线和制品库等功能。
StackStorm集成¶
StackStorm是一个开源的事件驱动的自动化运维工具,可将所有应用程序,服务和工作流程连接起来。 它具有可扩展性,灵活性, 设计中包含了对DevOps和ChatOps的热爱。它可以将您现有的基础架构和应用程序环境联系在一起,以便您可以更轻松地自动化操作该环境。它特别专注于针对事件采取行动。
1.StackStorm部署¶
- 1.了解脚本参数
st2-install.sh有两个参数:
- st2:适用于把StackStorm和OpsAny平台部署在相同的主机,复用OpsAny的MongoDB、Redis。
- all:适用于单独的主机部署StackStorm又和OpsAny的MongoDB、Redis由于网络等原因,不方便访问时,本地启动新的MongoDB和Redis。
-
不管选择哪个参数都会额外的安装RabbitMQ,StackStorm依靠RabbitMQ消息队列进行事件的处理。
-
2.部署ST2
根据实际情况选择使用哪个参数。
cd /opt/opsany-paas/install/
./st2-install.sh st2
- 3.测试st2
docker exec -it opsany-st2-client /bin/bash
st2 action list --pack=core
# 有以下输出说明st2部署成功
+---------------------+------+----------------------------------------------------------------------+
| ref | pack | description |
+---------------------+------+----------------------------------------------------------------------+
| core.announcement | core | Action that broadcasts the announcement to all stream consumers. |
| core.ask | core | Action for initiating an Inquiry (usually in a workflow) |
| core.echo | core | Action that executes the Linux echo command on the localhost. |
| core.error | core | Action that executes the Linux echo command (to stderr) on the |
| | | localhost. |
| core.http | core | Action that performs an http request. |
| core.inject_trigger | core | Action which injects a new trigger in the system. |
| core.local | core | Action that executes an arbitrary Linux command on the localhost. |
| core.local_sudo | core | Action that executes an arbitrary Linux command on the localhost. |
| core.noop | core | Action that does nothing |
| core.pause | core | Action to pause current thread of workflow/sub-workflow. |
| core.remote | core | Action to execute arbitrary linux command remotely. |
| core.remote_sudo | core | Action to execute arbitrary linux command remotely. |
| core.sendmail | core | This sends an email |
| core.uuid | core | Generate a new UUID (default uuid4) |
| core.winrm_cmd | core | Action to execute arbitrary Windows Command Prompt command remotely |
| | | via WinRM. |
| core.winrm_ps_cmd | core | Action to execute arbitrary Windows PowerShell command remotely via |
| | | WinRM. |
+---------------------+------+----------------------------------------------------------------------+
- 4.访问ST2
使用浏览器访问测试:
- http://IP地址:8005
- 默认帐号: st2admin/OpsAny@2023
主机部署可以参考官方文档:https://docs.stackstorm.com/install/index.html
使用OpsAny已经部署完毕的MongoDB、Redis和RabbitMQ。如果和OpsAny部署在一起,确保端口修改为非80端口。
-
1.设置yum仓库
curl -s https://packagecloud.io/install/repositories/StackStorm/stable/script.rpm.sh | sudo bash
-
2.安装st2和RabbitMQ
# 部署St2
yum install -y st2 crudini
# 部署RabbitMQ
RABBITMQ_DEFAULT_USER=opsany
RABBITMQ_DEFAULT_PASS=OpsAny@2020
docker run -d --restart=always --name opsany-base-rabbitmq \
-e RABBITMQ_DEFAULT_USER="$RABBITMQ_DEFAULT_USER" \
-e RABBITMQ_DEFAULT_PASS="$RABBITMQ_DEFAULT_PASS" \
-p 15672:15672 -p 5672:5672 -p 15692:15692 \
-v /etc/localtime:/etc/localtime:ro \
registry.cn-beijing.aliyuncs.com/opsany/rabbitmq:3.8.9-management-alpine
- 3.配置st2
可以使用OpsAny已经部署的RabbitMQ、Redis和MongoDB,请将下面配置案例修改为正确的IP地址和用户名与密码。
vim /etc/st2/st2.conf
# 修改以下配置,修改为上面安装的RabbitMQ地址。
[messaging]
url = amqp://opsany:OpsAny@2020@192.168.56.11:5672/
# 修改以下配置,可以配置为OpsAny的Redis,注意Redis密码不要带@
[coordination]
url = redis://:OpsAny2020@192.168.56.11:6379
#增加下面配置,默认没有。可以使用OpsAny自带的MongoDB。
[database]
host = 192.168.56.11
port = 27017
db_name = event
username = event
password = OpsAny@2020
- 4.设置数据加密
DATASTORE_ENCRYPTION_KEYS_DIRECTORY="/etc/st2/keys"
DATASTORE_ENCRYPTION_KEY_PATH="${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}/datastore_key.json"
sudo mkdir -p ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
sudo st2-generate-symmetric-crypto-key --key-path ${DATASTORE_ENCRYPTION_KEY_PATH}
# Make sure only st2 user can read the file
sudo chgrp st2 ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
sudo chmod o-r ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
sudo chgrp st2 ${DATASTORE_ENCRYPTION_KEY_PATH}
sudo chmod o-r ${DATASTORE_ENCRYPTION_KEY_PATH}
# set path to the key file in the config
sudo crudini --set /etc/st2/st2.conf keyvalue encryption_key_path ${DATASTORE_ENCRYPTION_KEY_PATH}
sudo st2ctl restart-component st2api
这里并不根据官方的设置,不配置SSH,通过调用管控平台和作业平台进行调用。
- 5.启动服务
st2ctl start
- 6.Register sensors, rules and actions:
st2ctl reload
- 7.配置验证
yum -y install httpd-tools
echo 'OpsAny@2020' | sudo htpasswd -i /etc/st2/htpasswd st2admin
# 修改配置增加验证。
vim /etc/st2/st2.conf
[auth]
# 修改为启用
enable = True
backend = flat_file
backend_kwargs = {"file_path": "/etc/st2/htpasswd"}
# ...
# 重启并测试
st2ctl restart-component st2api
st2 login st2admin --write-password
- 8.验证安装
st2 action list
- 9.配置Web
注意:如果你将st2和Gitlab安装到一起,那么请自行解决80端口冲突的问题。注意修改Nginx的端口,将80端口注释掉,将443端口修改为其它端口。
yum install -y st2web nginx
# 创建自签名证书放到/etc/ssl/st2
mkdir -p /etc/ssl/st2
openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/st2/st2.key -out /etc/ssl/st2/st2.crt \
-days 365 -nodes -subj "/C=US/ST=California/L=Palo Alto/O=StackStorm/OU=Information \
Technology/CN=$(hostname)"
# 复制配置文件到配置目录下。
cp /usr/share/doc/st2/conf/nginx/st2.conf /etc/nginx/conf.d/
# Disable default_server configuration in existing /etc/nginx/nginx.conf
sed -i 's/default_server//g' /etc/nginx/nginx.conf
# 如果非单独部署请修改Nginx的端口,注释掉80端口
vim /etc/nginx/nginx.conf
# server {
# listen 80;
# listen [::]:80;
# server_name _;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
# error_page 404 /404.html;
# location = /404.html {
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
# 如果非单独部署请修改Nginx的端口,注释掉80端口,然后修改st2的端口为8005.
vim /etc/nginx/conf.d/st2.conf
...
server {
listen *:8005 ssl;
...
systemctl restart nginx
systemctl enable nginx
2.StackStorm集成¶
OpsAny的持续部署需要使用StackStorm的编排能力,我们为StackStorm开发了Pack,需要进行初始化操作。
- 1.下载OpsAny核心st2的Pack。
需在安装stackstorm的服务器上面执行以下命令。切记。
# 在部署OpsAny的主机上执行。
mkdir -p /opt/stackstorm-packs && cd /opt/stackstorm-packs
git clone --depth=1 https://gitee.com/opsany/opsany_core.git
git clone --depth=1 https://gitee.com/opsany/opsany_workflow.git
- 2.执行初始化
需在安装OpsAny的服务器上执行以下命令。请修改对应的地址和密码,用户名不要修改。注意Docker Compose部署的ST2为http,端口为80。
# 执行初始化,请修改下方的平台地址和ST2的地址,ST2的密码等。
source /opt/opsany-paas/install/install.config
source ${INSTALL_PATH}/conf/.passwd_env
DEVOPS_SECRET_KEY=$(cat ${INSTALL_PATH}/conf/.devops_secret_key)
ST2_URL=http://www.opsany.com:8005
ST2_PASSWD="OpsAny@2023"
cd /opt/opsany-paas/saas/
python3 init-ce-st2.py --domain https://${DOMAIN_NAME} --username admin --password ${ADMIN_PASSWORD} --st2_url ${ST2_URL} --st2_username st2admin --st2_password ${ST2_PASSWD} --app_code devops --app_secret ${DEVOPS_SECRET_KEY} --st2_core_pack_source gitee
# 出现以下类似输出为初始化成功,未成功无法正常使用。
[SUCCESS] init devops st2 success.
Downloading the OpsAny core package is expected to take 60 seconds...
[SUCCESS] init st2 pack success.
[SUCCESS] config core pack success.
执行完毕初始化后,后自动在【管控平台】-【采控管理】-(StackStorm集成)-自动输入URL和API Key。现在就可以在持续部署去创建一个部署任务进行测试。
3.集成原理介绍¶
OpsAny通过集成StackStorm使用其强大的工作流编排的功能,从企业最佳实践来说,一个企业存在两种工作流:
- 业务工作流:业务工作流就是通常我们所说的BPM,在这个领域开源的Activiti是王者,但是并不完全适用于运维的执行工作。
- 执行工作流:执行工作流主要的场景就是运维的原子编排(文件分发、命令执行、数据采集),在这个领域OpsAny选择了StackStorm的Orquesta。
目前OpsAny的持续部署平台中的部署编排能力,依靠StackStorm的Orquesta来实现。
- 首先,OpsAny将作业平台的脚本执行和文件分发,以一个Action的方式,集成到了StackStorm中。
- 然后,当用户创建一个持续部署任务,OpsAny会自动生成一个StackStorm的workflow工作流。
- 最后,当用户执行一个持续部署任务,OpsAny会调用StackStorm执行对应的工作流。
Gitlab代码仓库集成¶
如果用户企业已经有Gitlab,请检查版本是否大于13.12,如果是其它版本,也可以集成测试,官方并没有测试所有版本。如果还没有Gitlab,可以根据下方文档进行部署。由于Gitlab本身对CPU和内存的使用均有要求,需要用户单独准备一台主机进行部署。无法和使用Docker Compose部署的StackStrom部署在相同主机上,因为端口冲突。
GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。可以把Gitlab理解为一个开源的Github,你可以在企业中使用Gitlab部署一个企业自己的“Github”。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
1.安装gitlab¶
1.部署gitlab需要的postfix
[root@linux-node1~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y
[root@linux-node1~]# systemctl start postfix && systemctl enable postfix
2.安装gitlab-ce
安装gitlab-ce最快速的解决方案是使用GitLab CE Omnibus package这个包,可以一站式的解决安装、配置、管理备份等需求:https://about.gitlab.com/downloads/#centos7 注:由于网络问题,国内用户,建议使用清华大学的镜像源进行安装,详情可以在这里找到:https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/
使用国内YUM源:
[root@linux-node1~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
[root@linux-node1~]# yum install gitlab-ce -y
3.配置并启动Gitlab
首先我们干的第一件事情就是给gitlab设置一个域名,也就是外部如何访问Gitlab。
[root@linux-node1~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.56.11'
4.重启配置Gitlab
如果你后期再次修改Gitlab的域名,也需要执行本操作,它会调用Chef(Chef和SaltStack、Ansible类似也是一个自动化运维工具)进行相关的配置管理,而且会自动启动。
[root@linux-node1~]# gitlab-ctl reconfigure
Gitlab的服务管理
可以使用gitlab-ctl管理gitlab:
- 查看gitlab:[root@linux-node2 ~]# gitlab-ctl status
- 关闭gitlab:[root@linux-node2 ~]# gitlab-ctl stop
- 启动gitlab:[root@linux-node2 ~]# gitlab-ctl start
- 重启gitlab:[root@linux-node2 ~]# gitlab-ctl restart
Gitlab系统服务
Gitlab安装完毕之后默认是开机自启动,使用的服务名称如下:
[root@linux-node1 ~]# systemctl status gitlab-runsvdir
2.Gitlab集成¶
打开【流水线】-【系统设置】页面,点击右上角。新增工具。填写Gitlab的地址、用户名、和Access Token即可完成集成。集成后可以通过Gitlab的Webhook调用流水线进行执行。下图为集成页面。
代码扫描SonarQube部署¶
目前OpsAny数字化研发平台暂未提供SonarQube的集成,需要用户自行独立使用进行代码质量扫描。
SonarQube Server部署¶
# Step1: 准备运行环境
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
INSTALL_PATH=/data/opsany
PAAS_DOCKER_REG=registry.cn-beijing.aliyuncs.com/opsany
# Step2: 启动SonarQube Server
docker run --restart=always --name opsany-devops-sonarqube -t \
-v /etc/localtime:/etc/localtime:ro \
-p 8016:9000 \
-d ${PAAS_DOCKER_REG}/sonarqube:9.9.6-community
启动之后可以访问8016端口进行相关设置,例如设置语言为中文等。
使用Sonar Scanner进行分析¶
官方文档:https://docs.sonarqube.org/latest/analysis/overview/
安装Sonar Scanner
cd /usr/local/src/
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-6.2.0.4584-linux-x64.zip
unzip sonar-scanner-cli-6.2.0.4584-linux-x64.zip
mv sonar-scanner-6.2.0.4584-linux-x64/ /usr/local/
ln -s sonar-scanner-6.2.0.4584-linux-x64/ /usr/local/sonar-scanner
配置Sonar Scanner
[root@linx-node2 ~]# vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
分析项目代码
如果你要使用Soanr Scanner分析一个项目代码,需要相关的配置。
第一步:编写sonar-project.properties文件
[root@linux-node3 ~]# vim sonar-project.properties
# must be unique in a given SonarQube instance
sonar.projectKey=devops-demo
# this is the name displayed in the SonarQube UI
sonar.projectName=devops-demo
sonar.projectVersion=2.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=.
sonar.java.binaries=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
第二步:生成扫描的token
登录SonarQube,点击用户图像-我的账号-安全-令牌。创建一个全局扫描的令牌。
第三步: 开始进行代码质量分析
- 方法1: 编写sonar-project.properties后,在代码目录下直接执行命令。
[root@linx-node2 ~]# /usr/local/sonar-scanner/bin/sonar-scanner -Dsonar.login=生成的Token
- 方法2: 不编写sonar-project.properties,直接通过添加命令行参数来指定相关配置。
[root@linx-node2 ~]# /usr/local/sonar-scanner/bin/sonar-scanner -Dsonar.login=生成的Token -Dsonar.projectKey=login -Dsonar.sources=.
第四步: 登录Sonarqube,项目页面查看扫描结果。