首页
  • 2024.1.1.0
  • 2024.1.1.1
  • 2024.1.2.0
  • 2024.1.3.0
  • Java
  • Linux
  • Deploy
  • Application
关于
友情链接
GitHub (opens new window)

Xiao ku

板砖师傅
首页
  • 2024.1.1.0
  • 2024.1.1.1
  • 2024.1.2.0
  • 2024.1.3.0
  • Java
  • Linux
  • Deploy
  • Application
关于
友情链接
GitHub (opens new window)
  • Docker一键部署
  • Mysql主从配置一键化
  • Mysql新建主从同步-mysqldump
  • SkyWalking部署及使用
  • Prometheus部署及使用
  • K8S-CICD
    • 架构
    • 部署K8S
      • 部署包
      • 部署步骤
      • 安装Master(201)
      • 安装Worker(202)
      • 安装Worker(203)
      • 完成
      • 访问Kuboard
      • 获取登陆Token
      • 访问Kubernetes Dashboard
    • 部署NFS
      • 部署
      • 203服务端配置
      • 201客户端测试
    • 部署Harbor
      • 安装docker
      • 安装harbor
      • 上传
      • 解压
      • 新建文件harbor.yml
      • 安装
      • 启动成功
    • 部署GitLab
      • 内存问题
    • 部署Jenkins
    • Docker配置Harbor
      • 修改docker.service
      • 重启docker
      • 登录docker
      • 上传镜像
    • 初始化Jenkins
      • 安装推荐的插件及账号
      • 安装其他插件
    • 初始化Harbor
      • 创建用户
      • 创建项目
      • 增加成员
    • 初始化GitLab
      • 创建账号
      • 初始化密码
      • 登录
      • 初始化项目
      • 创建空项目
      • 创建dev分支
      • 提交项目代码
    • Jenkins配置K8S
      • 配置插件
      • k8s集群信息
      • 创建admin证书
      • 安装证书工具
      • 准备证书签名请求
      • 创建证书和私钥
      • 配置证书
      • 生成pkc格式证书
      • 配置jenkins认证
      • Kubernetes 服务证书 key
    • GitLab+Jenkins配置
      • GitLab与Jenkins配置
      • 设置jenkins 用户ssh秘钥
      • 创建Access Tokens
      • Jenkins配置Git/GitLab
      • Jenkins配置GitLab
      • Jenkins配置Git
      • 创建一个Jenkins Job
      • 配置Job的源码管理
      • 配置Job的构建触发器
      • 配置Job的构建脚本
    • Jenkins配置maven
      • 查看java和maven安装地址
      • 新增JDK
      • 新增Maven
    • Jenkins使用docker命令
    • Jenkins+Harbor+GitLab+K8S
      • 方式一
      • K8S创建命名空间
      • K8S创建Harbor密码信息
      • 工程新建脚本
      • Jenkins创建任务
      • 方式二
      • K8S创建命名空间
      • K8S创建Harbor密码信息
      • 工程新建脚本
      • Jenkins创建任务
      • K8S创建Pod
  • K8S-在线安装
  • K3S-在线安装
  • K3S-CICD
  • Deploy
xiaoku
2023-03-13
目录

K8S-CICD

# 架构

流程图

# 部署K8S

半离线部署

系统版本:CentOS Linux release 7.9.2009 (Core)  
Kubernetes:1.17.1  
Docker:18.06.1
1
2
3

# 部署包

地址

链接:https://pan.baidu.com/s/1pMiSfbz48ZQSwmPGC43RQA 
提取码:xnh3 
1
2

# 部署步骤

# 安装Master(201)

在master节点上执行。
上传k8sOfflineSetup20210720.zip文件到root目录下

scp k8sOfflineSetup20210720.zip root@192.168.213.201:/root
1

解压到/root(解压路径不能修改)

unzip k8sOfflineSetup20210720.zip
1

设置参数并安装

