持续集成交付CICD:GitLabCI上传Nexus制品

这篇具有很好参考价值的文章主要介绍了持续集成交付CICD:GitLabCI上传Nexus制品。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、实验

1.GitLabCI上传Nexus制品

2.优化GitLabCI(引用系统变量)

3.添加if条件判断项目类型

4.优化GitLabCI(模板类)

二、问题

1.GitLabCI获取jar文件失败

2. GitLabCI获取流水线项目命名空间失败

3.GItLab Package如何实现上传至本地仓库


一、实验

1.GitLabCI上传Nexus制品

(1)环境

表1 主机

主机 架构 版本 IP 备注
jenkins

jenkins主节点      

2.414.2 192.168.204.15:8080

 gitlab runner

(从节点)

gitlab

gitlab 主节点       

12.10.14 192.168.204.8:82

  jenkins slave

(从节点)

sonarqube 9.6 192.168.204.8:9000
tomcat nexus 3.63 192.168.204.13:8081

(2)进入共享库

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(3)修改流水线,提交到master

include:
 - project: 'devops03/devops03-gitlabci-lib'
   ref: master
   file: "/jobs/CI.yaml"




workflow:
  rules:
    #新建分支永远不执行
    - if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发
      when: always
    - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
      when: never
    # 其他情况永远执行
    - when: always

#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:
  GIT_CHECKOUT: "false"
  BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令
  TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令
  ARTIFACT_PATH: "target/*.jar"                                  ## 制品路径
  TEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告

stages:
  - build
  - test
  - sonarscan
  - pushartifact


pipelineInit:
  extends: 
    - .pipelineInit


cibuild:
 extends:
 - .cibuild


citest:
 extends:
 - .citest

sonarscan:
 extends:
 - .sonarscan

pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      pkgName=`ls target/ | grep -e "^maven.*jar$"`
      curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \
      -H "accept: application/json" \
      -H "Content-Type: multipart/form-data" \
      -F "raw.directory=/tmp" \
      -F "raw.asset1=@target/${pkgName};type=application/java-archive" \
      -F "raw.asset1.filename=${pkgName}" -u admin:Admin123



持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(4) maven项目开始运行流水线

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(5)运行

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(6)成功

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(7)查看日志

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(8)Nexus查看

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

2.优化GitLabCI(引用系统变量)

(1) 优化流水线,提交到master

include:
 - project: 'devops03/devops03-gitlabci-lib'
   ref: master
   file: "/jobs/CI.yaml"




workflow:
  rules:
    #新建分支永远不执行
    - if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发
      when: always
    - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
      when: never
    # 其他情况永远执行
    - when: always

#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:
  GIT_CHECKOUT: "false"
  BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令
  TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令
  ARTIFACT_PATH: "target/*.jar"                                  ## 制品路径
  TEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告

stages:
  - build
  - test
  - sonarscan
  - pushartifact


pipelineInit:
  extends: 
    - .pipelineInit


cibuild:
 extends:
 - .cibuild


citest:
 extends:
 - .citest

sonarscan:
 extends:
 - .sonarscan

pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      pkgName=`ls target/ | grep -e "^maven.*jar$"`
      cd target/
      mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
      curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \
      -H "accept: application/json" \
      -H "Content-Type: multipart/form-data" \
      -F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \
      -F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \
      -F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123



持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

 (2) maven项目开始运行流水线

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(3)运行

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(4) 成功

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(5)查看日志

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(6)Nexus查看

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

3.添加if条件判断项目类型

(1)修改流水线,提交到master

include:
 - project: 'devops03/devops03-gitlabci-lib'
   ref: master
   file: "/jobs/CI.yaml"




workflow:
  rules:
    #新建分支永远不执行
    - if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发
      when: always
    - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
      when: never
    # 其他情况永远执行
    - when: always

#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:
  GIT_CHECKOUT: "false"  ## 全局关闭作业代码下载
  PROJECT_TYPE: "java"   ## 定义项目类型
  BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令
  TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令
  ARTIFACT_PATH: "target/*.jar"                                  ## 制品路径
  TEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告

stages:
  - build
  - test
  - sonarscan
  - pushartifact


pipelineInit:
  extends: 
    - .pipelineInit


cibuild:
 extends:
 - .cibuild


citest:
 extends:
 - .citest

sonarscan:
 extends:
 - .sonarscan

pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      if [[ ${PROJECT_TYPE} == "java" ]];then
          pkgName=`ls target/ | grep -e "^maven.*jar$"`
          cd target/
          mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
          curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \
          -H "accept: application/json" \
          -H "Content-Type: multipart/form-data" \
          -F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \
          -F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \
          -F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

  (2) maven项目开始运行流水线

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(3)运行

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(4) 成功

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(5)查看日志

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(6)Nexus查看

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

4.优化GitLabCI(模板类)

(1)修改流水线与新增模板类,提交到master

CI.yaml

.pipelineInit:
  tags:
    - build
  stage: .pre
  variables:
    GIT_CHECKOUT: "true"
  script:
    - ls -l

.cibuild:
    tags:
      - build
    stage: build
    script:
      - echo "${BUILD_SHELL}"
      - ${BUILD_SHELL}
    artifacts:
      paths:
        - ${ARTIFACT_PATH}

.citest:
  tags:
    - build
  stage: test
  script:
    - echo "${TEST_SHELL}"
    - ${TEST_SHELL}
    # artifacts:
    # reports:
    #   - junit: ${TEST_REPORTS}

.sonarscan:
  tags: 
    - build
  stage: sonarscan
  script: 
    |-
      sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
        -Dsonar.projectKey=${CI_PROJECT_NAME}\
        -Dsonar.projectName=${CI_PROJECT_NAME} \
        -Dsonar.projectVersion=${CI_COMMIT_SHA} \
        -Dsonar.login=${SONAR_AUTH_TOKEN} \
        -Dsonar.ws.timeout=30 \
        -Dsonar.projectDescription=${CI_PROJECT_TITLE} \
        -Dsonar.links.homepage=${CI_PROJECT_URL} \
        -Dsonar.links.ci=${CI_PIPELINE_URL} \
        -Dsonar.sources=src \
        -Dsonar.sourceEncoding=UTF-8 \
        -Dsonar.java.binaries=target/classes \
        -Dsonar.java.test.binaries=target/test-classes \
        -Dsonar.java.surefire.report=target/surefire-reports \
        -Dsonar.core.codeCoveragePlugin=jacoco \
        -Dsonar.jacoco.reportPaths=target/jacoco.exec

.pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      if [[ ${PROJECT_TYPE} == "java" ]];then
          pkgName=`ls target/ | grep -e "^maven.*jar$"`
          cd target/
          mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
          curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \
          -H "accept: application/json" \
          -H "Content-Type: multipart/form-data" \
          -F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \
          -F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \
          -F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

gitlab-ci.yaml

​
include:
 - project: 'devops03/devops03-gitlabci-lib'
   ref: master
   file: "/jobs/CI.yaml"




workflow:
  rules:
    #新建分支永远不执行
    - if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发
      when: always
    - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
      when: never
    # 其他情况永远执行
    - when: always

#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:
  GIT_CHECKOUT: "false"  ## 全局关闭作业代码下载
  PROJECT_TYPE: "java"   ## 定义项目类型
  BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令
  TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令
  ARTIFACT_PATH: "target/*.jar"                                  ## 制品路径
  TEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告

stages:
  - build
  - test
  - sonarscan
  - pushartifact


pipelineInit:
  extends: 
    - .pipelineInit


cibuild:
 extends:
 - .cibuild


citest:
 extends:
 - .citest

sonarscan:
 extends:
 - .sonarscan

pushartifact:
 extends:
 - .pushartifact

​

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

  (2) maven项目开始运行流水线

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(3)运行

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(4) 成功

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(5)查看日志

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(6)Nexus查看

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

二、问题

1.GitLabCI获取jar文件失败

(1)报错

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(2)原因分析

正则表达式输入有误

(3)解决方法

修改正则表达式。

修改前:

pkgName=`ls target/ | grep -e "jar$"`

修改后:

pkgName=`ls target/ | grep -e "^maven.*jar$"`

成功:

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

2. GitLabCI获取流水线项目命名空间失败

(1)报错

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

(2)原因分析

变量错误

(3)解决方法

修改引用流水线变量。

修改前:

-F "raw.directory=/${CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \

修改后:

-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \

成功:

持续集成交付CICD:GitLabCI上传Nexus制品,持续集成交付CICD,ci/cd,运维,gitlab

3.GItLab Package如何实现上传至本地仓库

(1)版本

GItLab Package 需要GitLab 13.5及以上版本实现

(2)curl命令上传到GItLab Package

curl --header "PRIVATE-TOKEN: 4b54764fd071175387e94385a0d6c5" \
     --upload-file sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar \
     "http://192.168.204.8/api/v4/projects/14/packages/generic/devops03-maven5-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar?status=default"

