区别;1、wharf harbor2、inhabitant dweller3、path trail

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区别;1、wharf harbor2、inhabitant dweller3、path trail相关的知识,希望对你有一定的参考价值。

    wharf harbor 仅是同类词的两个基本的,还有很多, 如下面所列.

简单的,你可以理解为:harbor为里可以有很多wharf.


    wharf 码头

    dock码头

    pier码头

    jetty码头

    port港口

    harbor海港

    quay码头

    quayside码头周围

    dockside码头前沿

    waterfront水边地

    landing stage浮动码头

    landing着陆

    moor荒野

    berth停泊处

    The ship steamed into theharbor. 

    船驶入了港湾。

    Theharboris being up with silt. 

    那海港被淤泥阻塞了。

    The pilot steered for theharbor. 

    领航员掌舵驶向港囗。

    It is not right to harbor vindictive feelings. 

    怀有报复的念头是不对的。

    The ship was allowed to unload cargo on thewharf. 

    那艘船被允许在码头上卸货。

    We walked her to thewharfand put her aboard the ship.

    我们陪她走到码头,将她安顿到船上。

    The mob riotously assembled at the ferrywharf.

    暴徒在渡口骚乱地纠集在一起。

    One who owns or manages awharf.

    码头老板拥有或管理码头者

    The ship lies alongside thewharf.

    那艘船停靠在码头边。




inhabitant dweller区别:

    表达大地方,如星球, 国家的居民时用inhabitant;

    表达小地方,如区, 山脚,某些天然洞穴或独特建筑的居民时用dweller;

    有时他们可以混用;


    A native orinhabitantof Bavaria. 

    巴伐利亚人巴伐利亚本土人或居民

    A native orinhabitantof Europe.

    欧洲人出生于欧洲的人,欧洲居民

    A native orinhabitantof Geneva, Switzerland.

    日内瓦人瑞士日内瓦的本地人或居民

    A native orinhabitantof Greece.

    希腊人土生土长的希腊人和希腊的居住者

    A native orinhabitantof Ethiopia. 

    埃塞俄比亚人埃塞俄比亚的土著和居民

    A native orinhabitantof Haiti. 

    海地人海地土著居民或本地居民

    A native orinhabitantof Latvia. 

    拉脱维亚人拉脱维亚土著人或拉脱维亚居民

    Dwellers here live a happy life now.
    现在这里居民的生活很幸福。

    The traffic noise is a constant irritation to citydwellers.
    车辆的噪音对城市居民是永无止境的骚扰。

    Thedwelleris the only architect.
    居住者才是唯一的建筑师。

    There exist a lot of cavedwellersin this area.
    在这个地方有很多穴居者。


path trail区别:

    path=通道;

    trail=踪迹;


    They cleaved apaththrough the wilderness. 

    他们在荒原中开辟出一条路。

    She squelched along the muddypath. 

    她沿着泥泞小径格吱格吱地走。

    He was destined to plod thepathof toil. 

    他注定要在艰辛的道路上跋涉。

    Thepathleads to a hill bare of vegetation. 

    这条小道通向一座没有草木的小山。

    Thepathof civilization is paved with tin cans. 

    文明的大道,是铺满了空罐头。

    Every day he trod the samepathto school. 

    他每天都走同一条路上学。

    The boy hops the ditch and run down thepath. 

    那男孩跳过沟,沿著小路奔去。

    The mountainpathis narrow and rugged. 

    狭隘的山路崎岖不平。

    A bullet describes a curvedpathin the air. 

    子弹在空中作曲线运动。

    Thepathled through the trees to the river. 

    那条小路穿过树林通向河边。

    The dogs found thetrailof the rabbit. 

    猎狗发现了兔子的踪迹。

    The hounds found thetrailof the fox.

    猎犬发现了狐狸的踪迹。

    They were chosen to scout thetrail.

    他们被选去探路。

    They made atrailof protests against the decision.

    他们对该项决定提出了一连串抗议。

    A ski trail densely packed with snow. 

    滑雪道积着一层厚厚的雪的滑雪道

    At break of day the hikers were already on thetrail. 

    黎明时分,那些徒步旅行者已经上路。

    Left a trail of broken promises. 

    留下一串无用的诺言

    The lawyer is on thetrailof new proof in the case. 

    律师正在寻找关于案件的新证据。

    The sheriff ordered the suspicious looking stranger to hit thetrail. 

    警察局长命令样子可疑的陌生人马上走。