# master节点的主机名
export HOSTNAME=k8s-master
# kubernetes apiserver的主机地址
export APISERVER_NAME=apiserver.k8s.com
# 集群中master节点的ip地址
export MASTER_IP=192.168.213.201
# Pod 使用的网段
export POD_SUBNET=10.11.10.0/16

cd /root/k8sOfflineSetup
./setup_master.sh
1
2
3
4
5
6
7
8
9
10
11

# 安装Worker(202)

在worker节点上执行。
上传k8sOfflineSetup20210720.zip文件到root目录下

scp k8sOfflineSetup20210720.zip root@192.168.213.202:/root
1

解压到/root(解压路径不能修改)

unzip k8sOfflineSetup20210720.zip

获取加入master的参数(是在master节点上执行。)

# 在 master 节点执行
kubeadm token create --print-join-command

# 得到token和cert,这两个参数在2个小时内可以重复使用,超过以后就得再次生成
kubeadm join apiserver.k8s.com:6443 --token t8rn2w.zwfd42edrro02c50     --discovery-token-ca-cert-hash sha256:fe343cc72e449988acf789ba1c47fe83c7f80534fb7e0770f1fbe9b3facdbadb
1
2
3
4
5

设置参数并安装
在worker节点上执行。

# worker节点的主机名
export HOSTNAME=k8s-worker202
# kubernetes apiserver的主机地址
export APISERVER_NAME=apiserver.k8s.com
# 集群中master节点的ip地址
export MASTER_IP=192.168.213.201
# 加入master的token
export TOKEN=t8rn2w.zwfd42edrro02c50
# 加入master的证书
export export CERT=sha256:fe343cc72e449988acf789ba1c47fe83c7f80534fb7e0770f1fbe9b3facdbadb
cd /root/k8sOfflineSetup
./setup_worker.sh
1
2
3
4
5
6
7
8
9
10
11
12

# 安装Worker(203)

在worker节点上执行。
上传k8sOfflineSetup20210720.zip文件到root目录下

scp k8sOfflineSetup20210720.zip root@192.168.213.203:/root
1

解压到/root(解压路径不能修改)

unzip k8sOfflineSetup20210720.zip
1

设置参数并安装(token之类已获得,一样便可)
在worker节点上执行。

# worker节点的主机名
export HOSTNAME=k8s-worker203
# kubernetes apiserver的主机地址
export APISERVER_NAME=apiserver.k8s.com
# 集群中master节点的ip地址
export MASTER_IP=192.168.213.201
# 加入master的token
export TOKEN=t8rn2w.zwfd42edrro02c50
# 加入master的证书
export export CERT=sha256:fe343cc72e449988acf789ba1c47fe83c7f80534fb7e0770f1fbe9b3facdbadb
cd /root/k8sOfflineSetup
./setup_worker.sh
1
2
3
4
5
6
7
8
9
10
11
12

# 完成

现在你可以在master节点,执行kubectl get nodes看到所有节点都在线了。

kubectl get nodes
1

# 访问Kuboard

Kuboard是一个非常方便的web管理界面,安装完以后可以通过http://任意节点IP:32567/访问。
详细使用请参考 www.kuboard.cn (opens new window)

# 获取登陆Token

在 Master 节点上执行此命令

kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d
1

# 访问Kubernetes Dashboard

# 部署NFS

服务端IP:192.168.213.203

服务点目录:/data/share

# 部署

因为每台K8S都可能需要使用到挂载,故每台都需要安装

(192.168.213.201-203)

安装命令:

yum -y install nfs-utils  rpcbind 

# nfs 启动
# 为rpcbind和nfs做开机启动
systemctl enable rpcbind.service
systemctl enable nfs-server.service

#启动相关软件
systemctl start rpcbind.service
systemctl start nfs-server.service
1
2
3
4
5
6
7
8
9
10

# 203服务端配置

创建共享文件夹

mkdir -p /data/share
1

nfs 配置

vi /etc/exports
1

