一.基于jenkins的自动化部署(推荐)
1.1主要内容:
- 开发者提交代码触发(人工)
- 第三方触发jenkins 部署(第三方可以是http请求,或者代码http请求,或者阿里云效流水线http请求,或者触发jenkins webhook请求等等) (人工)
- 流程自动触发:(自动)
jenkins ->拉取代码->maven打包->镜像打包->容器仓库推送->触发rancher api部署
1.2配置
1.2.1配置jenkins maven项目

1.2.2配置项目git地址
路径:源码管理-Git-Repositories
说明:配置url和对应身份认证方式

1.2.3配置项目jdk
路径:General-JDK

1.2.4配置项目maven
路径:Pre Steps-Build
说明:
Maven Version:选择maven版本
Root POM:填写pom路径,例如 pom.xml
Goals and options:填写运行的mvn命令,例如clean package -Dmaven.test.skip=true -U -Ddocker.skip=true

1.2.5配置jenkins webhook配置
路径:构建触发器-触发远程构建 -身份验证令牌
说明:
身份验证令牌:自定义令牌
比如当前的需要填写分支部署触发的webhook
webhook:jenkins地址+/view/项目路径/buildWithParameters?token=自定义令牌

1.2.6配置jenkins 打包分支设置
路径:General-参数化构建过程-添加参数-字符参数
说明:
字段名:branch,默认值:dev

路径:源码管理-git-Branches to build
说明:
指定分支:$branch 是取上面的字段名对应的值

1.2.7shell配置镜像打包,容器仓库推送,远程部署触发
路径:Post Steps-Run only if build succeeds-执行 shell
具体命令:如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| #!/bin/bash source /etc/profile
project="xxxx" versionDate=`date +%Y%m%d%H%M%S` version="latest" baseName="xxx-name" depositoryPath="registry-vpc.cn-shenzhen.aliyuncs.com" depositoryAdmin="阿里云仓库账号" depositoryPass="阿里云仓库密码"
openjdkVersion="openjdk:8"
RANCHER_URL="https://rancher地址/v3/project/xxxx/workloads/deployment:project:$project?action=redeploy" RANCHERTOKEN="rancher token键:rancher token值" echo -------------------------------------
cd $WORKSPACE/$project-web/target/ echo $WORKSPACE/$project-web/target/
echo "构建Dockerfile" cat <<EOF > Dockerfile FROM $openjdkVersion # 基础镜像使用java # 设置工作目录,进入到容器中的初始目录,不存在会自动创建 ENV JAVA_OPTS='-Xmx512m' RUN chmod 777 /home RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone ADD *.jar /home/ # 启动命令 CMD ["sh", "-c", "java \$JAVA_OPTS -jar /home/*.jar"] EOF
echo "Dockerfile 创建完成。"
echo "开始构建当次镜像!" docker build -t $depositoryPath/$baseName/$project:$versionDate . docker tag $depositoryPath/$baseName/$project:$versionDate $depositoryPath/$baseName/$project:$version
docker login -u $depositoryAdmin -p $depositoryPass $depositoryPath [ $? != 0 ] && echo "请注意,在执行login出错,故而退出!" && exit 1 echo "开始将镜像push到私服!" docker push $depositoryPath/$baseName/$project:$version docker push $depositoryPath/$baseName/$project:$versionDate [ $? != 0 ] && echo "请注意,在执行push上传时出错,故而退出!" && exit 1 docker rmi $depositoryPath/$baseName/$project:$versionDate docker rmi $depositoryPath/$baseName/$project:$version
response=$(curl -k -u "${RANCHERTOKEN}" -X POST -H 'Content-Type: application/json' "${RANCHER_URL}")
response=$(curl -k -u "${RANCHERTOKEN}" -X POST -H 'Content-Type: application/json' "${RANCHER_URL}" -w "\n%{http_code}\n")
http_code=$(echo "$response" | tail -n1)
response_content=$(echo "$response" | sed '$d')
if [ $? -eq 0 ]; then if [[ "$http_code" =~ ^2 ]]; then echo "Deployment updated successfully." echo "Response: $response_content" else echo "Failed to update deployment. HTTP Status Code: $http_code" echo "Response: $response_content" exit 1 fi else echo "Failed to execute curl command." echo "Response: $response_content" exit 1 fi
|
二.基于云效部署(阿里云效流水线+rancher/k8s)
阿里云效流水线(Flow)是阿里云提供的一站式企业级DevOps平台,支持持续集成(CI)和持续交付(CD),助力企业实现研发流程自动化与高效协作
ps:阿里云效每月有3000核分免费额度,用完收费
2.1 主要内容
阿里云效流水线+rancher/k8s主要内容:
- 开发者提交代码触发(人工)
- 登录云效管理平台->流水线->对应流水线部署(人工)
- 流程自动触发:(云效该流程计费使用,每月一定免费额度)(自动)
流水线->拉取代码->maven打包->镜像打包->容器仓库推送->触发rancher api部署/触发k8s部署
2.2云效配置
2.2.1创建流水线
路径:登录阿里云效-流水线-新建流水线-空白模板

