gitlab:如何以编程方式下载CI管道末尾发布的工件

gitlab:如何以编程方式下载CI管道末尾发布的工件,gitlab,gitlab-ci,Gitlab,Gitlab Ci,在Gitlab中,如何通过编程下载CI管道末尾发布的人工制品 通过UI下载它很容易,但如何通过API获得它呢。换句话说,是否可以通过令牌或类似方式访问它?可以通过API访问,如中所示 GET/projects/:id/jobs/:job\u id/工件 请求示例: 使用专用令牌头: curl --location --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/

在Gitlab中,如何通过编程下载CI管道末尾发布的人工制品


通过UI下载它很容易,但如何通过API获得它呢。换句话说,是否可以通过令牌或类似方式访问它?

可以通过API访问,如中所示

GET/projects/:id/jobs/:job\u id/工件

请求示例:

  • 使用专用令牌头:

    curl --location --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/jobs/8/artifacts"
    
  • 使用作业令牌头(仅在.gitlab ci.yml内):

  • 使用job_令牌参数(仅在.gitlab ci.yml内部):

    • 这对我来说很有用:

      #/bin/bash
      GITLAB_URL=”https://gitlab.example.com"
      GITLAB_工件_令牌=“”
      group=“”
      project=“”
      branch=“”
      job=“”
      outZipFile=“$project.zip”
      OutheaderFile=“$outZipFile.httpheaders”
      埃塔加格斯=()
      #不幸的是,GitLab还不支持以下内容:;返回的Etag从不更改:
      #如果[[-f“$outHeadersFile”]]&&[-f“$outZipFile”]];然后
      #etag=$(grep etag<“$outHeadersFile”| cut-f2-d')
      #如果[-n“$etag”];然后
      #etagArgs=(“--header”“如果不匹配:$etag”)
      #echo“使用etag:$etag”
      #fi
      #fi
      response=$(curl“$GITLAB_URL/api/v4/projects/${group}%2F${project}/jobs/artifacts/$branch/download?job=$job”\
      --沉默的\
      -w“%{http_code}\n”\
      -D“$outHeadersFile”\
      -o“$outZipFile.tmp”\
      --标题“私有令牌:$GITLAB\u工件\u令牌”\
      “${etagArgs[@]}”)
      如果[[“$response”==4*]| |[[“$response”==5*];然后
      echo“错误-Http状态:$response”
      rm“$outZipFile.tmp”
      出口1
      elif[“$response”==304];然后
      echo“$项目是最新的”
      其他的
      echo“更新$outZipFile”
      mv“$outZipFile.tmp”“$outZipFile”
      fi
      
      这对我很有效

    • 已创建具有API作用域的新个人访问令牌
    • 使用令牌通过curl命令下载它,如下所示
    • curl--location--header“PRIVATE-TOKEN:MY_PRIVATE_TOKEN” "https://it-gitlab.cloud.net/api/v4/projects/projectId/jobs/jobId/artifacts" --输出监视程序


      请注意,JOB-TOKEN仅适用于特定的付费计划(而不是社区版)。如果使用命名空间API调用,请确保命名空间/项目路径为URL编码。我想你忘了取下你的私人代币。我编辑
      curl --location --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/8/artifacts"
      
      curl --location --form "job-token=$CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/8/artifacts"