gitlab-ci

Remove artifacts from CI manually


I have a private repository at gitlab.com that uses the CI feature. Some of the CI jobs create artifacts files that are stored. I just implemented that the artifacts are deleted automatically after one day by adding this to the CI configuration:

expire_in: 1 day

That works great - however, old artifacts won't be deleted (as expected). So my question is:

How can I delete old artifacts or artifacts that do not expire? (on gitlab.com, no direct access to the server)


Solution

  • You can use the GitLab REST API to delete the artifacts from the jobs if you don't have direct access to the server. Here's a sample curl script that uses the API:

    #!/bin/bash
        
    # project_id, find it here: https://gitlab.com/[organization name]/[repository name]/edit inside the "General project settings" tab
    project_id="3034900"
        
    # token, find it here: https://gitlab.com/profile/personal_access_tokens
    token="Lifg_azxDyRp8eyNFRfg"
    server="gitlab.com"
        
    # go to https://gitlab.com/[organization name]/[repository name]/-/jobs
    # then open JavaScript console
    # copy/paste => copy(_.uniq($('.ci-status').map((x, e) => /([0-9]+)/.exec(e.href)).toArray()).join(' '))
    # press enter, and then copy the result here :
    # repeat for every page you want
    job_ids=(48875658 48874137 48873496 48872419)
        
    for job_id in ${job_ids[@]}
    do
         URL="https://$server/api/v4/projects/$project_id/jobs/$job_id/erase"
         echo "$URL"
         curl --request POST --header "PRIVATE-TOKEN:${token}" "$URL"
         echo "\n"
    done