others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

jenkins 构建docker 镜像上传到harbor仓库(k8s 构建 发布)

访问量:1375 创建时间:2020-04-07

注意:这里仅为了快速跑通流程,未使用参数化构建,只是用最简单的功能来演示jenkins打包docker镜像,实现打包上传docker镜像到harbor仓库。生产环境根据自己公司的特点选择特定的构建方法。

创建jenkins项目opstest

配置opstest项目

说明: docker build -t 192.168.1.139/opstest/mytardis:1.5 . 这里的192.168.1.139/opstest/mytardis:1.5替换为你的仓库与项目、对应版本,版本号可以通过参数传递 docker push 192.168.1.139/opstest/mytardis:1.5 这里的将新构建的镜像上传到harbor仓库

开始构建前的准备工作

  • 修改jenkins的附加组,jenkins构建image时需要连接docker服务。(没有权限构建时会报错:permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post )
[root@zb-192-168-1-139 ~]# usermod -a -G docker jenkins
[root@zb-192-168-1-139 ~]# id jenkins
uid=998(jenkins) gid=994(jenkins) groups=994(jenkins),995(docker)
  • 通过root用户登陆harbor,将登陆后的配置文件传给jenkins,这样jenkins能够登陆harbor
[root@zb-192-168-1-139 ~]# docker login http://192.168.1.139
[root@zb-192-168-1-139 ~]# cp .docker/config.json /var/lib/jenkins/.docker/
[root@zb-192-168-1-139 ~]# chown jenkins.jenkins /var/lib/jenkins/.docker/config.json 
  • 确保你用来测试构建image的demo包含以下文件(如果你的项目是java请根据自己的情况决定。):
[root@zb-192-168-1-139 opstest]# pwd
/var/lib/jenkins/workspace/opstest
[root@zb-192-168-1-139 opstest]# ls
Dockerfile  manage.py  opstest  pip.conf  __pycache__  requirements.txt  run.sh
[root@zb-192-168-1-139 opstest]# cat Dockerfile 
FROM python:3.7

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/

RUN pip install -r /usr/src/app/requirements.txt
RUN rm -rf /usr/src/app

COPY . /usr/src/app
CMD ["/bin/bash","run.sh"]
[root@zb-192-168-1-139 opstest]# cat pip.conf 
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
[root@zb-192-168-1-139 opstest]# cat run.sh 
#!/bin/bash
python manage.py  makemigrations
python  manage.py migrate
python manage.py runserver 0.0.0.0:8000 
[root@zb-192-168-1-139 opstest]# cat requirements.txt 
asgiref==3.2.3
Django==3.0.1
mysqlclient==1.4.6
pymssql==2.1.4
pytz==2019.3
sqlparse==0.3.0
[root@zb-192-168-1-139 opstest]# cat opstest/settings.py 
...省略部分输出...
ALLOWED_HOSTS = ["*"]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'm******',
        'USER': 'my***',
        'PASSWORD':'****',
        'HOST': '192.168.1.140',
        'PORT': '3306',
    }
}
...省略部分输出...
# 这个django项目的settings连接数据库的配置我这里已经更改为mysql。并且在k8s集群外安装了mariadb数据库。

测试构建django测试项目 image

查看构建的log:

这里构建已经完成。登陆harbor查看image:

部署

确保你的集群已经都配置了harbor仓库与nginx-ingress(配置daemon.json需要重启systemctl restart docker):

[root@zb-192-168-1-108 ~]# cat /etc/docker/daemon.json 
{
  "insecure-registries": [
    "192.168.1.139"
  ]
}
[root@zb-192-168-1-139 mytardis-yaml]# cat mytardis-deployment.yaml 
apiVersion: apps/v1     
kind: Deployment      
metadata:               
  name: mytardis-deployment        
  labels:          
    app: mytardis  
spec:           
  replicas: 1   
  selector:       
    matchLabels: 
      app: mytardis
  template:      
    metadata:   
      labels:   
        app: mytardis
    spec:           
      containers:       
      - name: mytardis     
        image: 192.168.1.139/opstest/mytardis:1.5    
        ports:
        - containerPort: 8000
[root@zb-192-168-1-139 mytardis-yaml]# cat mytardis-ingress.yaml 
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress-for-mytardis  
spec:
  rules:                      
  - host: www.mytardis.com   
    http:
      paths:             
      - path: /
        backend:
          serviceName: mytardis-service 
          servicePort: 8000
[root@zb-192-168-1-139 mytardis-yaml]# cat mytardis-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mytardis-service   
  labels:       
    app: mytardis  
spec:       
  selector:      
    app: mytardis  
  ports:
  - name: mytardis-port   
    protocol: TCP        
    port: 8000          
    nodePort: 32766  
    targetPort: 8000    
  type: NodePort       

[root@zb-192-168-1-139 mytardis-yaml]# kubectl apply -f ./
deployment.apps/mytardis-deployment configured
ingress.networking.k8s.io/my-ingress-for-mytardis unchanged
service/mytardis-service unchanged

注意: 因为先前已经测试过,所以ingress与srevice为unchanged。

访问django服务

配置好本机的hosts文件,在浏览器中访问:http://www.mytardis.com/

至此通过jenkins打包jenkins镜像,push到harbor仓库,并且发布到k8s集群的demo流程演示完成。

登陆评论: 使用GITHUB登陆