2.2.2 配置项目git地址
路径:添加流水线-选择代码源
配置仓库地址,配置默认分支等

2.2.3 配置构建集群
路径:在阶段1配置空白任务
自定义任务名称如:java构建jar包,上传容器仓库
构建集群:选最近的集群
指定构建节点:看容器部署环境,一般选Linux/amd64
容器镜像地址:build-steps/alinux3

2.2.4 环境配置(maven,jdk,mvn执行命令)
路径:在任务步骤-添加步骤
依次添加配置
步骤1:添加”配置MavenSetting文件”,默认maven路径,自定义的需要额外配置,不展开说)
步骤2:添加”安装Java ”,选择jdk版本和maven版本
步骤3:添加”执行命令”,mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip

2.2.5 配置容器推送
路径:在任务步骤-添加步骤
添加步骤4:
个人镜像仓库选择“镜像构建并推送”
阿里云个人镜像仓库选择“镜像构建并推送至ACR(个人版)”
阿里云企业镜像仓库选择“镜像构建并推送至ACR(企业版)”
填写:
1.镜像地址
2.Dockerfile路径:指定镜像构建的 Dockerfile 路径,填写相对于工作目录的路径(在代码文件中,Dockerfile为默认代码根目录)
3.ContextPath:ContextPath为 Docker 构建的执行上下文,填写相对于代码根目录的路径,如target。如果不填则为 Dockerfile 文件所在目录。
图1

图2

2.2.6 部署发布(k8s或者rancher命令方式)
方案1:k8s集群部署
前提:已存在k8s集群
路径:新任务-配置k8s发布-配置选择需要部署的k8s集群
图1

图2

方案2:rancher命令部署
前提:已存在rancher管理k8s集群
路径:新任务-执行命令-执行命令-配置“执行命令”
具体命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| echo hello,world!
RANCHER_URL="https://rancher地址/v3/project/xxxx/workloads/deployment:project:$project?action=redeploy" RANCHERTOKEN="rancher token键:rancher token值"
response=$(curl -k -u "${RANCHERTOKEN}" -X POST -H 'Content-Type: application/json' "${RANCHER_URL}")
response=$(curl -k -u "${RANCHERTOKEN}" -X POST -H 'Content-Type: application/json' "${RANCHER_URL}" -w "\n%{http_code}\n")
http_code=$(echo "$response" | tail -n1)
response_content=$(echo "$response" | sed '$d')
if [ $? -eq 0 ]; then if [[ "$http_code" =~ ^2 ]]; then echo "Deployment updated successfully." echo "Response: $response_content" else echo "Failed to update deployment. HTTP Status Code: $http_code" echo "Response: $response_content" exit 1 fi else echo "Failed to execute curl command." echo "Response: $response_content" exit 1 fi
|
