GitLabCI/CD: 内置仓库轻松实现代码基线与制品关联

7c115f3c11bd31a32ed16e760e337897.png

将制品上传到第三方仓库

以Nexus为例, 通过调用NexusAPI完成制品的上传。

.pushartifact:
  tags:
    - build
  stage: pushartifact  
  script:
    |- 
      if [[ ${PROJECT_TYPE} == "java" ]];then
          pkgName=`ls target/ | grep -e "jar$"`
          cd target/
          mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
          curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=mylocalrepo" \
          -H "accept: application/json" \
          -H "Content-Type: multipart/form-data" \
          -F "raw.directory=/${CI_PROJECT_ROOT_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内置仓库

GitLab仓库可以充当各种常见的包管理器的私有或公共仓库中心。可以发布和共享包,这些包可以很容易地作为下游项目的依赖项使用。
b1652aeeb2f9dbd26458cbe7896a0d2f.png

轻松实现代码基线和流水线构建与制品关联。

a2b94963466a4e1617687219e13fdd48.png

目前支持的仓库类型:
86def840fd885b0bfe42be0709271346.png

实例:使用GitLab Generic 类型仓库

5aa04a0b2be3d16c23ef472e9890d68e.png

仓库认证

  • 用户个人Token(注意不会关联到Pipeline);

  • CI流水线作业的Token (${CI_JOB_TOKEN});

  • 发布Token (项目设置中创建DeployToken);

上传包

PUT /projects/:id/packages/generic/:package_name/:package_version/:file_name?status=:status


参数:

  • id 项目的ID (Integer/string  必填);

  • package_name 包名称(String 必填);

  • package_version  包版本(String 必填);

  • file_name 文件名 (String 必填);

  • status 包状态,可选值[default/hidden] 默认是在UI展示(String 可选);

代码示例:

curl --header "PRIVATE-TOKEN: apF1R9s9JJBYJzLF5mYd" \
     --upload-file sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar \
     "http://192.168.1.200/api/v4/projects/33/packages/generic/devops03-maven-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar?status=default"

响应示例:

{
  "message":"201 Created"
}


当发布与现有包具有相同名称和版本的包时,新的包文件将添加到现有包中。仍然可以使用 UI 或 API 来访问和查看现有包的历史旧文件。

下载包

GET /projects/:id/packages/generic/:package_name/:package_version/:file_name

参数:

  • id 项目的ID (Integer/string  必填);

  • package_name 包名称(String 必填);

  • package_version  包版本(String 必填);

  • file_name 文件名 (String 必填);

代码示例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \ 
"http://192.168.1.200/api/v4/projects/33/packages/generic/devops03-maven-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar"

GitLabCI/CD 示例:

.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.1.200/api/v4/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/${newPkgName}?status=default"
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

8706ad85a3eb2924b226b8ff23fb7d81.png

本内容来自于《第③期DevOps实践训练营》, 了解详情可以点击 2021 如何成为一名优秀的DevOps工程师?|第三期训练营报名中欢迎投稿,微信:devopsvip。

关于我们

DevOps云学堂,专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!

60ed00e4f5d28482031ab0d9404e63c7.png

更多DevOps实践,请关注「DevOps云学堂」

3bfdd27ff34082100872693a6619128a.gif 点击阅读原文,进入企业DevOps学堂

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值