(3)流水线上传到GItLab Package

CI.yaml

.pushartforgitlab:
  tags:
    - build
  stage: pushartifact  
  script:
    |- 
      if [[ ${PROJECT_TYPE} == "java" ]];then
          newPkgName=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
          pkgName=`ls target/ | grep -e "jar$"`
          cd target/
          mv ${pkgName} ${newPkgName}
          curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
          --upload-file ${newPkgName} \
          "http://192.168.204.8/api/v4/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/${newPkgName}?status=default"
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

gitlab-ci.yaml文章来源地址https://www.toymoban.com/news/detail-759709.html


pushartifact:
 extends:
 - .pushartforgitlab

到了这里,关于持续集成交付CICD:GitLabCI上传Nexus制品的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:云计算 ✨文章内容:软件交付 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 持续集成(Continuous Integration,CI)和持续交付(Continuous D

    2024年02月10日
    浏览(45)
  • 什么是CI/CD:持续集成与持续交付?(InsCode AI 创作助手)

    在现代软件开发领域,CICD(Continuous Integration and Continuous Delivery)是一种关键性的开发实践,它有助于提高软件交付的质量和效率。本文将深入探讨CICD的定义、原理和重要性,以及如何在项目中实施CICD流程。 什么是CICD? CICD是一种软件开发实践,它将持续集成(CI)和持续交

    2024年02月09日
    浏览(43)
  • 持续集成交付CICD:基于ArgoCD 的GitOps 自动化完成前端项目应用发布与回滚

    目录 一、实验 1. 环境 2. K8S master节点部署Argo CD 3.基于ArgoCD 实现GitOps (同步部署文件) 4.基于ArgoCD 实现GitOps (同步HELM文件) 二、问题 1. ArgoCD 连接K8S集群状态为 Unknown 2.ArgoCD 创建application失败 3. curl命令 (1)主机 表1 主机 主机 架构 版本 IP 备注 master1 K8S master节点 1.20.6 1

    2024年02月03日
    浏览(36)
  • 使用jenkins nexus插件配置并上传软件包至nexus制品库详细步骤

    Nexus 是一个强大的仓库管理工具,用于管理和分发 Maven、npm、Docker 等软件包。它 提供了一个集中的存储库,用于存储和管理软件包 ,并提供了版本控制、访问控制、构建和部署等功能。 Nexus 可以帮助开发团队提高软件包管理的效率和可靠性,减少软件包冲突和版本不一致的

    2024年02月05日
    浏览(40)
  • DevOps持续交付之容器化CICD流水线

    随着DevOps⼤规模化的落地和应⽤,持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成,使⽤的开源⼯具是Jenkins,CD指的是持续交付和持续部署,⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段-单元测试阶段-部署阶段-⾃动化测试阶段-部署到⽣产环境

    2024年02月03日
    浏览(51)
  • 【日常记录】自动化部署与持续交付:GitHub Actions CICD

    当我们做项目的时候,如果做完了,要发布,就需要打包,扔到服务器上,如果改了一点东西,还得打包,扔到服务器上,重复的执行 打包= 扔到服务器上 详细记录如何使用github actions自动化部署项目 自动化部署与持续交付:GitHub Actions CICD 自动化部署一般以下方式 Jenkins

    2024年02月02日
    浏览(48)
  • 持续交付的力量: 使用Docker Swarm进行CI/CD

    ✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 1.1 Docker Swarm 简介 Docker Swarm 是 Docker 官方的集群管理和编排工具,用于管理多个 Docker 节点和容器,并分发容器到这些节点上运行。Docker Swarm 具有可扩展性、故障转移和负

    2023年04月26日
    浏览(47)
  • Jenkins 持续集成 【CICD】

    持续集成是一种开发实践,它倡导团队成员频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、打包、部署、自动化测试)来验证,从而尽快地发现集成中的错误。让产品可以快速迭代,同时还能保持高质量。 Jenkins是基于Java开发的持续集成工具,开源免

    2024年04月12日
    浏览(27)
  • 《Docker与持续集成/持续部署:构建高效交付流程,打造敏捷软件交付链》

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月15日
    浏览(46)
  • 持续集成/持续交付——JenkinsFile详细使用教程

    提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务 它为开发人员提供了更具乐趣的Jenkins使用方式 实现了一种全新的、现代风格的用户界面 有助于任何规模的团队实现持续交付 流水线编辑器:是一种直观并可视化的流水线编辑器 流水线的可视化:对流水线的可视化表

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包