参考技术A 1.harbor是港口,天然的或者是人工挖的,内部开阔,口窄小,这样里面的船可以躲开海浪。

wharf是用来在港口里或者河岸上固定平台,让船停靠的。

2.感觉区别不大,字典中解释也基本相同,都可以指居住在某地的人或者是动物。查了下外国人的讨论,也是这样的。参考:http://www.englishforums.com/English/TenantResidentCitizenInhabitant-Dweller/cjpqh/post.htm
http://forum.wordreference.com/showthread.php?t=1599299

3.区别也不大,一般情况下可以混用。
不过在某些特殊情况下,各有自己的含义,比如在一些法律文件中:
https://www.revisor.mn.gov/statutes/?id=169.011

Subd. 6.Bicycle path.
"Bicycle path" means a bicycle facility designed for exclusive or preferential use by persons using bicycles and constructed or developed separately from the roadway or shoulder.
专门用来使用自行车的路,叫做path
Subd. 7.Bicycle route.
The term "bicycle route" means a roadway or shoulder signed to encourage bicycle use.
有标志支持自行车使用的,叫做route
Subd. 8.Bicycle trail.
"Bicycle trail" means a bicycle route or bicycle path developed by the commissioner of natural resources under section 85.016.
由commissioner of natural resources依照 section 85.016建造的route和path,叫做trail

所以我认为,这些细微的区分只有对相关专业人士才有区别,平时使用的时候可以进行同义替换。

CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

CI/CD是什么?

  • CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法
  • CI/CD 的核心概念是持续集成持续交付持续部署
  • 作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)

持续集成(CI)/持续交付(CD)的优势

  • 持续集成/持续交付是现代软件开发周期的基础
  • 在传统的软件开发方法中,每个功能更新或修复错误都会每隔一段时间进行发布,这显著增加了在部署时耦合更改的机会
  • 持续集成/持续交付可以解决所有这些问题,并使整个过程更易于管理高效
  • 在现代软件开发实践中,持续集成(CI)/持续交付(CD)是构建测试应用程序并将其部署到生产中的基础
  • 持续交付(CD)有助于降低风险,并通过自动化来自不同项目开发人员的多个代码更改来实现生产一致性
  • 另一方面,持续交付使开发人员能够无缝地将集成代码交付到生产中,从而提供快速有效的自动化流程,以向客户轻松发布新功能和更新
  • 持续集成/持续交付管道的优势
    • 管理较小的代码更改
    • 故障隔离可在短期内防止错误
    • 缩短平均解决时间(MTTR)
    • 提高测试可靠性
    • 加快释放速度
    • 减少积压
    • 推动客户实现
    • 加强团队的透明沟通和责任感
    • 降低成本
    • 易于维护和更新
  • 结论
    • 部署CI / CD流程后,您可能会在开发人员工作流程中实现更平滑的过渡
    • 关键是,测试质量首先需要在工作流程中引起很多注意,这使您成为其他人可以效仿的灯塔
    • 无论您的产品交付有多快和连续,没有质量意识都没有关系
    • 当CI / CD管道的更多步骤可以自动化时,质量也意味着更快的质量发布

自动化部署流程图

在这里插入图片描述


  • 首先,开发人员每天进行代码提交,提交到Git仓库
  • 然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK, Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程
  • 最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问 应用

Git Github Gitlab的区别

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • 是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
  • Github是在线的基于Git的代码托管服务。GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。Gitlab解决这个问题,可以在上面创建免费的私人repo。