修改配置文件,增加下面这一行数据,指定的ip地址为客户端的地址,地址可以是一个网段(如:192.168.0.0/24)

/data/share 192.168.213.0/24(rw,no_root_squash,no_all_squash,sync)
1

加载配置文件,在相关软件启动后执行

exportfs -arv

# 201客户端测试

创建共享文件夹

mkdir -p /home/nfs_share
1

在你的 NFS 服务器设定妥当之后,我们可以在 client端先自我测试一下是否可以联机喔!利用 showmount 这个指令来查阅!

如果报:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host),可能防火墙没关

showmount -e 192.168.213.203
1

挂载测试

mount -t nfs 192.168.213.203:/data/share /home/nfs_share 
1

查看挂载情况,可以使用这个命令df -TH

df -TH
1

卸载

umount /home/nfs_share
1

# 部署Harbor

部署包官方地址:https://github.com/goharbor/harbor/releases

个人下载地址

链接:https://pan.baidu.com/s/1kmEPizetpsoF82FRdH3I9w 
提取码:a4nh 
1
2

IP:192.168.213.204
账号:admin
密码:Harbor12345
访问地址:http://192.168.213.204:20480

# 安装docker

安装docker及docker-compose

# 安装harbor

# 上传

上传harbor-offline-installer-v2.2.3.tgz文件到/data目录

# 解压

tar xzvf  harbor-offline-installer-v2.2.3.tgz
1

# 新建文件harbor.yml

内容复制harbor.yml.tmpl
修改 hostname: 192.168.213.204 为本机IP
端口
修改数据存储地址/data/harbor/data
注释https

cd /data/harbor
vi harbor.yml
1
2

harbor.yml

hostname: 192.168.213.204 

http:
  port: 20480

harbor_admin_password: Harbor12345

database:
  password: root123
  max_idle_conns: 50
  max_open_conns: 1000

data_volume: /data/harbor/data

trivy:
  ignore_unfixed: false
  skip_update: false
  insecure: false

jobservice:
  max_job_workers: 10

notification:
  webhook_job_max_retry: 10

chart:
  absolute_url: disabled

log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 2.2.0

proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy
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

# 安装

./install.sh

# 启动成功

查看一下
docker-compose ps

# 部署GitLab

使用docker-compose.yml便可

页面访问地址:http://192.168.213.204:8929

version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:14.0.6-ce.0'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.213.204:8929' #若有域名可以写域名
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:22'
    volumes:
      #将相关配置映射到当前目录下的config目录
      - './config:/etc/gitlab'
      #将日志映射到当前目录下的logs目录
      - './logs:/var/log/gitlab'
      #将数据映射到当前目录下的data目录
      - './data:/var/opt/gitlab'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

登录账号:root

登录密码:在服务启动后,查看config/initial_root_password文件

限制内存及时区

    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://106.55.159.125:8929' #若有域名可以写域名
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        puma['per_worker_max_memory_mb'] = 1024 #更改内存限制设置
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        puma['worker_processes'] = 2
1
2
3
4
5
6
7

参考文档:https://docs.gitlab.com/ee/administration/operations/puma.html

# 内存问题

如果使用阿里云或腾讯云只有2G内存时,可以增加Swap内存

dd if=/dev/zero of=/swapfile bs=1k count=4816000
mkswap /swapfile
swapon /swapfile
1
2
3

修改docker-compose,设置内存上限和swap内存

version: '2.3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:14.0.6-ce.0'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.213.204:8929' #若有域名可以写域名
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        puma['per_worker_max_memory_mb'] = 256 #更改内存限制设置
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        puma['worker_processes'] = 2
    ports:
      - '8929:8929'
      - '2224:22'
    volumes:
      #将相关配置映射到当前目录下的config目录
      - './config:/etc/gitlab'
      #将日志映射到当前目录下的logs目录
      - './logs:/var/log/gitlab'
      #将数据映射到当前目录下的data目录
      - './data:/var/opt/gitlab'
    mem_limit: 1024m
    memswap_limit: 4000m
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

