Jenkins+gitlab+docker+harbor容器化自动部署详细流程

环境:Linux版本:Centos7

一、更新源:
yum update

二、安装docker:
yum install docker -y

启动docker:

systemctl start docker

三、.安装gitlab

1.docker拉取镜像(社区版)

docker pull gitlab/gitlab-ce

2.运行gitlab镜像:
docker run -d -p 8443:443 -p 8090:80 -p 8022:22 –name gitlab –restart always -v /home/local/gitlab_docker/gitlab:/etc/gitlab -v /home/local/gitlab_docker/logs:/var/log/gitlab -v /home/local/gitlab_docker/data:/var/opt/gitlab gitlab/gitlab-ce

参数说明:

-d:后台运行

-p:端口映射,宿主机端口:容器端口

–name: 给将要运行的容器命名

–restart always:docker启动的时候,也自行启动

-v:挂载目录,宿主机目录:容器目录

gitlab/gitlab-ce:要运行的镜像

3.修改gitlab.rb配置文件

vim /home/local/gitlab_docker/gitlab/gitlab.rb

内容如下:

改成本机ip

external_url ‘http://192.168.42.227’
gitlab_rails[‘gitlab_ssh_host’] = ‘192.168.42.227’

上面映射的端口

gitlab_rails[‘gitlab_shell_ssh_port’] = 8022

4.进入容器重启配置

进去gitlab容器的命令

docker exec -it gitlab bash

重置gitlab客户端的命令

gitlab-ctl reconfigure

5.修改http的clone地址加上端口

进入容器内部

docker exec -it gitlab /bin/bash

修改文件

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

内容如下:

改成本机ip

host: 192.168.42.227

clone的端口,上面映射的端口

port: 8090
https: false

6.重启gitlab,在容器内执行:

gitlab-ctl restart

注解:如果使用docker restart gitlab,会自动执行gitlab-ctl reconfigure,配置会被还原,我们自己刚刚改的配置会丢失,慎用docker restart gitlab

四、安装Harbor
1.安装docker-compose
下载地址:https://github.com/docker/compose/releases ,选中docker-compose-linux-x86_64下载

2 下载完成重命名为:docker-compose,并放到 /usr/local/bin/下

3 赋予可执行权限:

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

4 创建软连接:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

5 检查安装结果:

docker-compose –version

6 下载harbor: https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz

并放到目录下: /home/local/

7 解压文件:

tar xzvf harbor-offline-installer-v2.4.1.tgz

8 拷贝配置文件:cp /home/local/harbor/harbor.yml.tmpl /home/local/harbor/harbor.yml

9 修改http访问地址,禁用https:

vi /usr/local/harbor/harbor.yml

内容如下:

本机ip

hostname: 192.168.42.227
http:
port: 8080

https 注解https下面的所属配置

10 执行安装:sudo /home/local/harbor/install.sh

11 启动、关闭:在harbor目录下执行命令:

启动:

docker-compose up -d

关闭:

docker-compose down

12 web(ip:8080)默认账号密码:admin Harbor12345

五、为docker设置harbor私服

1 将harbor私服的http地址配置到docker的不安全的register中,修改配置文件:

vim /etc/docker/daemon.json,

追加一行(和上一行用逗号隔开并回车):”insecure-registries”: [“192.168.42.227:8080”]

2 重启docker:

systemctl daemon-reload && systemctl restart docker

3 docker登录(会显示登录成功):

docker login -u admin -p Harbor12345 http://192.168.42.227:8080

4 上传镜像到私服

在harbor私服新建一个项目名A,

按照命名规则创建一个镜像:

docker tag 本机镜像:tag harbor私服地址:端口/项目名A/文件夹:tag

例如:把本机java镜像上传到私服 test_public 目录下

docker tag java:8 192.168.42.227:8080/test_public/image_test:v1

5 上传到私服:docker push 私服地址/项目名/文件夹:Tags

登录:

docker login -u admin -p Harbor12345 http://192.168.42.227:8080

上传:

docker push 192.168.42.227:8080/test_public/image_test:v1

6 拉取私服镜像:docker pull 私服地址/项目名/文件夹:Tags

docker pull 192.168.42.227:8080/test_public/image_test:v1

六、安装jenkins:

(建议不要用docker安装,因为用docker安装Jenkins写pipeline脚本时,就用不了宿主机的插件及命令)

1 依次执行以下命令

sudo wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm –import https://pkg.jenkins.io/redhat/jenkins.io.key
sudo dnf upgrade
sudo dnf install java-11-openjdk
sudo dnf install jenkins

2 修改jenkins用户
vi /etc/sysconfig/jenkins

JENKINS_USER=”jenkins” 改成 JENKINS_USER=”root”

3 配置

重新加载配置:
sudo systemctl daemon-reload

设置开机启动、关闭(先直接跳过该操作)

启动:

sudo systemctl enable jenkins

关闭:

sudo systemctl disable jenkins

4 启动

systemctl start jenkins

5 如果在上一步启动成功了,可忽略此步。

