前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GitLabCI/CD: 内置仓库轻松实现代码基线与制品关联

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

作者头像
DevOps云学堂
发布2021-10-18 14:46:55
9860
发布2021-10-18 14:46:55
举报
文章被收录于专栏:DevOps持续集成

将制品上传到第三方仓库

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

代码语言:javascript
复制
.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仓库可以充当各种常见的包管理器的私有或公共仓库中心。可以发布和共享包,这些包可以很容易地作为下游项目的依赖项使用。

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

目前支持的仓库类型:

实例:使用GitLab Generic 类型仓库

仓库认证

  • 用户个人Token(注意不会关联到Pipeline);
  • CI流水线作业的Token (${CI_JOB_TOKEN});
  • 发布Token (项目设置中创建DeployToken);

上传包

代码语言:javascript
复制
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 可选);

代码示例:

代码语言:javascript
复制
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"

响应示例:

代码语言:javascript
复制
{
  "message":"201 Created"
}

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

下载包

代码语言:javascript
复制
GET /projects/:id/packages/generic/:package_name/:package_version/:file_name

参数:

  • id 项目的ID (Integer/string 必填);
  • package_name 包名称(String 必填);
  • package_version 包版本(String 必填);
  • file_name 文件名 (String 必填);

代码示例:

代码语言:javascript
复制
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 示例:

代码语言:javascript
复制
.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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps云学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 将制品上传到第三方仓库
  • 上传到GitLab内置仓库
  • 实例:使用GitLab Generic 类型仓库
    • 仓库认证
      • 上传包
        • 下载包
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档