gitlab+Jenkins+harbor+kubernetes的DevOps连通构建

这里写自定义目录标题

    • gitlab+Jenkins+harbor+kubernetes的DevOps连通构建
    • 一、总览图解
    • 二、gitlab安装部署
    • 三、jenkins安装部署以及配置
    • 四、harbor安装部署以及配置
    • 五、k8s集群部署
    • 六、测试

gitlab+Jenkins+harbor+kubernetes的DevOps连通构建

一、总览图解

gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第1张图片
这里是以我个人的理解画的,如有不对,感谢指正。

二、gitlab安装部署

我是使用https://blog.csdn.net/duyusean/article/details/80011540这位博主的安装方法。

三、jenkins安装部署以及配置

因为我是内网环境,我采用的是离线安装的方式,都比较简单。
1.进入jinkens官网下载war包。
添加链接描述
2.nohup java -jar jenkins.war --httpPort=8080 >/dev/null 2>&1 & 端口根据自己主机可用端口自定义。
3.打开浏览器,输入ip+port 登录。初始密码 找到 initialAdminPassword文件,cat一下,命令 find / -name initialAdminPassword。我的在/root/.jenkins/sercret/下面。
4.插件下载。如果是内网的话,你需要一个一个的下载并且不停的去下载导入依赖的插件,以我自己的经验,就下载最新的版本就行。在jenkins的官网就可以下载。这里也给大家附上链接jenkins插件。
需要的插件如下:
gitlab的插件:Git 、Git client、GitLab Plugin。
docker插件:Docker API Plugin、 Docker Commons Plugin、Docker plugin、 docker-build-step。
k8s插件:Kubernetes、Kubernetes Client API Plugin、
Kubernetes Credentials Plugin。
maven插件:Maven Integration。
如果有依赖插件,你们在引入的时候回提示你,你根据提示,自己补充就好。

四、harbor安装部署以及配置

harbor运行依赖于docker,因此我们首先得部署docker,外网环境下直接下载docker就行了,离线的话,这里分享给大家一个清华大学开源镜像网站:
清华大学镜像网站:https://mirrors.tuna.tsinghua.edu.cn/ 。可以在上面下载docker的rpm包,然后,这里注意docker的版本必须是17.03+,最好下载新一点的版本。这里再强调一下,centos最好是7或者8的,centos6的,我是没装好。
(1)安装docker-ce:
rpm -ivh + docker.rpm包名。
查看docker 运行状态:
systemctl status docker
运行docker :
systemctl start docker 。
(2)安装harbor
安装包下载地址:https://github.com/goharbor/harbor/releases
gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第2张图片
然后上传到服务器解压即可。
修改harbor配置文件
进入到harbor下的conf目录,修改名称:
cp harbor.yml.tmpl harbor.yml
需要修改配置如下:
gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第3张图片
hostname最好使用域名而不是ip,因为在后面的构建镜像的脚本中需要使用。当然用ip也可以,但是看着不优雅。
(3)配置harbor的https访问。
①root目录下新建一个文件夹并进入该文件夹

mkdir cert_bak

②生成 CA 证书私钥。

openssl genrsa -out ca.key 4096

③生成 CA 证书。

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt

其中yourdomain使用刚才harbor配置文件中hostname的域名。
④生成私钥:

openssl genrsa -out yourdomain.com.key 4096

⑤生成证书签名请求 (CSR):

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr

⑥生成 x509 v3 扩展文件:

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

⑦使用该v3.ext文件为您的 Harbor 主机生成证书:

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt

⑧向 Harbor 和 Docker 提供证书
转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用:

openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

创建文件夹:
mkdir -p /etc/docker/certs.d/yourdomain.com/
⑩将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。

cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

然后重启docker引擎:systemctl restart docker
在harbor home目录下执行 sh prepare
然后启动harbor ./install.sh.
(4)配置jenkins 和 k8s 服务器上的hosts文件,

vi /etc/hosts

