搭建基于 Docker 的 CI/CD

安装 Docker

安装这里就不在赘述,详情可以看下面这条链接。
docker 基础和安装:https://blog.csdn.net/qq_39253370/article/details/115430300

CI/CD 概念

  1. 持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
  2. 持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。
  3. 持续交付(Continuous Delivery,CD):将最终产品发布到生产环境,给用户使用。

安装Harbor

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。

为什么使用 harbor?
当有多个镜像需要部署到多个节点服务器上面时,如果没有一个统一管理镜像的地方,那么就需要再每台上面写 dockerfile 构建镜像,任务量大的时候这很浪费效率,harbor 就是一个镜像管理仓库,构建好的镜像 push 到 harbor 上面,那么其他节点部署的时候直接从 harbor 仓库中 pull 下来运行就可以了,所以harbor是作为一个中心节点来集中管理镜像。

安装步骤:
安装 docker

安装 工具包:
	yum install -y yum-utils device-mapper-persistent-data lvm2 安装工具包
	
安装docker软件包源:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   //这里使用阿里云的源,官方的再国外,比较慢

安装 docker-ce版本:
yum install -y docker-ce  

启动docker:
systemctl start docker  

设置开机自动启动:
systemctl enable docker  

镜像加速:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 

重启docker
systemctl restart docker  

安装 harbor
下载 harbor 离线包:https://github.com/goharbor/harbor/releases

解压:
tar zxvf  harbor-offline-installer-v1.9.1.tgz
cd harbor
vi harbor.yml  修改harbor访问域名 hostname
执行 ./prepare  先准备一下
./install 安装时会提醒你没有安装docker-compose

安装 docker-compose:
安装方式:https://docs.docker.com/compose/install/#install-compose

mv docker-compose user/bin/docker-compose   移动到bin目录下命名为docker-compose
chmod +x user/bin/docker-compose 加一个可执行权限
执行 ./install 
成功之后执行 docker-compose ps 看一下harbor组件是否运行成功
查看默认密码:cat harbor.yml  默认是 Harbor12345

安装成功页面:
在这里插入图片描述
安装上述执行的一些相关命令和步骤:
在这里插入图片描述
推送镜像到 harbor 仓库里中:
这里会教你怎么推送镜像到仓库,library-镜像仓库-推送镜像
在这里插入图片描述
推送命令:

docker tag nginx:latest  175.27.229.160/nginx:latest
docker push 175.27.229.160/nginx:latest

提示连接拒绝,因为 dokcer 默认是 https去访问的,harbor 只支持 http
在这里插入图片描述
解决办法:需要在docker配置可信任

docker info 找到 insecure-registries
vim /etc/docer/daemon.json   将"insecure-registries": ["自己的ip"]
重启docker:systemctl restart docker 如果起不来一定是配置有问题,请重新检查
因为重启docker了,所以需要把docker-compose 也都启起来:docker-compose up -d

再次推送:

[root@VM-0-14-centos harbor]# docker tag nginx:latest  175.27.229.160/library/nginx:latest
[root@VM-0-14-centos harbor]# docker push 175.27.229.160/library/nginx:latest

提示:denied: requested access to the resource is denied
解决方式:先登录 docker login 域名或者ip
docker login ip 输入 harbor 账号密码就可以了

在这里插入图片描述
登录成功:
登录成功之后会有一个认证信息:路径:/root/.docker/config.json 在这里插入图片描述
cat /root/.docker/config.json
在这里插入图片描述
再次推送:
在这里插入图片描述
在这里插入图片描述

安装 gitlab

使用 git 来管理代码,安装方式使用 docker:

docker run -d \
  --name gitlab \
  -p 8443:443 \
  -p 9999:80 \
  -p 9998:22 \
  -v $PWD/config:/etc/gitlab \
  -v $PWD/logs:/var/log/gitlab \
  -v $PWD/data:/var/opt/gitlab \
  -v /etc/localtime:/etc/localtime \
  lizhenliang/gitlab-ce-zh:latest

这里我找了一个测试项目,你们自己也可以找一些 java、python项目来做。

步骤:
	1.创建代码仓库
	2.将项目代码提交到该仓库中

后续会在 jenkins 中使用 pipeline 时会从 git 上面拉取代码进行持续的 CI/CD
在这里插入图片描述

安装 jenkins

前置工作:

# tar zxvf jdk-8u45-linux-x64.tar.gz
# mv jdk1.8.0_45 /usr/local
# tar zxf apache-maven-3.5.0-bin.tar.gz
# mv apache-maven-3.5.0 /usr/local

安装jenkins:

docker run -d --name jenkins -p 81:8080 -p 50000:50000 -u root  \
   -v /opt/jenkins_home:/var/jenkins_home \
   -v /var/run/docker.sock:/var/run/docker.sock   \
   -v /usr/local/python3/Python-3.6.2:/usr/local/python3/Python-3.6.2   \
   -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7   \
   -v /usr/bin/docker:/usr/bin/docker \
   -v /usr/local/apache-maven-3.5.0:/usr/local/maven \
   -v /usr/local/jdk1.8.0_45:/usr/local/jdk \
   -v /etc/localtime:/etc/localtime \
   --name jenkins jenkins/jenkins:lts

查看密码:

docker logs jenkins

在这里插入图片描述
安装插件:

1.git
2.pipeline
3.local 如果想中文显示可以安装这个插件
安装 git pipeline  如果安装慢可以更换Jenkins源:
sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json,
路径是:/opt/jenkins_home/updates  必须要进入这个目录下  重启jenkins

在这里插入图片描述
新建一个 pipeline 项目:
在这里插入图片描述

编写 pipeline:

#!/usr/bin/env groovy

def registry = ""  //自己的harbor仓库地址
def project = "welcome"  //项目名
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}" //镜像名称
def git_address = ""   //自己的git地址
def docker_registry_auth = ""   //登录 harbor 的凭证
def git_auth = ""               //登录 git 的凭证

pipeline {
    
    
    agent any
    stages {
    
    
        stage('拉取代码'){
    
    
            steps {
    
    
              checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
            }
        }

        stage('代码编译'){
    
    
           steps {
    
    
             sh """
                JAVA_HOME=/usr/local/jdk
                PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
                mvn clean package -Dmaven.test.skip=true
                """ 
           }
        }

        stage('构建镜像'){
    
    
           steps {
    
    
                withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
    
    
                sh """
                  echo '
                    FROM ${registry}/library/tomcat:v1
                    RUN rm -rf /usr/local/tomcat/webapps/*
                    ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
                  ' > Dockerfile
                  docker build -t ${image_name} .
                  docker login -u ${username} -p '${password}' ${registry}
                  docker push ${image_name}
                """
                }
           } 
        }

        stage('部署到Docker'){
    
    
           steps {
    
    
              sh """
              docker rm -f tomcat-java-demo |true
              docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}
              """
            }
        }
    }
}

需要获取两个凭证信息,harbor 和 git:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构建成功:构建镜像用了29分钟,哈哈~~~,我这边网络不太好
在这里插入图片描述

相关文献

docker 基础:https://blog.csdn.net/qq_39253370/article/details/115430300

docker 监控:https://blog.csdn.net/qq_39253370/article/details/115552178

docker :https://yeasy.gitbook.io/docker_practice/

猜你喜欢

转载自blog.csdn.net/qq_39253370/article/details/115716427
今日推荐