草庐IT

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

無名之徒 2023-04-19 原文

环境: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 修改配置源:

    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

  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

    

 

  

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

    

 

 

     Git配置:

      先在centos安装git:

        yum install git -y

      

 

 

 

      Maven配置:

      

 

 

 

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

 

 八、安装插件:Git Parameter

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

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

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

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

  

 

 

 

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

  

 

 

   

 

 

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

  

  

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

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

  

 

 

  5 编写pipeline脚本:

  

 

 

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

  

 

 

     

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

    

 

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

    

 

   例如:    

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 '拉取代码成功'
    }
  }

  

 然后,将springboot项目用maven进行打包成jar(跳过了测试),脚本如下:

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凭证脚本:

  

 

   

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

  

 

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

    

 

 

   

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

  

 

 

   

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

 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 '构建成功'
      }

      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 '镜像上传成功'
      }
     }

 

说明:

批量删除REPOSITORY包含”image_test“的镜像
docker images | grep 'image_test'| awk '{print $3}'|xargs docker rmi

十、部署项目

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

 

结束,谢谢!

 

有关Jenkins+gitlab+docker+harbor容器化自动部署详细流程的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  4. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  5. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  8. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  9. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  10. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

随机推荐