CI/CD

环境
在这里插入图片描述

一、k8s集群服务器-配置SSH免密码登录

1.k8s集群几台服务器都安装ssh

ssh-keygen -t rsa #一路回车
在这里插入图片描述
[root@k8smaster01 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

2.将worker01、02的ssh复制到master节点
[root@k8swork01 ~]# scp .ssh/id_rsa.pub k8smaster01.huamengtech.net:/root/.ssh/221
[root@k8swork02 ~]# scp .ssh/id_rsa.pub k8smaster01.huamengtech.net:/root/.ssh/222

在master01服务器上执行如下命令

[root@k8smaster01 ~]# cat ~/.ssh/221 >> ~/.ssh/authorized_keys
[root@k8smaster01 ~]# cat ~/.ssh/222 >> ~/.ssh/authorized_keys
3.然后将authorized_keys文件分别复制到worker01\02服务器上

[root@k8smaster01 ~]# scp .ssh/authorized_keys k8sworker01.huamengtech.net:/root/.ssh/authorized_keys

[root@k8smaster01 ~]# scp .ssh/authorized_keys k8sworker02.huamengtech.net:/root/.ssh/authorized_keys

删除master01节点上~/.ssh下的221和222文件

[root@k8smaster01 ~]# rm ~/.ssh/221
[root@k8smaster01 ~]# rm ~/.ssh/222

二、安装JDK和MAVEN

k8s每台服务器上安装JDK,到Apache官方下载Maven

install_huanjing.sh

#配置java
tar -zxf jdk-8u202-linux-x64.tar.gz
mv jdk1.8.0_202 /usr/local/
ln -s /usr/local/jdk1.8.0_202 /usr/local/jdk
#刷新
source /etc/profile
#配置maven
#wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -zxf apache-maven-3.8.6-bin.tar.gz
mv apache-maven-3.8.6 /usr/local/
ln -s /usr/local/apache-maven-3.8.6 /usr/local/maven
#配置环境变量
cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/local/jdk
export MAVEN_HOME=/usr/local/maven
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin:$MAVEN_HOME/bin
EOF
#刷新
source /etc/profile
java -version
mvn -v

修改maven配置文件
[root@k8swork02 ~]# vim /usr/local/apache-maven-3.8.6/setting.xml

在这里插入图片描述

三、安装前环境配置

每台服务器都要赋权,然后运行install_k8s_huanjing.sh脚本
chmod a+x install_k8s_huanjing.sh && cat install_k8s_huanjing.sh

#配置阿里云镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://ct8asqlq.mirror.aliyuncs.com”]
}
EOF
systemctl daemon-reload
systemctl restart docker
#安装nfs-utils
yum install -y nfs-utils
yum install -y wget
#启动nfs-server
systemctl start nfs-server
systemctl enable nfs-server
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭SeLinux
setenforce 0
sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config
#关闭 swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
#修改 /etc/sysctl.conf
#如果有配置,则修改
sed -i “s#^net.ipv4.ip_forward.#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.
#net.bridge.bridge-nf-call-ip6tables=1#g” /etc/sysctl.conf
sed -i “s#^net.bridge.bridge-nf-call-iptables.#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.
#net.ipv6.conf.all.disable_ipv6=1#g” /etc/sysctl.conf
sed -i “s#^net.ipv6.conf.default.disable_ipv6.#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.
#net.ipv6.conf.lo.disable_ipv6=1#g” /etc/sysctl.conf
sed -i “s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g” /etc/sysctl.conf
#可能没有,追加
echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf
echo “net.bridge.bridge-nf-call-ip6tables = 1” >> /etc/sysctl.conf
echo “net.bridge.bridge-nf-call-iptables = 1” >> /etc/sysctl.conf
echo “net.ipv6.conf.all.disable_ipv6 = 1” >> /etc/sysctl.conf
echo “net.ipv6.conf.default.disable_ipv6 = 1” >> /etc/sysctl.conf
echo “net.ipv6.conf.lo.disable_ipv6 = 1” >> /etc/sysctl.conf
echo “net.ipv6.conf.all.forwarding = 1” >> /etc/sysctl.conf
#执行命令以应用
sysctl -p

四、安装docker(k8s集群三台服务器都要做此操作)

编写安装.sh脚本

[root@k8smaster01 ~]# cat install_docker.sh

export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8
systemctl enable docker.service
systemctl start docker.service
docker version

为install_docker.sh脚本赋予赋权777,并执行脚本即可。