# 部署Jenkins

由于原生镜像没有安装maven,故我们重新写一个Dockerfile生成镜像

Dockerfile

FROM jenkins/jenkins:2.303-centos7
USER root
RUN yum install -y maven
1
2
3

执行命令生成 镜像

cd 到dockerfiel文件目录下

docker build -t jenkins/jenkins:2.303-centos7-mvn ./
1

使用docker-compose.yml便可,docker目录挂载是为了在容器中使用docker命令

访问地址:http://192.168.213.204:7080

version: '3'
services:
  jenkins:
    image: 'jenkins/jenkins:2.303-centos7-mvn'
    container_name: jenkins
    restart: always
    user: root
    ports:
      - '7080:8080'
      - '7050:50000'
    volumes:
      - './jenkins_home:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
      - '/usr/bin/docker:/usr/bin/docker'
    extra_hosts: 
      - "apiserver.k8s.com:192.168.213.201"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

登录密码:在服务启动后,查看jenkins_home/secrets/initialAdminPassword文件

# Docker配置Harbor

201到204服务器均修改

# 修改docker.service

修改/etc/systemd/system/docker.service

将ExecStart=/usr/bin/dockerd改为

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.213.204:20480
1

# 重启docker

systemctl daemon-reload
systemctl restart docker
1
2

# 登录docker

docker login 192.168.213.204:20480 输入账号密码 账号:admin 密码:Harbor12345

# 上传镜像

先在Harbor中创建项目,例:imdemo

将本地镜像打标签,并上传

例:本地镜像原标签imtest:2.11.12

docker tag imtest:2.11.12 192.168.213.204:20480/imdemo/imtesth:2.11.12

推送镜像

docker push 192.168.213.204:20480/imdemo/imtesth:2.11.12

# 初始化Jenkins

使用管理员账号登录后,修改管理员信息:

登录名:wuxiaoku 账号:admin 密码:Wuxiaoku123

# 安装推荐的插件及账号

设置账号,更新密码,填写邮件地址,此处用户名为昵称,登录时使用admin

# 安装其他插件

打开  “系统管理” =》“管理插件” 然后安装

Kubernetes Continuous Deploy
Kubernetes
Gitlab Hook 
GitLab
Build Authorization Token
Maven Repository Server
Maven Integration
Publish Over SSH
Docker plugin
SSH Pipeline Steps
1
2
3
4
5
6
7
8
9
10

点击安装

# 初始化Harbor

# 创建用户

帐号:wuxiaoku 密码:Wuxiaoku123

# 创建项目

# 增加成员

点击进去项目

# 初始化GitLab

使用管理员账号登录后,新增账号:

账号:wuxiaoku 密码:Wuxiaoku123

# 创建账号

# 初始化密码

在创建完成账号时,密码是不可填写的,在编辑中,初始化一下密码。

# 登录

先重置一下密码,然后保存登录到首页

# 初始化项目

# 创建空项目

# 创建dev分支

# 提交项目代码

提交到dev分支

代码:

链接:https://pan.baidu.com/s/1B2-l8Ahfda2qxbvjmWJdhQ 
提取码:sxo4 
1
2

# Jenkins配置K8S

# 配置插件

在jenkins初始化中已经安装了K8S插件,即现在开始配置即可

登录jenkins,在首页点击 Manage Jenkins --> Configure System

将网页拉动到最底下,点击新增一个云,就会出现Kubernetes

点击配置

填写Kubernetes地址然后点击测试,会报错

地址为:https://apiserver.k8s.com:6443

报错信息:

# k8s集群信息

[root@k8s-master ~]# kubectl cluster-info
Kubernetes master is running at https://apiserver.k8s.com:6443
KubeDNS is running at https://apiserver.k8s.com:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://apiserver.k8s.com:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
1
2
3
4
5
6

根据以上的配置,可以看到,已经是启用https了,这里就涉及到了密钥的问题。

