Jenkins Harbor

news2024/10/4 23:30:17

Harbor 环境搭建

https://github.com/goharbor/harbor/releases/tag/v2.5.6

点击下载地址安装包

安装

解压安装包

[root@localhost ~]# tar -zxvf harbor-offline-installer-v2.5.6.tgz -C /usr/local/

修改harbor.yml配置
image.png

[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml
[root@localhost harbor]# vi harbor.yml
[root@localhost harbor]# ./install.sh 

[Step 0]: checking if docker is installed ...

Note: docker version: 23.0.3

[Step 1]: checking docker-compose is installed ...

Note: Docker Compose version v2.17.2

[Step 2]: loading Harbor images ...

登录

Harbor http://192.168.232.7 admin/Harbor12345

image.png

创建账户

在某些情况下,为了 Harbor仓库的安全性考虑,在流水线任务中直接配置用户的话,后面还要维护其权限,命名项目是公开的了,登录成功在构建步骤中推送时,提示没有权限,直接配置 admin 用户,又不太合适,这时,可以考虑使用 Harbor 自带的 机器人账号。
image.png

docker 添加harbor支持

修改daemon.json,支持Docker仓库,并重启Docker。

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jrabvn1q.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.232.7:80"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

发布镜像到Harbor

登录方式一、直接使用admin账户登录

docker login -u admin -p Harbor12345 http://192.168.232.7:80

登录方式二、机器人账户登录
官方文档 https://goharbor.io/docs/1.10/working-with-projects/project-configuration/create-robot-accounts/

[root@localhost ~]# docker login http://192.168.232.7:80
Username: robot$devops
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

博客文档 https://www.cnblogs.com/phpper/p/12899895.html
创建一个~/password.txt文件,将我们的机器人secret写到文件中,然后执行如下命令

cat ~/password.tx | docker login --username 'robot$devops' --password-stdin http://92.168.232.7:80

用机器人账户登录harbor,登录后会生成一个~/.docker/config.json文件,有了这个文件后,后续就不用再次输入密码了。

登录成功修改镜像名称,然后推送镜像,发布镜像到Harbor名称要求:[harbor地址/项目名/镜像名:版本] (192.168.232.7:80/repository/mytest:v1.0.0)

[root@localhost ~]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED        SIZE
192.168.232.7:80/repository/mytest   v1.0.0    66bbba1a6aa6   11 hours ago   832MB
mytest                               v1.0.0    66bbba1a6aa6   11 hours ago   832MB
[root@localhost ~]# docker tag mytest:v1.0.0 192.168.232.7:80/repository/mytest:v1.0.0
[root@localhost ~]# docker push 192.168.232.7:80/repository/mytest:v1.0.0

从Harbor拉取镜像

先配置/etc/docker/daemon.json文件,然后重启docker,最后拉取镜像。

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jrabvn1q.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.232.7:80"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 拉取镜像
[root@localhost ~]# docker pull 192.168.232.7:80/repository/mytest:v1.0.0
v1.0.0: Pulling from repository/mytest

Jenkins打通Harbor

构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部默认是不带docker的,但是我们建议直接使用宿主机带的Docker即可。

设置宿主机docker.sock权限

sudo chown root:root /var/run/docker.sock
sudo chmod o+rw /var/run/docker.sock

查看结果

[root@localhost run]# ll | grep docker
drwx------.  8 root   root    180 4月   8 07:22 docker
-rw-r--r--.  1 root   root      5 4月   8 07:22 docker.pid
srw-rw-rw-.  1 root   root      0 4月   6 16:52 docker.sock
[root@localhost run]# 

添加Jenkins数据卷

修改/usr/local/docker/jenkins/docker-compose.yml文件,

version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins:2.346.3-2-lts-jdk11
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      # 将jenkins的工作目录映射到宿主机的data目录
      - ./data/:/var/jenkins_home/
      # 将宿主机的docker映射到jenkins容器
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/daemon.json:/etc/docker/daemon.json

然后重启容器:

cd /usr/local/docker/jenkins
docker-compose down
docker-compose up -d

Jenkins 配置

定义参数

image.png

image.png

image.png

image.png

拉取分支代码

image.png

# 配置参数
REMOTE_NAME="origin"    # 远程仓库名
BRANCH_NAME=$branch     # 拉取的分支名

BRANCH_NAME=${BRANCH_NAME#*/}

# 检查输入参数
if [ -z "$BRANCH_NAME" ]; then
  echo "Please provide the branch name as the first argument."
  exit 1
fi

# 判断本地分支是否存在
if git show-ref --verify --quiet "refs/heads/$BRANCH_NAME"; then
  echo "Local branch $BRANCH_NAME exists."
  git checkout $BRANCH_NAME
  git config pull.rebase false
  git pull $REMOTE_NAME $BRANCH_NAME
else
  echo "Local branch $BRANCH_NAME does not exist."
  git fetch $REMOTE_NAME $BRANCH_NAME
  git checkout -b $BRANCH_NAME $REMOTE_NAME/$BRANCH_NAME
fi

# 执行完毕
echo "The latest code has been successfully pulled from the remote branch."
exit 0

maven 打包

image.png

构建docker镜像并上传

image.png

mv **/target/*.jar docker/app.jar
echo "build Image start"
docker build -t $JOB_BASE_NAME:$tag docker/
echo "build Image success"
password=ucTv2l1XeBdgO9tkseoyWVLh47sRN9Py
echo "$password" | docker login $harbor_url --username 'robot$devops' --password-stdin
docker tag $JOB_BASE_NAME:$tag $harbor_url/$harbor_object/$JOB_BASE_NAME:$tag
echo "push Image start"
docker push $harbor_url/$harbor_object/$JOB_BASE_NAME:$tag
echo "push Image success"

远程服务器拉取镜像并运行

image.png

harbor_url=$harbor_url
port=$port
tag=$tag
project_name=$JOB_BASE_NAME
imageName=$harbor_url/$harbor_object/$JOB_BASE_NAME:$tag

containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
    docker stop $containerId
    docker rm $containerId
    echo "Delete Container Success $containerId"
fi

imageId=`docker images | grep ${project_name} | awk '{print $3}'`

if [ "$imageId" != "" ] ; then
    docker rmi -f $imageId
    echo "Delete Image Success $imageId"
fi

password=ucTv2l1XeBdgO9tkseoyWVLh47sRN9Py
echo "$password" | docker login 192.168.232.7:80 --username 'robot$devops' --password-stdin

docker pull $imageName
docker run -d -p $port --name $project_name $imageName
echo "Start Container Success"
echo $project_name

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware vSphere中三种磁盘模式:精简置备/厚置备置零/厚置备延迟置零

在VMware vSphere中&#xff0c;不管是以前的5.1版本&#xff0c;或者是现在的6.5版本&#xff0c;创建虚拟机时&#xff0c;在创建磁盘时&#xff0c;都会让选择磁盘的置备类型&#xff0c;如下图所示&#xff0c;分为&#xff1a; Thick ProvisionedLazy Zeroed(厚置备延迟置…

从0开始使用flask搭建WEB前端可视化界面

目录1.download一个模板2.配置flask python文件3.移动模板中文件的相对位置4.修改html中的原路径5.运行与调试1.download一个模板 模板 将其中的html结尾的文件放入template文件夹&#xff0c;其余的放入static文件夹&#xff0c;再创建一个python文件使用flask&#xff0c;…

亚马逊云科技从成本规划,开启云财务管理之旅

亚马逊云科技的云财务管理旨在帮助企业建立一个成功的CFM战略&#xff1a;通过4个云财务管理CFM原则或步骤作为路线图&#xff1a;SEE-查看、SAVE-保存、PLAN-计划和RUN-运行。 对现有工作负载的预测和规划 1、 优化计算资源与架构&#xff1a;与技术业务相关部门合作&#xff…

AI数字人在VR全景中的应用有哪些?有哪些优势?

“十年生死两茫茫&#xff0c;不思量&#xff0c;自难忘”。以往我们对于逝者的怀念只限于看着老照片落泪&#xff0c;现如今&#xff0c;各种科技的发展让我们的思念有了新的承载之地。AI数字人的出现&#xff0c;可以为用户提供更加智能、有趣的社交体验&#xff0c;通过唇形…

为什么要写博客?现身说法

我为什么不想写博客&#xff1f; 大四学生现身说法&#xff0c;其实早在大二&#xff0c;听各种大牛说写博客的重要性&#xff0c;真的也很想开始动手&#xff0c;但两个很现实的顾虑摆在眼前&#xff1a; 啥都不会&#xff0c;写啥啊&#xff1f;大牛是因为有新东西可写&…

Linux学习[6]文件权限深入1

文章目录前言1. 文件的各个字段含义2. 修改文件权限3. 有点意思的东西总结前言 前六个博客是基于树莓派的linux教程书籍写的&#xff0c;因为之前的书籍是以树莓派为基准&#xff0c;所以在linux上没有很详细。这个博客开始记录的是我看书过程中遇到的有意思的&#xff0c;没见…

提取文本关键词?很 easy 啊,用 Python 三行搞定

从大量文本中提取有用的关键信息是数据分析的一个重要环节。 Python 作为一门广泛应用于数据分析领域的编程语言&#xff0c;有着强大的文本处理库。 整理了几个用于文本关键词提取的优秀工具&#xff0c;一起学习下。 1、jieba库 jieba 是一个中文分词库&#xff0c;可以将…

SpringMVC学习1

一、SpringMVC的概述 SpringMVC是由Spring官方提供的基于MVC设计理念的Web框架MVC是模型、视图、控制器的简写&#xff0c;是软件的一种设计规范MVC将业务逻辑、数据&#xff0c;显示分离的方式来组织代码MVC降低了视图和业务逻辑之间的双向耦合MVC是一种架构模式模型&#xff…

SpringBoot整合接口管理工具Swagger

Swagger Swagger简介 Springboot整合swagger Swagger 常用注解 一、Swagger简介 ​ Swagger 是一系列 RESTful API 的工具&#xff0c;通过 Swagger 可以获得项目的⼀种交互式文档&#xff0c;客户端 SDK 的自动生成等功能。 ​ Swagger 的目标是为 REST APIs 定义一个标…

初识CSRF

概述跨站请求伪造&#xff08;Cross-site request forgery&#xff09;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。CSRF并不是攻击网站服务器&#xff0c;而是冒充用户在站内的正常操作在CSRF的攻击场景中攻…

会话技术.

Cookie 在服务器中写一个Cookie键值对&#xff0c;然后把它扔进响应值中&#xff0c;于是在浏览器访问当前web项目时会得到响应值&#xff0c;并且把这个响应值中的Cookie数据存在浏览器中&#xff0c;下次&#xff0c;在服务器中就可以先获得刚才的Cookie数据&#xff0c;然后…

第六章_Redis管道

是什么 解决思路&#xff08;引出管道这个概念&#xff09; 管道(pipeline)可以一次性发送多条命令给服务端&#xff0c;服务端依次处理完完毕后&#xff0c;通过一条响应一次性将结果返回&#xff0c;通过减少客户端与redis的通信次数来实现降低往返延时时间。pipeline实现的…

【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴

大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题&#xff0c;现在我们就来解决这样的问题&#xff0c;方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”&#xff0c;然后打开“设置”&#xff1b; 也可以在VirtualBox界面打开“设…

建议企业采购团队学习的采购策略

随着全球市场的不断发展和竞争的日益激烈&#xff0c;企业采购团队必须制定出更加科学、合理的采购策略来适应市场的各种变化。合理的采购策略不仅可以保证企业的采购成本最优化&#xff0c;还可以提高采购效率和质量。因此&#xff0c;建议企业采购团队学会以下几种采购策略&a…

一文搞懂Plant Simulation中的Rotation设置

在处理3D动画或者展示时,常常需要在Plant Simulation调整数模的姿态,静态设置或动态设置Rotation是一个很重要的手段。 编辑3D属性,在Transformation选项卡中,我们可以看到Rotation的设置参数,如上图所示,只有一个角度和3个轴参数。如果对计算机图形学不了解的同学,估计…

【外设零基础通用教程】GPIO 下

【外设零基础通用教程】GPIO 下使用方法GPIO 值输入读取值输出设置值GPIO输入输出应用GPIO输入应用GPIO输出应用文档使用理论补充输出方式推挽输出开漏输出上篇连接&#xff1a;【外设零基础通用教程】GPIO 上&#xff0c;主要是在做视频的时候&#xff0c;发现上篇理论很多&am…

[composer-unused]扫描代码找出没有使用的依赖

composer-unused是一个使用PHP开发的命令行工具&#xff0c;就像composer一样&#xff0c;只不过它的作用是扫描出代码中&#xff0c;加载了依赖但没有实际使用的库。 使用分析 像我之前做过的一个项目&#xff0c;扫描结果如下图&#xff1a; 其中可以发现在composer.json中…

【网络】网络层协议——IP

目录网络层IP协议IP基础知识IP地址IP报头格式网段划分CIDR特殊的IP地址IP地址的数量限制私有IP地址和公有IP地址路由IP总结网络层 在复杂的网络环境中确定一个合法的路径。 IP协议 IP协议作为整个TCP/IP中至关重要的协议&#xff0c;主要负责将数据包发送给最终的目标计算机…

对USB协议的通俗理解

目录简介背景特点版本USB数据流模型总线拓扑结构USB通信流端点管道电气标准USB接口类型USB Type-AUSB Type-BUSB Type-CPIN脚定义4PIN9PIN5PIN24PIN16PIN6PINUSB数据传输相关概念通讯方式通讯方向同步方式帧和微帧USB数据格式域包令牌包数据包握手包特殊包事务IN事务OUT事务SET…

BM37-二叉搜索树的最近公共祖先

题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q&#xff0c;最近公共祖先LCA(T,p,q)表示一个节点x&#xff0c;满足x是p和q的祖先且x的深度尽可能大。在这里&#xff0c;一个节点也可以是它自己…