chmod 777 install_docker.sh
[root@k8swork02 ~]# ll
总用量 197984
-rw-------. 1 root root 1270 11月 11 2021 anaconda-ks.cfg
-rw-r–r-- 1 root root 8676320 6月 7 00:45 apache-maven-3.8.6-bin.tar.gz
-rwxrwxrwx 1 root root 482 8月 1 18:09 install_docker.sh
-rw-r–r-- 1 root root 194042837 8月 1 17:46 jdk-8u202-linux-x64.tar.gz
-rw-r–r-- 1 root root 412 8月 1 17:24 k8smaster01.huamengtech.net

检验docker安装情况
docker ps && docker run hello-world && docker ps -a

[root@k8smaster01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k8smaster01 ~]# docker run hello-world
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:53f1bbee2f52c39e41682ee1d388285290c5c8a76cc92b42687eecf38e0af3f0
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
===============
[root@k8smaster01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k8smaster01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59a6237a462b hello-world “/hello” 7 seconds ago Exited (0) 6 seconds ago tender_merkle

五、安装docker-compose

1.下载docker-compose文件
curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

在这里插入图片描述

2.为docker-compose文件赋予可执行权限

chmod a+x /usr/local/bin/docker-compose

3.查看docker-compose版本

[root@k8smaster01 ~]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019


六、安装kubernetes_rancher

使用rancher 容器管理平台来管理kubernetes集群

[root@k8smaster01 ~]# docker pull rancher/rancher:v2.5.11 master01拉取镜像

v2.5.11: Pulling from rancher/rancher
284055322776: Pull complete
19763da17d52: Pull complete
dcba38686409: Pull complete
e29446e69556: Pull complete
e0edee3cdc12: Pull complete
6daa78a2ec74: Pull complete
e3a3c6bc780d: Pull complete
6c4f773f88b6: Pull complete
c5e890fd9374: Pull complete
85ceb4a5a420: Pull complete
dfecfc72402d: Pull complete
c772cfbd0e5b: Pull complete
8c4865378f10: Pull complete
71cc47c5d0b5: Pull complete
457a5bbc46e0: Pull complete
01ed63f2c8ee: Pull complete
a7a970f5b9d3: Pull complete
Digest: sha256:e924341c2c1a60d3551729f87a7ba43b015e3c6bf11d1e41d1517dac2f76fc94
Status: Downloaded newer image for rancher/rancher:v2.5.11
docker.io/rancher/rancher:v2.5.11

[root@k8smaster01 ~]# docker images 查看当前镜像信息

REPOSITORY TAG IMAGE ID CREATED SIZE
rancher/rancher v2.5.11 0afe3795bb3a 9 months ago 1.06GB
hello-world latest feb5d9fea6a5 10 months ago 13.3kB

官网方法是 -p 80:80 -p 443:443 即虚拟机80端口映射到容器的80端口,虚拟机443端口映射到容器443端口。但该方法实际使用时发现端口映射无效,提示 404 page not found。
因此安装时将虚拟机的端口换成其他端口来映射,不使用http和https的80和443端口。

[root@k8smaster01 ~]# docker run -d --privileged --restart=unless-stopped -v /usr/local/rancher:/usr/local/rancher -p 8447:80 -p 8448:443 rancher/rancher /bin/bash

参数解析:
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
privileged 使用该参数,container内的root会拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
-v /usr/local/rancher:/usr/local/rancher 容器目录,如果不指定,删除容器在启动的话,rancher之前的配置都会失效。


rancher完成安装,访问

https://10.99.31.220:8443
在这里插入图片描述

添加节点

在master01-220、worker01-221、worker02-222服务器上运行集群密钥,会自行加入到k8s集群中

配置下游管理
master01配置kubernetes的yum库

cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安装kubectl

yum -y install kubectl

master节点创建目录,把从k8s集群中下载的kube-config.yaml的内容复制到 ~/.kube/config中
[root@k8smaster01 ~]# mkdir ~/.kube/
[root@k8smaster01 ~]# vim ~/.kube/config

下游配置完成。

部署jenkins

查看Jenkins版本信息

[root@k8swork02 ~]# docker search jenkins
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
jenkins DEPRECATED; use “jenkins/jenkins:lts” instead 5522 [OK]
jenkins/jenkins The leading open source automation server 3147

拉取Jenkins镜像到本地[root@k8swork02 ~]# docker pull jenkins/jenkins

Using default tag: latest
latest: Pulling from jenkins/jenkins
0e29546d541c: Pull complete
11bbb8c402a7: Pull complete
cf91f018150b: Pull complete
a98e88c6f0f0: Pull complete
f67fc70d671a: Pull complete
edbe48067464: Pull complete
fa23ca93dd6b: Pull complete
00159d993c13: Pull complete
f28fb40a17cf: Pull complete
071d309df04b: Pull complete
78599f36e494: Pull complete
896a32d969fb: Pull complete
3f1a51ea9f7f: Pull complete
26e724f0bfad: Pull complete
b377e1ae1384: Pull complete
d3cdbe7e8b9f: Pull complete
f3b40ebc3458: Pull complete
Digest: sha256:c3fa8e7f70d1e873ea6aa87040c557aa53e6707eb1d5ecace7f6884a87588ac8
Status: Downloaded newer image for jenkins/jenkins:latest
docker.io/jenkins/jenkins:latest

为Jenkins创建目录

[root@k8swork02 ~]# mkdir -p /usr/local/jenkins
[root@k8swork02 ~]# chmod 777 /usr/local/jenkins
创建挂载目录的同时要给该目录配置权限 777,如果权限不足的话,到时进行目录挂载的时候会失败导致无法启动 Jenkins 容器。

启动Jenkins

docker run -d
-p 8888:8080
-p 50000:50000
-v /usr/local/jenkins:/var/jenkins_home
-v /etc/localtime:/etc/localtime
–restart=always
–name=jenkins
jenkins/jenkins

-d:后台运行容器;
-p 8888:8080:将容器的 8080 端口映射到服务器的 8888 端口;
-p 50000:50000:将容器的 50000 端口映射到服务器的 50000 端口;
-v /usr/local/jenkins:/var/jenkins_home:将容器中 Jenkins 的工作目录挂载到服务器的 /usr/local/jenkins;
-v /etc/localtime:/etc/localtime:让容器使用和服务器同样的时间设置;
–restart=always:设置容器的重启策略为 Docker 重启时自动重启;
–name=jenkins:给容器起别名;

查看运行状态

[root@k8swork02 ~]# docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c23a749c14a jenkins/jenkins “/sbin/tini – /usr/…” 12 seconds ago Up 10 seconds 0.0.0.0:50000->50000/tcp, 0.0.0.0:8888->8080/tcp jenkins

查看日志
[root@k8swork02 ~]# docker logs jenkins

在这里插入图片描述

如果没有启动成功的话,可以排查一下挂载的目录是否正确,比如是否配了目录权限等。

初始化 Jenkins

在这里插入图片描述
装插件
在这里插入图片描述
进入界面
在这里插入图片描述

Jenkins安装完成。

Jenkins 密码重置(忘记admin密码)

[root@localhost software]# docker exec -it jenkins /bin/bash ===》进入到容器中
jenkins@36b57c5354c7:/$ cat /var/jenkins_home/secrets/initialAdminPassword ====》 获取密码
226fe9d7cede4d69a97a54b464113ddc

或进入jenkins ,删除以下代码

<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>

在这里插入图片描述

安装kubernetes插件

Kubernetes Cli Plugin:该插件可直接在Jenkins中使用kubernetes命令行进行操作。
Kubernetes plugin:使用kubernetes则需要安装该插件
Kubernetes Continuous Deploy Plugin:kubernetes部署插件,可根据需要使用
还有更多的插件可供选择,可点击 系统管理->管理插件进行管理和添加,安装相应的Docker插件、SSH插件、Maven插件。其他的插件可以根据需要进行安装。如下图所示。

配置JDK和Maven(系统配置-全局工具配置)

在Global Tool Configuration中配置JDK和Maven,如下所示,打开Global Tool Configuration界面。
Maven
[root@gitjen01 conf]# pwd
/usr/local/apache-maven-3.8.6/conf
[root@gitjen01 conf]# ll
总用量 16
drwxr-xr-x 2 root root 37 6月 7 00:16 logging
-rw-r–r-- 1 root root 10739 8月 1 18:04 settings.xml
-rw-r–r-- 1 root root 3747 6月 7 00:16 toolchains.xml
在这里插入图片描述
Jdk
[root@gitjen01 jdk1.8.0_202]# pwd
/usr/local/jdk1.8.0_202
注意:不要勾选“Install automatically”
在这里插入图片描述

安装git插件

•GitLab
•Gitlab Hook
•Gitlab Authentication
•GitLab Logo

安装gitlab

查看gitlab版本

[root@k8swork02 ~]# docker search gitlab

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
bitnami/gitlab-runner 11
drud/gitlab-ce 11
pipelinecomponents/markdownlint Markdownlint in a container for gitlab-ci 2

拉取gitlab镜像

[root@k8swork02 ~]#docker pull gitlab/gitlab-ce

Digest: sha256:5a0b03f09ab2f2634ecc6bfeb41521d19329cf4c9bbf330227117c048e7b5163
Status: Downloaded newer image for gitlab/gitlab-ce:latest
docker.io/gitlab/gitlab-ce:latest

创建映射文件目录

[root@k8swork02 ~]# mkdir -p /usr/local/gitlab/{config,data,logs}
[root@k8swork02 ~]# chmod 777 /usr/local/gitlab

安装gitlab

docker run -d -p 443:443 -p 8082:80 -p 222:22 --name gitlab --restart always -v /usr/local/gitlab/config:/etc/gitlab -v /usr/local/gitlab/logs:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

参数说明:
-d: 后台启动
-p 8082:80 : -p端口映射,将容器的80端口映射到宿主机的8082,也就是说当你安装成功后通过IP:8082可以访问gitlab
–name gitlab 给你的容器命名为gitlab 方便后续操作,毕竟通过容器ID进行操作过于麻烦
-v /usr/local/gitlab/config:/etc/gitlab 文件映射-将容器内部的/etc/gitlab映射到宿主机的/home/mappingdata/gitlab/config
最后 gitlab/gitlab-ce 你是根据那个镜像启动的该容器(也就是你上面拉取的gitlab的镜像名)
在这里插入图片描述

查看gitlab运行情况

在这里插入图片描述
修改配置:

只需要修改映射的宿主机的配置文件 然后重启该容器即可
修改/home/mappingdata/gitlab/config 目录下的gitlab.rb

# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://10.99.31.222'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '10.99.31.222'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口

着重说明下:
很多网上的说法是当你配置external_url时需要IP+端口,但是你创建该容器时 已经映射过,所以此处只配置IP即可

然后你会发现当你访问IP+8082(你启动是映射的端口时)会有 502 界面的错误提示

配置超时设置

gitlab_rails[‘webhook_timeout’] = 90
gitlab_rails[‘git_timeout’]=90

查看gitlab的初始密码

类似安装mysql的时候会有一个root的初始密码
查看root的初始密码:
docker exec -it 容器名字或容器ID grep ‘Password:’ /etc/gitlab/initial_root_password
root@b859a4110c76:/# cat /etc/gitlab/initial_root_password

#WARNING: This value is valid only in the following conditions
#1. If provided manually (either via GITLAB_ROOT_PASSWORD environment variable or via gitlab_rails['initial_root_password'] setting in gitlab.rb, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#2. Password hasn’t been changed manually, either via UI or via command line.
#If the password shown here doesn’t work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: 8C0MOkMoV+ZttGibnQWlP29Ldqdg6h2H7btOuFkNjAk=
#NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

在这里插入图片描述
在这里插入图片描述

gitlab root密码忘记

进入容器,输入
user = User.where(username:“root”).first
user.password = “Harbor12345”
user.save!

root@b859a4110c76:/# gitlab-rails c
irb(main):004:0> user = User.where(username:“root”).first
=> #<User id:1 @root>
irb(main):005:0> user.password = “Harbor12345”
=> “Harbor12345”
irb(main):006:0> user.save!
=> true
irb(main):007:0>

gitlab安装完成

harbor安装

前提,安装docker docker-compose
下载解压harbor包

wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.0.tgz
[root@k8swork01 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.0.tgz

–2022-08-02 16:59:03-- https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.0.tgz
正在解析主机 storage.googleapis.com (storage.googleapis.com)… 142.251.43.16, 172.217.163.48, 172.217.160.112, …
正在连接 storage.googleapis.com (storage.googleapis.com)|142.251.43.16|:443… 已连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度:618625089 (590M) [application/x-tar]
正在保存至: “harbor-offline-installer-v1.9.0.tgz”

[root@k8swork01 ~]# mv harbor /usr/local/
[root@k8swork01 ~]# cd /usr/local/harbor/
[root@k8swork01 harbor]# ls
harbor.v1.9.0.tar.gz harbor.yml install.sh LICENSE prepare
[root@k8swork01 harbor]# vim harbor.yml
在这里插入图片描述
更换端口,在修改完harbor.yml之后,执行如下才会生效:

docker-compose down
docker-compose up

执行install.sh安装

[root@k8swork01 harbor]# ./install.sh
在这里插入图片描述

harbor安装完成,进入harbor

http://10.99.31.221:8881/
在这里插入图片描述

添加私有镜像库

[root@k8swork01 harbor]# cat /etc/docker/daemon.json

{
“registry-mirrors”: [“https://ct8asqlq.mirror.aliyuncs.com”],
“insecure-registries”:[“10.99.31.221”]
}

harbor基础配置

创建私有仓库用户名,并且设置密码,

用户管理-创建用户
jenkins/Harbor12345
在这里插入图片描述

把创建用户绑定library仓库

项目-library-成员,添加刚才创建的用户jenkins,并配置用户的角色
在这里插入图片描述

docker login,确认使用创建用户登录

出错1

Error response from daemon: Get https://10.99.31.221:8881/v2/: http: server gave HTTP response to HTTPS client

在这里插入图片描述
原因:是因为地址写的不对,添加镜像库端口即可
[root@k8swork01 harbor]# cat /etc/docker/daemon.json
{
“registry-mirrors”: [“https://ct8asqlq.mirror.aliyuncs.com”],
“insecure-registries”:[“10.99.31.221:8881”] #增加harbor系统端口
}
[root@k8swork01 harbor]# systemctl restart docker

出错2

Error response from daemon: Get http://10.99.31.221:8881/v2/: dial tcp 10.99.31.221:8881: connect: connection refused
在这里插入图片描述
原因:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交时出现以上错误。

解决办法是:在docker server启动的时候,增加启动参数,默认使用HTTP访问:

vim /usr/lib/systemd/system/docker.service
ExecStart 行后面添加 --insecure-registry ip:5000

在这里插入图片描述
修改好后重启docker 服务

systemctl daemon-reload
systemctl restart docker

这种方法不适合我的系统!我的是因为harbor服务没有启动。。。
在这里插入图片描述

登录harbor

[root@k8swork01 harbor]# docker login 10.99.31.221:8881
在这里插入图片描述.

harbor 使用(镜像tag、push、pull)

根据harbor镜像库的镜像信息来做以下三种操作
在这里插入图片描述

1.将当前镜像打标签,并push到镜像库中
(打标签时要注意:harbor镜像库-镜像项目的名称。默认打标签时的格式如下)

docker tag 宿主机镜像类/镜像名:版本号 harbor镜像库地址/项目名称/镜像名称:版本号
docker tag gitlab/gitlab-ce:latest 10.99.31.221:8881/huameng/gitlab-ce:latest

2.将新镜像push到harbor镜像库-指定项目中

docker push 10.99.31.221:8881/huameng/gitlab-ce:latest 将gitlab-ce:latest镜像推送到10.99.31.222:8881中的huameng项目中。

3.pull镜像到宿主机

docker push 10.99.31.221:8881/huameng/gitlab-ce:latest

docker使用

删除所有容器
docker rm $(docker ps -a -q) #正在运行的删除不了,所有未运行的都被删除了
删除所有镜像
docker rmi $(docker images -q)


第二部分、Jenkins+gitlab+harbor+rancher对接

jenkins集成gitlab

先在gitlab中创建一个push/pull代码的用户
在这里插入图片描述
在Jenkins服务器上生成ssh-key

[root@gitjen01 bin]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDyDGut2UeEECHfzho/+y6AcfUKUnDQ4N+sZ9wwlWGsqK+7x/n5cYrk7QhvLE4AmodrX3VbJTADj1oRx5b33OyK5vGUaaE57cCH1LhqiHrDeOfbXg/37VIfyxOIzOm0mnOg+k1a2w9GScyKBjQZZmYwubTXcEj69qy2o7KaWW3uC9aiu44/6QflIonxDXnjZprSwY6XkUDj8BvWqnPT/z7gl+uObcaopPg9T92qP03+/dlapg4s2wPSMtu7kes0a4U2tCJwcS69sHx3WDPV0wTBYwRKyhGovbYVdEdTlNunjVRlu0PrWRfcUb7lOaxY/o1oql5kpmNEnPJt4UP412Ph root@gitjen01.huamengtech.net

将Jenkins的公钥填入GitLab账号中
在这里插入图片描述

jenkins 集成gitlab
1.gitlab中git_to_jen01创建令牌

在这里插入图片描述在这里插入图片描述
Y8j6DF4dbs2-AJpjXiDg

复制这个令牌信息,待会再Jenkins中使用

2.jenkin中添加gitlab代码仓库信息

Dashboard—系统管理—系统配置—gitlab—(见下图)
令牌信息
在这里插入图片描述
在这里插入图片描述

gitlab创建项目

在这里插入图片描述
在这里插入图片描述
将存储库推送到项目
使用git-clone命令将存储库克隆到本地系统。在一个目录下,打开Git Bash,执行以下命令:
git clone http://10.99.31.222:8082/git_to_jen01/my-first-projects.git
在这里插入图片描述
这里,不知道为什么代码地址变成了遗传字符串。。。而不是IP地址
添加代码信息
[root@gitjen01 ~]# git clone http://10.99.31.222:8082/git_to_jen01/my-first-projects.git

正克隆到 ‘my-first-projects’…
Username for ‘http://10.99.31.222:8082’: git_to_jen01
Password for ‘http://git_to_jen01@10.99.31.222:8082’:
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

[root@gitjen01 ~]# ls

anaconda-ks.cfg apache-maven-3.8.6-bin.tar.gz install_docker.sh install_k8s_huanjing.sh jdk-8u202-linux-x64.tar.gz k8smaster01.huamengtech.net my-first-projects

[root@gitjen01 ~]# cd my-first-projects/
[root@gitjen01 my-first-projects]# ls
README.md
[root@gitjen01 my-first-projects]# vim README.md
[root@gitjen01 my-first-projects]# vim abc.txt
[root@gitjen01 my-first-projects]# vim 123.txt

[root@gitjen01 my-first-projects]# git add .
将改动信息加到git库
[root@gitjen01 my-first-projects]# git commit -m “init data”

[main 22266cd] init data
Committer: root root@gitjen01.huamengtech.net
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:
git config --global user.name “Your Name”
git config --global user.email you@example.com
设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:
git commit --amend --reset-author
2 files changed, 8 insertions(+)
create mode 100644 123.txt
create mode 100644 abc.txt

[root@gitjen01 my-first-projects]#
在这里插入图片描述

推送代码出错

[root@gitjen01 my-first-projects]# git push -u origin master
Username for ‘http://10.99.31.222:8082’: git_to_jen01
Password for ‘http://git_to_jen01@10.99.31.222:8082’:
error: src refspec master does not match any. #这句话就说了 没有与 master 匹配的文件
error: 无法推送一些引用到 ‘http://10.99.31.222:8082/git_to_jen01/my-first-projects.git’
[root@gitjen01 my-first-projects]#

查看当前git 连接信息
[root@gitjen01 my-first-projects]# git remote -v
origin http://10.99.31.222:8082/git_to_jen01/my-first-projects.git (fetch)
origin http://10.99.31.222:8082/git_to_jen01/my-first-projects.git (push)

原因是,我在 github 新创建的 repo 默认主分支名是 main,而本地的主分支名称默认是 master,我在使用 push 命令的时候也用的 master,就导致 error 的产生。
把命令里的分支名修改成 main 就可以了
[root@gitjen01 my-first-projects]# git push -u origin main
在这里插入图片描述
gitlab中查看代码
在这里插入图片描述

gitlab推送代码成功

jenkin流水线(gitlab)

https://mp.weixin.qq.com/s?src=11&timestamp=1659498094&ver=3959&signature=JXAU5o57s37-GX5zXYFuXGgJHnGRWzZLPMTvtYzUKcpBXHq18aa1eRXqEBTJnlfgJFjKvLWVnuLTxAmNxuiZbBBgnLlL4svr3ig9sgBmeZQktIvHrQaOKdb38bqrmt&new=1

创建一个流水线项目

在这里插入图片描述
流水线语法
在这里插入图片描述
流水线认证
在这里插入图片描述
然后将代码 执行构建


node {
    stage('拉取代码'){
        git credentialsId: 'b907af22-5a74-4eee-aa5f-a822c764279c', url: 'git@172.19.95.139:dev01/sample.git'
        echo "Code Pull"
    }
    stage('代码扫描'){
        echo "Code Scanning"
    }
    stage('代码构建'){
        echo "Code Build"
    }
    stage('是否部署'){
        input '是否部署'
    }    
    stage('开始部署'){
        sh '/opt/jenkins/sample/sample_release.sh'
    }
}

在这里插入图片描述
虽然没有执行成功,但是已经启动而且拉取镜像了。
后面的就来进行推送镜像和K8s部署了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值