前言:一些自己想说的话

  • 关于实验的开头,本意想使用Docker部署Jenkins,但是在调试MavenJDK的时候一直报错
  • 从7月8号到7月9号的凌晨4点,一直报错,各种解决方案已经被我翻烂了…各种问题接踵而至…
  • 于是带着懵逼询问了专业人士,朋友让我使用传统的方式,好家伙,话不多说上操作
    在这里插入图片描述
  • Docker部署的流程就放这把,可以直接跳过,只是作为一个笔记!
    在这里插入图片描述
#下载Jenkins镜像
[root@jenkins ~]# docker pull jenkins/jenkins:lts-jdk11

#创建Jenkins挂载路径
[root@jenkins ~]# mkdir -p /docker/jenkins

#对此目录开放权限,否则容器启动时会报错
[root@jenkins ~]# chmod 777 /docker/jenkins/

#启动容器
[root@jenkins ~]# docker run -itd -p 8080:8080 -p 50000:50000 --restart always -v /docker/jenkins:/var/jenkins_home --name jenkins jenkins/jenkins:lts-jdk11

在这里插入图片描述


#通过文件形式查看解锁密码
[root@jenkins ~]# cat /docker/jenkins/secrets/initialAdminPassword 
8bf67325c495443a869b249d1f4bb853

#通过日志形式查看解锁密码
[root@jenkins ~]# docker logs -f jenkins
8bf67325c495443a869b249d1f4bb853

部署Docker+Jenkins+Git+Harbor流水线自动化CI/CD

CentOS Linux release 7.5.1804 (Core)
  • 主机规划
主机IP地址
Git-server192.168.100.20
Harbor192.168.100.30
Jenkins192.168.100.40

安装部署Git

#安装Git
[root@git-server ~]# yum -y install git
[root@git-server ~]# git --version
git version 1.8.3.1

#创建用户并配置密码
[root@git-server ~]# useradd git
[root@git-server ~]# passwd git

#进入Git用户
[root@git-server ~]# su - git

#创建git仓库目录
[git@git-server ~]$ mkdir /home/git/demo.git
[git@git-server ~]$ cd /home/git/demo.git/

#初始化git仓库
[git@git-server demo.git]$ git --bare init

#查看初始化后的仓库
[git@git-server demo.git]$ ls
branches  config  description  HEAD  hooks  info  objects  refs

安装Harbor

#下载harbor安装包
[root@harbor ~]# wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1.tgz
[root@harbor ~]# tar xf harbor-offline-installer-v1.9.1.tgz -C /usr/src/

#启动Docker并开机自启
[root@harbor ~]# systemctl start docker && systemctl enable docker
#当前已经安装Docker
[root@harbor ~]# docker --version
Docker version 20.10.7, build f0df350

