开发中英文切换网站如何做,宿迁做网站,企石东莞网站建设,企业管理咨询师是干什么的文章目录 安装Gitlab服务器准备安装版本安装依赖和暴露端口安装Gitlab修改Gitlab配置文件访问Gitlab 安装Gitlab Runner服务器准备安装版本安装依赖安装Gitlab Runner安装打包工具安装docker安装java17安装maven 注册Gitlab Runner 搭建自动化部署准备SpringBoot项目添加一个Co… 文章目录 安装Gitlab服务器准备安装版本安装依赖和暴露端口安装Gitlab修改Gitlab配置文件访问Gitlab 安装Gitlab Runner服务器准备安装版本安装依赖安装Gitlab Runner安装打包工具安装docker安装java17安装maven 注册Gitlab Runner 搭建自动化部署准备SpringBoot项目添加一个Controller访问项目容器镜像准备编写Dockerfile准备镜像仓库将项目打包成镜像推送镜像 准备Kubernetes初始化集群部署应用创建命名空间创建拉取镜像的Secret创建部署应用的Deployment控制器使用Service暴露Deployment为Service创建ingress暴露应用 编写.gitlab-ci.yml文件定义阶段定义变量用maven打包SpringBoot项目用Docker将项目打成容器镜像将镜像推送到镜像仓库更新K8S的镜像 测试自动化部署 安装Gitlab
本文章视频地址https://www.bilibili.com/video/BV1Se411o766/
服务器准备
笔者打算用CentOS7操作系统来搭建自动化部署CI/CD所以本篇文章相关软件的下载地址为CentOS7的下载地址。系统版本为 7.9.2009
Gitlab对服务器的CPU和内存也提出了最小要求CPU最小为4核心
内存最小为4GB
硬盘最少要保证为Gitlab预留了2.5GB的存储空间为了保险最少预留10GB 个人推荐
安装版本
想要搭建GitlabGitlab Runner的自动化部署那么第一步一定是安装Gitlab。根据Gitlab官方文档显示最新的Gilab发行版为 16.6
所以我决定安装 16.6 这个最新的发行版。接下来可以直接下载这个版本CentOS7
官网下载界面https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-16.6.1-ce.0.el7.x86_64.rpm
官网下载地址https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-16.6.1-ce.0.el7.x86_64.rpm/download.rpm
因为官网在国外非常的慢国内大名鼎鼎的清华大学建立了一个开源软件镜像站里面收录了Gitlab。地址为https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
同版本的清华大学开源软件镜像站下载地址https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.6.1-ce.0.el7.x86_64.rpm
安装依赖和暴露端口
Gitlab有一些依赖需要安装需要执行下面命令安装相关以来命令从Gitlab官网复制而来
sudo yum install -y curl policycoreutils-python openssh-server perl
# Enable OpenSSH server daemon if not enabled: sudo systemctl status sshd
sudo systemctl enable sshd
sudo systemctl start sshd
# Check if opening the firewall is needed with: sudo systemctl status firewalld
sudo firewall-cmd --permanent --add-servicehttp
sudo firewall-cmd --permanent --add-servicehttps
sudo systemctl reload firewalldsudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix上面这些命令还包括防火墙暴露端口。
安装Gitlab
安装完成Gitlab的依赖之后就可以开始安装Gitlab了上面步骤已经说明了Gitlab的安装包下载地址可以直接执行下面命令进行下载清华源
curl -LO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.6.1-ce.0.el7.x86_64.rpm下载结果如图
因为上一个步骤已经安装了依赖所以现在可以直接使用rpm命令安装gitlab了。执行下面命令注意更改为自己的文件名
rpm -ivh gitlab-ce-16.6.1-ce.0.el7.x86_64.rpm看到大大的Gitlab图标后代表Gitlab安装成功
修改Gitlab配置文件
接下来需要修改gitlab配置文件本次笔者打算使用https访问gitlab如果不需要可以将接下来的步骤的https改为http即可。Gitlab配置文件地址为 /etc/gitlab/gitlab.rb使用下面命令进行修改
vi /etc/gitlab/gitlab.rb修改 external_url 配置项为Gitlab的访问地址如无需https可将协议改为http。也可以将域名改为IP地址。如果是域名那么注意域名解析是解析到Gitlab服务器上的 如果不需要使用到https你可以直接执行 sudo gitlab-ctl reconfigure 然后越过下面配置https的步骤。 接下来开始配置https访问Gitlab。首先需要准备域名证书因为访问Gitlab是通过Nginx所以域名证书需要准备的是Nginx相关的证书。我之前写过一篇关于自签名证书的文章https://blog.csdn.net/m0_51510236/article/details/124676341。当然我已经在阿里云准备好了相关的免费证书
点击下载Nginx版本的证书
下载好后如图
然后执行下面命令将文件的权限改为 755注意修改为你自己的文件地址
chmod -R 755 /etc/gitlab/ssl修改后如图
继续修改 /etc/gitlab/gitlab.rb 文件将 letsencrypt[enable] 配置项改为false
配置内容
letsencrypt[enable] false然后根据图片提示修改nginx相关配置
配置内容
nginx[enable] true
nginx[redirect_http_to_https] true
nginx[ssl_certificate] /etc/gitlab/ssl/domain.pem
nginx[ssl_certificate_key] /etc/gitlab/ssl/domain.key其余更多配置如redis、PostgreSQL和STMP等可参考Gitlab配置的官方文档https://docs.gitlab.com/omnibus/settings配置好后可以直接执行下面命令使配置生效
sudo gitlab-ctl reconfigure配置的耗时会有点长看到如下提示代表配置成功
访问Gitlab
可以通过下面命令查看生成的初始Gitlab的root密码此密码24小时后过期
cat /etc/gitlab/initial_root_password生成初始密码如图
然后访问你的Gitlab服务器默认来到登录界面。默认用户为root输入上面查询到的初始root密码之后可直接登录
登录之后可以来到首页
然后点击头像后点击 Edit profile
你可以设置一些个人信息
然后注意修改一下密码必须
同时为了免密拉取代码设置一下 SSH Keys
好了Gitlab安装完毕了
安装Gitlab Runner
如果需要使用Gitlab来进行自动化部署则你需要安装最少一个Gitlab Runner。
服务器准备
本次一样也是使用CentOS7安装Gitlab Runner系统版本
因为构建对服务器配置需求变动很大可能配置很低的服务器就能完成构建。但构建任务非常多或非常频繁那么则可能需要配置更高的Gitlab Runner或者说安装多台Gitlab Runner服务器。官网没有对服务器需求有明确的需求如图
本次笔者使用的是2c2g配置的服务器如图
安装版本
与Gitlab安装的版本一样使用的是 16.6.1 版本各个系统的下载界面https://gitlab-runner-downloads.s3.amazonaws.com/v16.6.1/index.html
官网下载地址https://gitlab-runner-downloads.s3.amazonaws.com/v16.6.1/rpm/gitlab-runner_amd64.rpm
同样因为在国外下载比较慢可以使用清华大学开源软件镜像站下载下载地址https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7-x86_64/gitlab-runner-16.6.1-1.x86_64.rpm
安装依赖
Gitlab Runner的依赖只有一个那就是git为了方便直接使用yum安装
yum install -y git安装成功可以查看版本
安装Gitlab Runner
上一个步骤已经写了下载地址可以使用下面这行命令进行下载清华源
curl -LO https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7-x86_64/gitlab-runner-16.6.1-1.x86_64.rpm下载成功如图
然后使用下面命令安装Gitlab Runner
rpm -ivh gitlab-runner-16.6.1-1.x86_64.rpm安装成功如图
安装打包工具
安装docker
安装docker比较简单直接使用下面命令进行安装
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i sdownload.docker.commirrors.aliyun.com/docker-ce /etc/yum.repos.d/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker为了避免gitlab-runner使用docker打包失败需要将运行gitlab-runner的用户设置为root。首先先查看gitlab-runner的执行用户使用这行命令
ps aux | grep gitlab-runner可以看到执行的用户为gitlab-runner切换到这个用户之后查看docker的镜像列表报权限不足
执行下面代码将gitlab-runner的执行用户改为root
# 卸载掉gitlab-runner的默认用户
gitlab-runner uninstall
# 将gitlab-runner的用户设置为root
gitlab-runner install --working-directory /home/gitlab-runner --user root
# 重启gitlab-runner
systemctl restart gitlab-runner执行完成后再次查看可以看到gitlab-runner的执行用户已变为root
安装java17
待会会打包SpringBoot应用而根据Spring官网显示Spring2.*已于2023年11月24日停止官方支持仅保留商业版支持
从SpringBoot3.*开始SpringBoot应用需要Java17
所以本次需要为服务器安装java17oracle官网下载界面https://www.oracle.com/java/technologies/downloads/#java17
下载到服务器后我打算将其安装在 /opt/environment 目录下执行下面命令解压
mkdir /opt/environment
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /opt/environment然后将下面几行代码添加到 /etc/profile 文件的最后
# Set java environment
JAVA_HOME/opt/environment/jdk-17.0.9
PATH$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH最后执行下面命令使它生效
source /etc/profile最后可以看到安装成功
当然也可以为此构建一个镜像为之后部署到Kubernetes做准备。Dockerfile内容
FROM ubuntu:22.04
LABEL org.opencontainers.image.authorsXiaoHH ***qq.com
ADD jdk-17_linux-x64_bin.tar.gz /opt
ENV PATH${PATH}:/opt/jdk-17.0.9/bin然后执行下面命令构建并测试打包是否成功
# 构建镜像
docker build -t {镜像名称}:{镜像版本} .
# 运行镜像并执行java -version查看镜像是否构建成功
docker run --name test-jdk {镜像名称}:{镜像版本} java -version可以看到镜像打包成功
安装maven
使用下面命令下载maven-3.8.8
curl -LO https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz下载如图
我打算将其安装在 /opt/environment 目录下所以执行以下命令
tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt/environment然后将下面几行代码添加到 /etc/profile 文件的最后
# Set maven environment
MAVEN_HOME/opt/environment/apache-maven-3.8.8
PATH$PATH:$MAVEN_HOME/bin
export MAVEN_HOME PATH最后执行下面命令使它生效
source /etc/profile然后可以查看maven的版本
maven的配置文件配置可以参考我之前写的文章https://blog.csdn.net/m0_51510236/article/details/115218790
注册Gitlab Runner
现在已经完成了所有准备操作可以将Gitlab Runner注册到Gitlab上了。按照图片提示来到Runners界面
复制注册Runner的Token接下来一个步骤要用到这个Token
在Gitlab Runner服务器中执行下面命令注册Runner
gitlab-runner register然后按照图片提示填写对应内容
然后回到Runner界面可以看到Runner注册成功。点击编辑Runner
勾选 Run untagged jobs 然后点击保存
默认情况下Gitlab Runner是开机自启动的但是还是建议执行这行命令确认一下
systemctl enable gitlab-runner搭建自动化部署
接下来将要准备一个项目来测试这个自动化部署将以一下步骤进行搭建
准备一个SpringBoot项目当新增tag的时候自动构建项目将SpringBoot项目用Maven打包将Maven打包好的jar包使用Docker打成Docker镜像将Docker镜像推送到镜像仓库将Docker镜像部署到Kubernetes 如果你不是java web工程师你也可以继续读本篇文章读下去搭建自动化部署只是个思路按照这个步骤你修改一下完全可以自动化部署其他语言的应用程序。 准备SpringBoot项目
直接使用Spring初始化器来初始化一个SpringBoot应用。Spring初始化器地址https://start.spring.io。然后填写项目基本信息
添加一个Controller
然后将其导入到开发工具后新增一个ControllerController的代码如下
package city.yueyang.cicd.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
RequestMapping(/test)
public class TestController {/*** 测试CI/CD的Controller* return 版本信息*/GetMapping(/hello)public String hello() {return Hello! Gilab CI/CD --- v1.0.0;}
}如图
然后再到 pom.xml 文件的 build 中添加这么一个属性
finalName${artifactId}/finalName如图
访问项目
现在项目就准备好了直接运行并访问刚刚的那个Controller可以看到访问成功
容器镜像准备
编写Dockerfile
然后需要准备一个Dockerfile用于将项目打成Docker镜像。可以看到使用Maven打包之后打包成功了
因为文件名为 gitlab-cicd.jar 直接编写Dockerfile注意更改jar包名称
# 使用在安装jdk那个步骤时候制作好的jdk镜像
FROM registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/java:17.0.9-jdk# 作者
LABEL org.opencontainers.image.authorsXiaoHH xiaohhyueyang.city# 将可执行的jar包放到容器当中去
ADD java/gitlab-cicd.jar app.jar# 暴露8080端口
EXPOSE 8080# JVM 调优参数使用G1垃圾回收器
ENV JAVA_OPTION-Dfile.encodingUTF-8 -XX:UseG1GC# JVM 内存默认值
ENV XMX1g
ENV XMS1g
ENV XMN512m# 运行程序
ENTRYPOINT [sh, -c, java -Djava.security.egdfile:/dev/./urandom -jar -Xmx${XMX} -Xms${XMS} -Xmn${XMN} ${JAVA_OPTION} /app.jar]准备镜像仓库
为了方便这篇文章就以阿里云镜像仓库为例搭建了如果你需要私有化的镜像仓库可以参考我写的文章https://blog.csdn.net/m0_51510236/article/details/125030239。阿里云容器镜像服务地址https://www.aliyun.com/product/acr。
将项目打包成镜像
镜像仓库准备好后就可以打包镜像了可以将项目拉取到一个Linux环境当中如图
然后先使用下面命令将其打成jar包
mvn clean package -Dmaven.test.skip然后可以可以看到在target目录当中生成了jar包文件
然后执行下面几条命令将其移动到 docker/java 目录当中去
mkdir docker/java
mv target/gitlab-cicd.jar docker/java然后可以执行这行命令来清空打包残余
mvn clean最后来到docker目录查看现在的目录结构
并且在Dockerfile当中也需要在java目录下有gitlab-cicd.jar包
接下来使用下面这条命令将项目打成镜像
docker build -t registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdci:v1.0.0 .可以看到镜像打包成功
然后可以使用这行命令启动这个镜像测试镜像有没有问题⚠️修改为自己的镜像仓库地址
docker run -itd --name gitlab-cicd -p 8080:8080 registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdci:v1.0.0可以看到应用启动成功
尝试访问一下java代码当中的接口访问docker部署应用的服务器
推送镜像
镜像制作好后就开始推送镜像了首先先登录到镜像仓库使用这条命令
docker login --username{用户名} {服务器地址}执行后还需要输入密码然后可以看到登录成功⚠️修改为自己的镜像仓库地址
然后直接执行这行命令即可推送⚠️修改为自己的镜像仓库地址
docker push registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdci:v1.0.0执行完后可以看到执行成功
阿里云镜像仓库里面也可以看到推送成功
准备Kubernetes
初始化集群
我之前写过两篇安装Kubernetes集群的文章
单主节点集群https://blog.csdn.net/m0_51510236/article/details/130842122多主节点集群https://blog.csdn.net/m0_51510236/article/details/134142834
这篇文章为了方便就直接使用阿里云的容器服务 Kubernetes 版 ACK了本文章没有做广告私有化Kubernetes集群也可以完成自动化部署的流水线搭建可以点击立即购买或看看新用户有没有免费试用
按照自己的需求选择配置即可
因为要用本地的gitlab-runner远程操控k8s所以需要用公网暴露apiserver注意勾选这个选项
初始化成功然后点击详情
然后点击集群信息下的基本信息-链接信息里面有kubeconfig配置文件内容点击左上角的复制
下载kubectl直接执行这行命令即可下载可修改其中的版本号
curl -LO https://dl.k8s.io/release/v1.26.11/bin/linux/amd64/kubectl然后执行以下命令安装kubectl
chmod x kubectl
mv kubectl /usr/local/bin/然后将之前复制的kubeconfig保存到 ~/.kube/config 当中执行以下命令
mkdir ~/.kube
vi ~/.kube/config
# 保存之前复制的kubeconfig内容保存之后可获取节点内容
更多关于远程连接Kubernetes集群的内容可参考我写的文档https://blog.csdn.net/m0_51510236/article/details/133710224
部署应用
创建命名空间
因为上一个步骤镜像推送推送了镜像。现在可以部署应用了。首先先来创建命名空间
命令创建
kubectl create namespace gitlab-cicdyaml文件创建
apiVersion: v1
kind: Namespace
metadata:name: gitlab-cicd可以看到命名空间创建成功
创建拉取镜像的Secret
因为准备的镜像仓库为私有所以需要创建一个拉取镜像的secret用于存储拉取镜像的用户名和密码
建议将内容保存在一个yaml文件当中执行下面命令生产Secret的yaml资源清单文件
kubectl create secret docker-registry secret名字 --namespacegitlab-cicd --docker-server服务器地址 --docker-username用户名 --docker-password密码 --docker-email邮箱 --dry-runclient --outputyaml如图生成成功
将其保存到之前的文件中注意用三条杠分开两段yaml
执行这段yaml可以看到创建成功
创建部署应用的Deployment控制器
注意因为我的镜像仓库和Kubernetes集群都在阿里云的深圳节点所以可以使用VPC地址拉取镜像可以理解为内网地址这样会快很多
可以执行下面命令生成Deployment控制器的yaml结构但是不能直接执行需要修改那么一些内容
kubectl create deployment gitlab-cicd --namespacegitlab-cicd --dry-runclient --imageregistry-vpc.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdci:v1.0.0 --outputyaml --port8080 --replicas1生成成功如图
同样将其保存到一个文件当中注意用三个杠分开两段yaml
接下来直接出示修改后的结果
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: gitlab-cicdname: gitlab-cicdnamespace: gitlab-cicd
spec:replicas: 1selector:matchLabels:app: gitlab-cicdtemplate:metadata:labels:app: gitlab-cicdspec:containers:# 设置一些环境变量- env:# JVM调优参数设置UTF-8编码字符集和使用G1垃圾回收器- name: JAVA_OPTIONvalue: -Dfile.encodingUTF-8 -XX:UseG1GC# 调整一下内存大小- name: XMXvalue: 2g- name: XMSvalue: 2g- name: XMNvalue: 1gimage: registry-vpc.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdci:v1.0.0# 存活探针livenessProbe:httpGet:path: /actuator/healthport: 8080scheme: HTTPinitialDelaySeconds: 30periodSeconds: 10name: gitlab-cdciports:- containerPort: 8080protocol: TCP# 资源限制最多使用2核心CPU和4G内存resources:limits:cpu: 1000mmemory: 4Girequests:cpu: 1000mmemory: 4Gi# 因为镜像仓库是私有的所以带上拉取镜像的SecretimagePullSecrets:- name: gitlab-cicd-registry执行这个文件可以看到创建成功
使用Service暴露Deployment
可以使用下面这行命令创建Service的yaml资源清单文件
kubectl expose deployment gitlab-cicd --port8080 --target-port8080 --namespacegitlab-cicd --namegitlab-cicd --protocolTCP --typeClusterIP --dry-runclient --outputyaml生成如图
将其拼接到yaml文件的后面记得用三个横杠分开两段yaml
执行创建可以看到创建成功
为Service创建ingress暴露应用
上一个步骤已经创建了Service这个步骤需要用ingress将服务给暴露给外部访问。可以先执行这行命令看看集群内有哪些ingress类
kubectl get ingressclass可以看到有个nginx的ingress关于私有化集群的nginx-ingress可参考我写的文章https://blog.csdn.net/m0_51510236/article/details/132536519
接下来可以使用这行命令创建ingress的yaml资源清单注意修改域名和服务名
kubectl create ingress gitlab-cicd --classnginx --rule域名/*服务名称:8080 --namespacegitlab-cicd --dry-runclient --outputyaml生成如图
将其拼接到yaml文件的后面记得用三个横杠分开两段yaml
进行创建并获取IP地址
注意域名解析当然你也可以更改自己操作系统的hosts配置文件
接下来访问之前写过的接口可以看到访问成功
编写.gitlab-ci.yml文件
.gitlab-ci.yml文件定义了CI/CD流水线的任务需要编写一下几个步骤来完成这个流水线的搭建
使用maven打包SpringBoot项目使用Docker将SpringBoot的jar包打成Docker镜像将Docker镜像推送到镜像仓库使用kubectl更新Kubernetes上的镜像
.gitlab-ci.yml文件语法官方文档地址https://docs.gitlab.com/16.6/ee/ci/yaml/index.html
定义阶段
阶段(stages)定义了一组任务组(groups of jobs)同时它也约定了任务执行的顺序。根据上面的描述可以定义四个阶段
Package With Maven使用maven打包SpringBoot项目Build With Docker使用Docker将SpringBoot的jar包打成Docker镜像Push Image To Repository将Docker镜像推送到镜像仓库Deploy To Kubernetes使用kubectl更新Kubernetes上的镜像
对应.gitlab-ci.yml的代码为
stages:- Package With Maven- Build With Docker- Push Image To Repository- Deploy To Kubernetes定义变量
我打算将镜像的地址定义为一个变量可以先来到镜像仓库看一下仓库地址
.gitlab-ci.yml中定义变量的关键字为 variables 定义两个变量分别指向这两个地址
variables:IMAGE_REPOSITORY_ADDRESS: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdciIMAGE_REPOSITORY_VPC_ADDRESS: registry-vpc.cn-shenzhen.aliyuncs.com/xiaohh-docker/gitlab-cdci用maven打包SpringBoot项目
因为约定当中的流水线任务只在手动创建新tag的情况下才执行那么需要用到流水线的一个内置变量 CI_COMMIT_TAG Gitlab内置变量的官方文档https://docs.gitlab.com/16.6/ee/ci/variables/predefined_variables.html需要注意的是这个变量只有在Gitlab9以后才有哦可以参考官方文档
当然使用maven打包SpringBoot的命令很简单只有一条
mvn clean package -Dmaven.test.skip同时为了避免此任务执行完毕将构建好的jar包给删除需要心中一个cache字段完整的yml代码为
package-maven:# 阶段对应定义阶段当中的用Maven打包的配置内容stage: Package With Maven# 定义在只有手动创建新tag的时候才执行此程序rules:- if: $CI_COMMIT_TAG# 使用script脚本进行打包script:- mvn clean package -Dmaven.test.skip# 使用cache关键字让Runner在执行完此阶段的任务后不要删除target文件当中的jar包cache:key: binaries-cachepaths:- target/*.jar文件内容为
用Docker将项目打成容器镜像
项目中的Dockerfile在docker目录当中同时需要在docker目录当中有一个java目录且里面有一个gitlab-cicd.jar的jar包文件如图Dockerfile文件内容
接下来需要将target目录下的gitlab-cicd.jar移动到docker/java目录当中相关命令
# 下面命令不需要在服务器当中执行将要被写在.gitlab-ci.yml当中
mkdir docker/java
mv target/gitlab-cicd.jar docker/java
cd docker
# 使用之前定义的镜像仓库地址和Gitlab内置的Tag变量打成Docker包
docker build -t ${IMAGE_REPOSITORY_ADDRESS}:$CI_COMMIT_TAG .然后为了避免执行此job之前会删除target目录这个步骤也需要加上cache关键字。同时使用 artifacts 保存一下编译的内容完整的yml代码为
build-docker:stage: Build With Dockerrules:- if: $CI_COMMIT_TAGscript:- mkdir docker/java- mv target/gitlab-cicd.jar docker/java- cd docker- docker build -t ${IMAGE_REPOSITORY_ADDRESS}:$CI_COMMIT_TAG .artifacts:name: gitlab-cicd-$CI_COMMIT_TAGpaths:- dockercache:key: binaries-cachepaths:- target/*.jar将镜像推送到镜像仓库
镜像已经在上一个步骤打包好了接下来直接推送推送完后为了节省空间可以将打包好的镜像给删除。完整的yml代码为
push-image:stage: Push Image To Repositoryrules:- if: $CI_COMMIT_TAGscript:- docker push ${IMAGE_REPOSITORY_ADDRESS}:$CI_COMMIT_TAG- docker rmi -f ${IMAGE_REPOSITORY_ADDRESS}:$CI_COMMIT_TAG更新K8S的镜像
上两个步骤构建并推送了Docker镜像这个步骤直接将镜像推送到Kubernetes即可执行这行命令(⚠️修改自己的命名空间、deployment、应用名字和镜像)
kubectl set image deployment gitlab-cicd --namespacegitlab-cicd gitlab-cdci${IMAGE_REPOSITORY_VPC_ADDRESS}:$CI_COMMIT_TAG --record完整的yml代码为
deploy-kubernetes:stage: Deploy To Kubernetesrules:- if: $CI_COMMIT_TAGscript:# 这里使用了阿里云的VPC网络地址- kubectl set image deployment gitlab-cicd --namespacegitlab-cicd gitlab-cdci${IMAGE_REPOSITORY_VPC_ADDRESS}:$CI_COMMIT_TAG --record测试自动化部署
之前的步骤部署了应用也编写了流水线接下来就得测试自动化部署了。先来到Gitlab创建一个仓库
点击创建一个空仓库
按照提示填写内容之后点击创建仓库
创建完成后可以复制ssh的仓库地址
在项目根目录下执行以下命令初始化本地仓库并推送代码过程简单就不再过多赘述
git init
git add --all
git commit -m Version 1.0.0
git remote add origin 仓库地址
git push origin main执行结果如图
代码也成功提交至代码仓库
但是可以看到还没有进行CI/CD是因为所有的任务在 .gitlab-ci.yml 当中都被设置了“在手动创建新tag”的情况下才会被执行
执行下面命令创建新tag
git tag -a v1.0.0 -m Version 1.0.0
git push origin v1.0.0执行完成之后可以看到tag被创建了流水线也正在执行
来到 Build - Pipelines 下可以看到流水线执行成功
因为之前也是部署的 v1.0.0 的看不到什么变化
所以现在创建一个新tag v1.1.0 再次触发自动化构建
可以看到tag v1.1.0 构建成功
再次访问部署可以看到部署成功
当然也可以手动运行流水线在 Build - Pipelines 下点击 Run pipeline
然后选择对应的tag
然后点击 Run pipeline
等待所有流程执行完毕
再次访问系统可以看到版本号又改为 v1.0.0 了 本篇文章直接给出了代码视频教程当中会带着你试试错误情况哦。视频教程地址https://www.bilibili.com/video/BV1Se411o766/
好了本篇文章就到这里祝你们编码愉快:)