如果配置无误,启动还是报错,可以换个启动方法(本人就是这样启动成功的)

先关闭Jenkins,即使启动失败,也不代表是关闭的:

systemctl stop jenkins

注:如关闭不成功就重启Liunx,确认已经关闭了jenkins

进入目录:

cd /etc/init.d/

启动:

./jenkins start

关闭命令是:./jenkins stop

6 web访问,根据界面提示获取密码
cat /var/lib/jenkins/secrets/initialAdminPassword

7 安装社区推荐的插件

8 等待安装完成,进入Jenkins主页

七、配置Jenkins

1 下载maven:https://maven.apache.org/download.cgi 下载 apache-maven-3.8.6-bin.tar.gz

2 放到 /home/local 目录下,并进行解压

tar xzvf apache-maven-3.8.6-bin.tar.gz

3 修改配置源:

4 修改环境变量(追加以下内容):vim /etc/profile

export PATH=${PATH}:/home/local/apache-maven-3.8.6/bin

5 重载环境变量

source /etc/profile

6 Dashboard -> Manage Jenkins -> Global Tool Configuration

Maven 配置:将centos中maven目录拷贝进去

注解:在构建调用mvn报权限,执行命令:chmod a+x /目录/apache-maven-3.2.2/bin/mvn

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

JDK配置:将centos的JDK目录拷贝进去,可以通过命令:cat /etc/profile 查看java的目录

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

Git配置:

先在centos安装git:

yum install git -y

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

Maven配置:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

保存,其他插件配置忽略。

八、安装插件:Git Parameter

1.Dashboard -> Manage Jenkins -> 插件管理 处输入Git Parameter进行安装,安装完成重启Jenkins

该插件用于在Jenkins拉取gitlab代码时,可以选择拉取不同分支的代码

九、配置一个自动部署的项目

1.新建一个item,输入项目名称,选择中pipeline(流水线,如果没有该选项,就去安装该插件,并重启),点击确定保存

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

2 配置《丢弃旧构建》策略:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

3 配置项目参数:新增 String Parameter,用于在构建项目时,可输入一个字符参数Tag,在写pipeline script时,可以通过${Tag}来引用

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

4 再新添一个项目参数:Git Parameter(刚刚安装Git Parameter插件才有该选项),用于在构建时可选择不同的分支拉取代码进行构建,在写pipeline脚本时通过 ${branch} 引用该值。

注意:分支过滤:. 是默认值,故${branch}=origin/main ,我改成了:origin./(.*) ${branch}=main,在pipeline脚本里取值 ${branch}拉取代码就不会报错了。其他配置默认值

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

5 编写pipeline脚本:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

拉取gitlab代码的脚本,可以通过点击《流水线语法》进行自动生产:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

无Credentials,点击添加:输入gitlab用户名和密码,点击保存即可

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

然后选中该凭证,点击生成流水线脚本,把脚本拷贝到pipeline脚本里:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

例如:

groovy;gutter:true; node {     stage('Preparation') {       checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ecf3bed1-f362-4884-b285-fb42ab2d9816', url: 'http://192.168.42.227:8090/root/springboot.git']]])       echo '拉取代码成功'     }   }</p> <pre><code> 然后,将springboot项目用maven进行打包成jar(跳过了测试),脚本如下: ;gutter:true;
node {
    stage(‘Preparation’) {
      checkout([$class: ‘GitSCM’, branches: [[name: ‘*/${branch}’]], extensions: [], userRemoteConfigs: [[credentialsId: ‘ecf3bed1-f362-4884-b285-fb42ab2d9816’, url: ‘http://192.168.42.227:8090/root/springboot.git’]]])
      echo ‘拉取代码成功’
    }
    stage (‘maven build’){
      sh ”’ /home/local/apache-maven-3.8.6/bin/mvn clean package -DskipTests ”’
      echo ‘构建成功’
    }
  }

最后将jar打包成镜像,并上传到harbor私服的脚本:点击流水线语法,自动生成harbor凭证脚本:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

输入如下图,点击《添加》

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

输入账号密码,点击添加:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

点击生成流水线脚本,拷贝脚本:

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

然后在 //some block 写自己的脚本,例如:

groovy;gutter:true; node {</p> <p>stage('Preparation') {         checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ecf3bed1-f362-4884-b285-fb42ab2d9816', url: 'http://192.168.42.227:8090/root/springboot.git']]])         echo '拉取代码成功'       }       stage ('maven build'){         sh ''' /home/local/apache-maven-3.8.6/bin/mvn clean package -DskipTests '''         echo '构建成功'       }</p> <p>stage ('docker build'){         withCredentials([usernamePassword(credentialsId: '1a5a43b8-4c27-47f6-95ef-af578568aa3e', passwordVariable: 'password', usernameVariable: 'username')]) {           sh '''           REPOSITORY=192.168.42.227:8080/test_public/image_test:${Tag}           docker build -f Dockerfile -t $REPOSITORY .           docker login -u ${username} -p ${password} http://192.168.42.227:8080           docker push $REPOSITORY           docker images | grep 'image_test'| awk '{print $3}'|xargs docker rmi           '''         }         echo '镜像上传成功'       }      }</p> <pre><code> 说明: ;gutter:true;
批量删除REPOSITORY包含"image_test"的镜像

groovy;gutter:true;
docker images | grep 'image_test'| awk '{print $3}'|xargs docker rmi

十、部署项目

1 首次构建的时候,可能不会显示分支branch,是空的,首次构建拉取代码成功了,就可以显示branch了,前提要保证:branch即使是空的,默认值是存在的分支,在git的流水线自动生成pipeline脚本时,配置好默认的分支

Jenkins+gitlab+docker+harbor容器化自动部署详细流程

结束,谢谢!

Original: https://www.cnblogs.com/incognitor/p/16603106.html
Author: 無名之徒
Title: Jenkins+gitlab+docker+harbor容器化自动部署详细流程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620556/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux–>定时任务调度

    指定系统在某个时间执行特点的命令或程序。 任务调度分类: crontab 选项 常用选项 选项 说明 -e 编辑crontab定时任务 -l 查询crontab任务 -r 删除当前…

    数据库 2023年6月14日
    054
  • mybatis order by concat用法

    由于项目中用到了一个关联查询,关联的表中都有id字段,在排序时,使用${id},获取值时,一直报 Column ‘id’ in order clause i…

    数据库 2023年6月11日
    070
  • 01-MySQL连接查询、聚合函数

    1、连接查询 1.1、左连接 以左表为基准进行查询,左表数据回全部显示出来 右表中如果匹配连接条件的数据则显示相应字段的数据,如果不匹配,则显示为NULL 1.2、右连接 以右表为…

    数据库 2023年6月16日
    095
  • 【java框架】SpringBoot(10) — SpringBoot巧用 @Async提升API接口并发能力

    1.背景 异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是”异步调用”? “异步调用”对应的是”同步调用&…

    数据库 2023年6月6日
    094
  • 在线安装Docker

    安装 yum-utils 包yum install -y yum-utils 设置存储库# 官方地址(比较慢) yum-config-manager \ –add-repo \ …

    数据库 2023年6月14日
    076
  • MySQL45讲之IO性能提升

    本文介绍 MySQL 的 binlog 和 redo log 写入机制和刷盘策略,以及如何提升 MySQL 的 IO 性能。 binlog 的写入机制 binlog 的写入流程是:…

    数据库 2023年5月24日
    070
  • go的调度

    操作系统根据资源访问权限的不同,体系架构可以分为用户空间和内核空间;内核空间主要操作访问CPU资源,IO资源,内存资源等硬件资源,为应用程序提供最基本的基础资源;用户空间是上层应用…

    数据库 2023年6月9日
    075
  • Netty-NIO基础

    一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就…

    数据库 2023年6月16日
    070
  • JavaScript进阶内容——jQuery

    JavaScript进阶内容——jQuery 我们在前面的文章中已经掌握了JavaScript的全部内容,现在让我们了解一下JavaScript库 这篇文章主要是为了为大家大致讲解…

    数据库 2023年6月14日
    093
  • MySQL select语句中where条件的提取过程

    select语句中where条件的提取过程 孔个个依然,在整理where条件提取过程时,发现中文互联网上关于这一块的知识要么是存在错误自相矛盾的,要么是版本过老,遂自己整理了一版。…

    数据库 2023年6月16日
    088
  • 实验:非GTID 一主多从变级联架构

    个个原创文章 欢迎讨论https://www.cnblogs.com/konggg/欢迎转载收藏,转载请注明来源,谢谢支持! Original: https://www.cnblo…

    数据库 2023年6月16日
    0102
  • Shell 第二章《流控》

    前言 无论什么编程语言都离不开条件判断(流控)。SHELL也不例外。例如,用户输入的密码不够长时提示用户,你太短了例如,用户输入了备份的目录,如果有目录继续备份,如果没有目录创建目…

    数据库 2023年6月14日
    084
  • 谁再说学不会 MySQL 数据库,就把这个给他扔过去!

    大家好,我是民工哥。 又是新的一年奋斗路的开启,相信有不少人农历新年之后,肯定会有所变动(跳槽加薪少不了)。所以,我把往期推送过的MySQL技术文章做了一个相关的整理,基础不好的可…

    数据库 2023年5月24日
    073
  • 「 MySQL高级篇 」MySQL索引原理,设计原则

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    080
  • NO.2 Windows桌面图标-间距参数调整

    遇到如下问题: 桌面图标自动排序后间隔过大,且如图二这种指向图标能看到图标之间的间隔虚框,此方法可调整虚框的水平和垂直距离,即调整图标之间的间距。 测试电脑: 华为 mateboo…

    数据库 2023年6月14日
    088
  • 【MySQL异常】ExecutorException: Error getting generated key or setting result to parameter object

    报错信息:Error getting generated key or setting result to parameter object. Cause: org.apache….

    数据库 2023年6月6日
    045
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球