#安装Docker-compose
#由于官方镜像是国外的太慢,使用国内镜像下载
[root@git ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#为compose授权
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
[root@harbor ~]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

#安装并运行harbor
[root@harbor ~]# cd /usr/src/harbor/

#编辑配置文件
[root@harbor harbor]# vim harbor.yml

#主机修改为本机IP地址
hostname: 192.168.100.30

#检测并创建harbor需要文件
[root@harbor harbor]# ./prepare

#安装harbor
[root@harbor harbor]# ./install.sh
Now you should be able to visit the admin portal at http://192.168.100.30

#添加http仓库信任,默认不信任镜像仓库
[root@harbor ~]# vim /etc/docker/daemon.json
{"insecure-registries":["192.168.100.30"]}
[root@harbor ~]# systemctl restart docker

在这里插入图片描述


  • 新建项目
    在这里插入图片描述

  • 查看推送镜像要求
    在这里插入图片描述

#下载官方Tomcat镜像
[root@harbor ~]# docker pull tomcat

#根据网站提示为Tomcat镜像打标签
[root@harbor ~]# docker tag tomcat:latest 192.168.100.30/pakho/tomcat:v1

#登陆Harbor镜像仓库
[root@harbor ~]# docker login 192.168.100.30 -uadmin -pHarbor12345

#上传镜像
[root@harbor ~]# docker push 192.168.100.30/pakho/tomcat:v1

在这里插入图片描述


  • 刷新网页查看
    • 镜像存在,说明上传镜像成功!
      在这里插入图片描述

安装Jenkins

  • 测试能否正常拉取代码
#安装Git测试是否能够拉取代码
[root@jenkins ~]# yum -y install git

#拉取Java项目
[root@jenkins ~]# git clone https://github.com/407777853/java-demo

#修改项目默认仓库路径
[root@jenkins ~]# cd java-demo/
[root@jenkins java-demo]# vim .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@192.168.100.20:/home/git/demo.git      #指明本地镜像仓库
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

#添加本地版本仓库
[root@jenkins java-demo]# git add .

#声明上传作者及邮箱
[root@jenkins java-demo]# git config --global user.email "1064981253@qq.com"
[root@jenkins java-demo]# git config --global user.name "pakho"

#提交代码到本地仓库,-m 一般为开发人员本次修改的BUG注释
[root@jenkins java-demo]# git commit -m "java"

#上传代码至远程Git仓库,并为本项目主分支
[root@jenkins java-demo]# git push origin master

#创建秘钥对
[root@jenkins ~]# ssh-keygen
[root@jenkins ~]# ssh-copy-id git@192.168.100.20

#执行拉取免密测试
[root@jenkins ~]# mkdir test
[root@jenkins ~]# cd test/
[root@jenkins test]# git clone git@192.168.100.20:/home/git/demo.git
Cloning into 'demo'...
remote: Counting objects: 183, done.
remote: Compressing objects: 100% (165/165), done.
remote: Total 183 (delta 7), reused 173 (delta 4)
Receiving objects: 100% (183/183), 1.12 MiB | 0 bytes/s, done.
Resolving deltas: 100% (7/7), done.
[root@jenkins ~]# docker --version
Docker version 20.10.7, build f0df350

#安装Java
[root@jenkins ~]# tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/

#将JDK改名为Java
[root@jenkins local]# mv jdk1.8.0_291/ jdk

#添加环境变量
[root@jenkins ~]# vim /etc/bashrc
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin

#刷新配置文件
[root@jenkins ~]# source /etc/bashrc

#验证是否安装成功
[root@jenkins ~]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

#安装Maven
[root@jenkins ~]# yum install -y maven

#官网下载Jenkins最新安装包
[root@jenkins ~]# wget https://get.jenkins.io/war-stable/2.289.2/jenkins.war

#前台运行Jenkins,如果希望后台运行可以安装Tomcat或其他操作
[root@jenkins ~]# java -jar jenkins.war
#运行中会产生默认Jenkins密码
31cce3f846b54efa8d9f150a468cbc92

#通过文件夹查看密码
[root@jenkins ~]# cat /root/.jenkins/secrets/initialAdminPassword
31cce3f846b54efa8d9f150a468cbc92

#Jenkins添加信任Harbor仓库
[root@jenkins ~]# vim /etc/docker/daemon.json
{"insecure-registries":["192.168.100.30"]
[root@jenkins ~]# systemctl restart docker

#浏览器访问
http://192.168.100.40:8080

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


  • 登录进入以后,将默认Jenkins下载源替换为国内源
#Jenkins.war路径下有个隐藏文件
[root@jenkins ~]# ls -a
.jenkins
[root@jenkins ~]# cd .jenkins/updates/
[root@jenkins updates]# sed -i 's/http:\\/\\/updates.jenkinsci.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

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

#提交后浏览器输入重启Jenkins
http://192.168.100.40:8080/restart

  • 安装插件
    • PS:由于实验做了无数遍,可能清除环境不是很彻底,有些默认的插件没有清理干净
    • 需要下载安装GitPipeline插件,我这里以为安装了DockerJenkins上需要安装Docker版本的,可以忽略!
      在这里插入图片描述

  • 创建凭据

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


#查看Jenkins主机私钥
[root@jenkins ~]# cat .ssh/id_rsa

在这里插入图片描述


  • 生成凭据
    在这里插入图片描述

  • 新建项目
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


  • 添加流水线脚本

在这里插入图片描述


node { 
   // 拉取代码
   stage('Git Checkout') { 
       checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '70ddbc0b-8fb4-4a17-8d70-5bb3a720da7d', url: 'git@192.168.100.20:/home/git/demo.git']]])
   }
   // 代码编译
   stage('Maven Build') {
        sh '''
        /usr/bin/mvn clean package -Dmaven.test.skip=true
        '''
   }
   // 项目打包到镜像并推送到镜像仓库
   stage('Build and Push Image') {
        sh '''
        REPOSITORY=192.168.100.30/pakho/tomcat-java-demo:${Branch}
        echo ' 
        FROM 192.168.100.30/pakho/tomcat:v1
        MAINTAINER pakho<1064981253@qq.com>
        RUN rm -rf /usr/local/tomcat/webapps/*
        ADD target/*.war /usr/local/tomcat/webapps/ROOT.war 
        ' > Dockerfile
        docker build -t  $REPOSITORY .
        docker login 192.168.100.30 -u admin -p Harbor12345
        docker push $REPOSITORY
        '''
   }
   // 部署到Docker主机
   stage('Deploy to Docker') {
        sh '''
        REPOSITORY=192.168.100.30/pakho/tomcat-java-demo:${Branch}
        docker rm -f java-demo |true
        docker image rm $REPOSITORY |true
        docker login 192.168.100.30 -u admin -p Harbor12345
        docker run -d --name java-demo -p 88:8080 $REPOSITORY
        '''
   }
}

