Search code examples
gitlabcontinuous-integrationgitlab-cicontinuous-deployment

GitLab: How to include the previous job's artifacts as release assets?


The task create:release creates a new release. How do we add the artifact core.zip in task create:release?

prepare:release:
  stage: prepare_release
  before_script:
    - echo "Setting up packages for Build"
    - apk --no-cache add zip
  script:
    - echo "Preparing release"
    - echo "Build Core"
    - yarn --cwd ./core/ install && yarn --cwd ./core/ build
    - echo "Zip distribution folder for Core"
    - zip -r core.zip ./core/dist ./core/node_modules ./core/package.json
  artifacts:
     paths:
       - core.zip
     expire_in: never

create:release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  needs:
    - job: prepare:release
      artifacts: true
  variables:
    TAG: '$CI_COMMIT_SHA'
  script:
    - echo "Create Release $TAG"
  release:
    name: 'Release $TAG'
    tag_name: '$TAG'
    ref: '$TAG'
    description: 'Release $TAG'

Solution

  • I have resolved this. In prepare:release job, save the job id in an environment file and this file should be in the artifacts.reports.env of this job. Later, in the create:release job, use the API "https://gitlab.com/<namespace>/<project_name>/-/jobs/<job_id>/artifacts/download" to refer to the artifact.

    Updated pipeline:

    prepare:release:
      stage: prepare_release
      before_script:
        - echo "Setting up packages for Build"
        - apk --no-cache add zip
      script:
        - echo "Preparing release"
        - echo "Build Core"
        - yarn --cwd ./core/ install && yarn --cwd ./core/ build
        - echo "Zip distribution folder for Core"
        - zip -r core.zip ./core/dist ./core/node_modules ./core/package.json
      after_script:
        - echo "JOB_ID=$CI_JOB_ID" >> job.env
      artifacts:
         paths:
           - core.zip
         expire_in: never
         reports:
           dotenv: job.env
    
    create:release:
      stage: release
      image: registry.gitlab.com/gitlab-org/release-cli:latest
      needs:
        - job: prepare:release
          artifacts: true
      variables:
        TAG: '$CI_COMMIT_SHA'
      script:
        - echo "Create Release $TAG"
        - echo $JOB_ID  
      release:
        name: 'Release $TAG'
        tag_name: '$TAG'
        ref: '$TAG'
        description: 'Release $TAG'
        assets:
          links:
            - name: "core.zip"
              url: "https://gitlab.com/<namespace>/<project_name>/-/jobs/$JOB_ID/artifacts/download"