harbor服务器ip harbor的hostname
这个后面我们在构建镜像的时候会使用docker登录。
刚才的https登录也是因为需要docker登录。
(5)分别登录jenkins和k8s服务器
执行docker login harbor的hostname 输入用户名密码:admin 和 Harbor12345
gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第4张图片
如图所示说明登录成功。
注意:jenkins服务器也需要安装docker。

五、k8s集群部署

我之前部署是参考这位博主的:
https://blog.csdn.net/pooasb/article/details/113769632

六、测试

(1)准备一个demo将代码提交到gilab上,然后添加一个Dockerfile文件,内容如下:

# 基于哪个镜像
FROM openjdk:8-jdk-alpine   

ENV LANG C.UTF-8

ENV TZ=Asia/Shanghai

#写一个标签
LABEL description="emss-wocf-wordorderinfo-front"

#指定工作目录
WORKDIR /app

#将jar包移动到指定的目录i
ADD emss-bsp-data-1.0.0.jar /app/emss-wocf-wordorderinfo-front-1.0.0.jar

#暴露端口
EXPOSE 40500

#设置JVM参数
ENV JAVA_OPTS="\
-Xms256m \
-Xmx256m \
-Xss256K \
-XX:MaxPermSize=64M \
-Dspring.cloud.nacos.discovery.server-addr=nacos-0.nacos:8858 \
-Dspring.cloud.nacos.config.server-addr=nacos-0.nacos:8858 \
-Djava.security.egd=file:/dev/./urandom"


# 配置容器启动后执行的命令
ENTRYPOINT  java -jar ${JAVA_OPTS} emss-wocf-wordorderinfo-front-1.0.0.jar

(2)打开jenkins页面,新建一个maven项目
gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第5张图片
这里的名字我随便起的。
(2)gitlab配置任务。
gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第6张图片
(3)构建镜像并将镜像推到镜像仓库Harbor:
gitlab+Jenkins+harbor+kubernetes的DevOps连通构建_第7张图片
新增执行shell

#!/bin/bash

#jar包的名字
JAR_NAME=test-0.0.1-SNAPSHOT.jar

#harbor服务地址
IMG_SERVER=reg.harbor.com

#镜像名字
IMAG_NAME=test

#项目主目录
JAR_MAIN_PATH=/var/lib/jenkins/workspace/test

#项目job的位置
JAR_JOB_MAIN_PATH=/var/lib/jenkins/jobs/test/modules

#target生成jar的目录
JAR_PATH=/var/lib/jenkins/workspace/test/target

#jar包运行的位置
JAR_WORKE_PATH=/home/app/project/test/

echo "----------进入主目录:$JAR_WORKE_PATH----------"

if [ ! -d "$JAR_WORKE_PATH" ]; then
	mkdir -p $JAR_WORKE_PATH
fi

cp $JAR_MAIN_PATH/Dockerfile $JAR_WORKE_PATH

cd $JAR_MAIN_PATH

echo "----------将jar包移动到指定的目录----------"

mv  $JAR_PATH/$JAR_NAME $JAR_WORKE_PATH

rm -rf $JAR_MAIN_PATH


cd $JAR_WORKE_PATH
    echo "----------执行构建镜像和上传镜像----------"
	docker login -u admin -p Harborpassword $IMG_SERVER
	docker build -t $IMG_SERVER/harbor_reg/$IMAG_NAME:v$BUILD_ID .
	docker push $IMG_SERVER/harbor_reg/$IMAG_NAME:v$BUILD_ID
   # docker rmi $IMG_SERVER/harbor_reg/$IMAG_NAME:v$BUILD_ID
    
echo "---------------开始删除job---------------------"

rm -rf $JAR_JOB_MAIN_PATH

#rm -rf $JAR_WORKE_PATH/$JAR_NAME-$BUILD_ID.jar

#echo "---------------构建 success-------------------------------"

在测试过程中可能会遇到很多问题,我第一次测了三十多次,才测通,所以这个在调通过程中可能会遇到很多问题,一个一个解决吧!我也走了很多弯路。

你可能感兴趣的:(gitlab,jenkins,k8s,docker,devops)