在这里插入图片描述


  • 部署测试
    在这里插入图片描述
#同时Jenkins日志抓取到部署成功的日志信息
2021-07-09 15:06:37.699+0000 [id=199]	INFO	o.j.p.workflow.job.WorkflowRun#finish: JAVA #1 completed: SUCCESS

在这里插入图片描述


  • 模拟程序员修改代码后的再次构建
#基于刚才的测试路径
[root@jenkins demo]# pwd
/root/test/demo

#修改代码
[root@jenkins demo]# vim src/main/resources/templates/index.ftl
                  whatToType: "学生管理系统v2",

[root@jenkins demo]# git add .
[root@jenkins demo]# git config --global user.email "1064981253@qq.com"
[root@jenkins demo]# git config --global user.name "pakho"
[root@jenkins demo]# git commit -m "v2"
[master f0150ea] v2
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins demo]# git push origin master
Counting objects: 13, done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 553 bytes | 0 bytes/s, done.
Total 7 (delta 3), reused 0 (delta 0)
To git@192.168.100.20:/home/git/demo.git
   f0150ea..6663acd  master -> master

  • 执行二次构建

在这里插入图片描述


  • 至此,实验完成!
    在这里插入图片描述

  • 镜像仓库Harbor上也会有对应构建的镜像

在这里插入图片描述


关于实验的一些总结

  • 实验做了很久,失败了无数次,环境搭了无数次,关键在于脚本的编写
  • 网上有很多相似的实验,但是脚本拷贝过来修改了无数次,大都报错,对于脚本修改的地方,主要为Dockerfile文件
  • 之前采用cat <<EOF的形式,一直在部署Docker时报错,改为echo方式,成功执行!

以上是关于区别;1、wharf harbor2、inhabitant dweller3、path trail的主要内容,如果未能解决你的问题,请参考以下文章

Harbor2.2 用户角色权限速查

Harbor2.2 用户角色权限速查

劫持TLS绕过canary的ROP技巧

二分的几种简单应用——入门

Harbor安装配置(HTTPS)

docker harbor