安装 Docker
安装这里就不在赘述,详情可以看下面这条链接。
docker 基础和安装:https://blog.csdn.net/qq_39253370/article/details/115430300
CI/CD 概念
- 持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
- 持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。
- 持续交付(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