# 创建admin证书

# 安装证书工具

安装cfssl
此工具生成证书非常方便, pem证书与crt证书,编码一致可直接使用

登录k8s master节点执行

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
chmod +x cfssl_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl

wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
chmod +x cfssljson_linux-amd64
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl-certinfo_linux-amd64
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
1
2
3
4
5
6
7
8
9
10
11

# 准备证书签名请求

vi admin-csr.json

内容如下

{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "HangZhou",
      "L": "XS",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

证书请求中的O 指定该证书的 Group 为 system:masters

而 RBAC 预定义的 ClusterRoleBinding 将 Group system:masters 与 ClusterRole cluster-admin 绑定,这就赋予了该证书具有所有集群权限 。

# 创建证书和私钥

cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key --profile=kubernetes admin-csr.json | cfssljson -bare admin
1

最终生成以下3个文件:

admin.csr
admin-key.pem
admin.pem
1
2
3

# 配置证书

# 生成pkc格式证书

我们可以通过openssl来转换成pkc格式

openssl pkcs12 -export -out ./jenkins-admin.pfx -inkey ./admin-key.pem -in ./admin.pem -passout pass:secret
1

将jenkins-admin.pfx 下载至桌面

# 配置jenkins认证

# Kubernetes 服务证书 key

使用以下命令查看

root@k8s-master:~# cat /etc/kubernetes/pki/ca.crt
1

将证书内容填写,点击凭据后面的添加,点击Jenkins

得到jenkins-admin.pfk文件后,点击Jenkins配置Credentials后面的Add,配置如下

上传证书

选择文件 jenkins-admin.pfk

输入密码 secret,后面的内容可以不填写,点击添加。

选择 凭据,点击连接测试。

出现Connected to Kubernetes v1.17.1 表示连接成功。

点击保存

# GitLab+Jenkins配置

# GitLab与Jenkins配置

# 设置jenkins 用户ssh秘钥

使用Root登录GitLab,点击用户名称

点击 Impersonate ,表示冒充jenkins 用户

点击编辑

点击 ssh keys

登录到jenkins服务器(204),生成秘钥

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
1

查看公钥

cat /root/.ssh/id_rsa.pub
1

将公钥内容复制到网页,点击添加秘钥

# 创建Access Tokens

点击左侧的Access Tokens,输入用户 wuxiaoku,勾选权限,点击创建

复制token,待会 jenkins 设置时,会用到

MXMnxpwMLAgiP9zyS5dp
1

点击进入你的项目

点击项目

点击设置-成员

把管理员也添加进去,这样管理员也有权限了。如果项目一开始是管理员创建,这时就选择子用户

# Jenkins配置Git/GitLab

# Jenkins配置GitLab

点击 系统管理--> 系统配置 -->配置 -->Gitlab

Connection Name ”随便填,“Git Host URL”填GitLab的访问地址,然后点“Add”——“jenkins”,如下所示

选择gitlalb api,输入 jenkins 用户创建的token

MXMnxpwMLAgiP9zyS5dp
1

选择 gitlab api token,点击测试连接,出现 Success,表示成功

点击最下面的保存

# Jenkins配置Git

点击 Manage Jenkins --> Configure System -->配置 -->Git plugin

设置Git插件的全局配置,然后点击最下面的保存。

# 创建一个Jenkins Job

此处创建用于测试是否正常使用

点击 新建Item,item name”可以随便起,然后点击“构建一个自由风格的软件项目”,点击Ok

# 配置Job的源码管理

选择“源码管理”,选择“Git”,然后去GitLab中复制项目地址,粘贴到“Repository URL”,然后点击“credentials”后面的“Add”按钮

类型,选择 SSH Username with private key

Username 填 root

PrivateKey 选择Enter directly,点击add

登录到jenkins 服务器,查看私钥

cat /root/.ssh/id_rsa
1

将内容复制到网页上面,点击添加

在“credentials”里选择我们刚刚创建的认证方式:root

如果没报错,说明成功了,点击页面底部的“apply”。如果出错了,会在“Repository URL”和“Credentials”之间显示红色的错误信息。

jenkins job默认对master分支进行构建,你也可以自定义分支。这要求你的Gitlab代码仓库中要存在这个分支,一般来说,就是要向代码仓库提交一次更改,请 自行完成(Gitlab项目刚创建时是空的,一个分支也没有,这样的话,自动构建时会出错)

我们上文创建了dev分钟,故选择dev

# 配置Job的构建触发器

选择“构建触发器”,勾选“Pull SCM(轮询 SCM)”,这个选项会每隔一段时间检查一下GitLab仓库中代码是否有更新,有的话就执行构建操作。日程表如何设置,在这个输入框下面有说明

扩展阅读:

常见构建触发器:

  • Build after other projects are built 当另一个构建任务完成之后触发
  • Build periodically 周期性的触发
  • Build when a change is pushed to GitLab. GitLab CI Service URL: http://191.8.2.112:12000/project/test-go-dev 当代码有更新的时候触发,通过GitLab CI
  • GitHub hook trigger for GITScm polling 通过Github钩子触发
  • Poll SCM 定期检查代码有无更新,有更新时触发

这只是个人理解,具体怎么样大家可以试试,Poll SCM方式我是试过的。

# 配置Job的构建脚本

在build栏目里,选择“jenkins execute shell”,然后输入你项目的构建命令(这依赖于你的项目,如Maven的maven build,gulp的gulp xxx 等等)

这里我输入一段测试命令,表示将git项目的代码复制到/tmp/test

\cp -r $WORKSPACE /tmp/test
1

点击 可用的环境变量列表,就可以看到很多变量

其中 WORKSPACE 表示,下载git项目后的路径。

由于git项目为itest,因此路径为:/var/lib/jenkins/workspace/itest

点击保存

点击 立即构建,点击下面的构建过程

点击控制台输出,就可以看到完整的cp命令

# Jenkins配置maven

我们在生成镜像时已经安装了maven,故这边只要配置即可

# 查看java和maven安装地址

登录jenkins服务器204

docker exec -it jenkins /bin/sh
mvn -version

Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 1.8.0\_292, vendor: AdoptOpenJDK
Java home: /usr/lib/jvm/adoptopenjdk-8-hotspot/jre
Default locale: en\_US, platform encoding: ANSI\_X3.4-1968
OS name: "linux", version: "3.10.0-1160.el7.x86\_64", arch: "amd64", family: "unix"
1
2
3
4
5
6
7
8
9

# 新增JDK

登录到Jenkins管理后台,点击 Manage Jenkins --> Global Tool Configuration

点击 新增jdk

自动安装 前面的勾选,去掉,输入别名和JAVA_HOME

注意:JAVA_HOME的输入框下面,不要有警告或者错误信息,否则就是路径不正确。

使用 mvn -version 命令时,就已经打印了Java home变量,注意:去除最后的jre

# 新增Maven

点击新增Maven

同样去除自动安装,填写别名

点击保存

# Jenkins使用docker命令

此处还是为测试任务使用,加深对Jenkins的了解

创建流水线任务

输入pipeline脚本,点击保存

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'docker images'
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10

立即构建,查看控制台

# Jenkins+Harbor+GitLab+K8S

# 方式一

缺点:对K8S脚本generateyaml.sh创建模板较死板,我是随便摸索写的测试
个人喜欢方式二

# K8S创建命名空间

登录Kuboard创建命名空间:imtest

# K8S创建Harbor密码信息

输入Harbor之前创建的账号密码

# 工程新建脚本

将脚本放在工程根目录下

脚本:

链接:https://pan.baidu.com/s/1Z73E8sBq9TqYR2sEWiFeZg 提取码:pkrg

目录结构如下

# Jenkins创建任务

新建流水线任务:imtest1

构建触发器

*/1 * * * *

流水线

点击保存

立即构建-查看日志,第一次会报错。

进入201服务器,执行命令

kubectl apply -f /root/data/app/imdemo.yaml

Jenkins再次构建就成功了,后续代码提交自动构建

# 方式二

缺点:需要先去创建一次pod
优点:自由配置pod

# K8S创建命名空间

登录Kuboard创建命名空间:imtest

# K8S创建Harbor密码信息

输入Harbor之前创建的账号密码

地址要用http://ip:端口

# 工程新建脚本

地址:

链接:https://pan.baidu.com/s/1gTttHuYcQgCZUIqmQBjIEQ 提取码:77rh

目录结构如下

# Jenkins创建任务

新建流水线任务:imtest1

构建触发器

*/1 * * * *
1

流水线

点击保存

立即构建-查看日志,第一次会报错。

# K8S创建Pod

如图所示,创建服务名称imdemo

点击保存

创建完成

查看CI/CD集成,复制到剪切板

修改Jenkinsfile

将复制的内容替换掉红色方块内容

代码提交自动构建成功

缺陷:后续需要修改的地方

Jenkinsfile文件中镜像版本每次提交需要修改变化,这4个地方

修复缺陷,每次提交不用再修改上文4个标红的地方,使用$BUILD_ID代替

Jenkinsfile

pipeline {
    agent any
    stages {
        stage('package') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('buildDockerImages') {
            steps {
                sh 'docker login 192.168.213.204:20480 -u wuxiaoku -p Wuxiaoku123'
                sh 'docker build --build-arg app=imdemo.jar -t 192.168.213.204:20480/kudemo/imdemo:$BUILD_ID .'
                sh 'docker push 192.168.213.204:20480/kudemo/imdemo:$BUILD_ID'
                sh 'docker rmi 192.168.213.204:20480/kudemo/imdemo:$BUILD_ID'
            }
        }
        stage('deploymentK8S'){
             steps {
                 sh """
                     curl -X PATCH \
                     -H "content-type: application/strategic-merge-patch+json" \
                     -H "Authorization:Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ikl1SGVIeVY3TEdEeFZ1b3Z4QzU5eEFmU2pacGtVWGlRTHpIQ3hBR3V5NTQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tcm1zcHoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOTE0ZWVlYjUtMmZiOS00YzZmLTg1YzUtZjYzOWFiODZlODJjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.K7h7UrtDcsUNy2GYTznloOPZiWML0ll_zEhd1fUaY0pioTQ-MEPgDdp6rRnZmUm7ujNM_zsjzhS4KTbezSV-1Od0O-yhQrTyrqpvcXBi_EP77s9nDueZ_4fMx76Eh-cZfsOPQxYtG0sufqZmqcM1DWzNHDQcBMmFy1nhDbPncnmiirNrEBSFfrVb-ie6Z33Ip61tZjkYvrW6PeVHXEagTjrHnjmO9zw_L8to9V4pE990vcQrJE3f5pUN94k7JD5EhlJT0j1ljPrhRbpL8m-KjLpypKqfq9i7mj3vXE9_1mEVSi78nGuyR2cBaCLPoV7C3HRUN_dvCdR1tcI6nOLT2Q" \
                     -d '{"spec":{"template":{"spec":{"containers":[{"name":"imdemo","image":"192.168.213.204:20480/kudemo/imdemo:$BUILD_ID"}]}}}}' \
                     "http://192.168.213.201:32567/k8s-api/apis/apps/v1/namespaces/imtest/deployments/web-imdemo"
                 """
             }
        }
    
    }
}
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

参考博客部分内容:
https://www.jianshu.com/p/fd9f1076ea2d
https://www.cnblogs.com/xiao987334176/p/11434849.html

上次更新: 2023/03/14, 05:49:29
Prometheus部署及使用
K8S-在线安装

← Prometheus部署及使用 K8S-在线安装→

Copyright © 2019-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式