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

Viewed 2263

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'
2 Answers

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"

i couldnt work with the gitlab-ci key words for relase cli so i used release cli shell script and i resolved my issue like below:

create_tag:
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  when: manual
  stage: create_tag
  #  before_script:
  #    - curl -L --output /usr/local/bin/release-cli "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-linux-amd64"
  #    - sudo chmod +x /usr/local/bin/release-cli
  #    - release-cli -v
  script:
    - ANGULAR_VERSION=$(node -p "require('./package.json').version")
    - echo running release_job for $ANGULAR_VERSION
    - export GODEBUG="x509ignoreCN=0"
    - docker save -o nmsclientwebangularV$ANGULAR_VERSION.tar $NEXUS_URL/admin/nmsclientwebangular:V$ANGULAR_VERSION
    - echo $CI_JOB_ID
    - release-cli --insecure-https create --name="Release V$ANGULAR_VERSION"  --tag-name="V$ANGULAR_VERSION" --assets-link='{"name":"DockerFile","url":"https://gitlab.sinacomsys.local:9191/nms/Access/NMSClient/nmsclient_web_angular/-/jobs/'$CI_JOB_ID'/artifacts/download?file_type=archive"}'
  artifacts:
    paths:
      - nmsclientwebangular*.tar
  only:
    - master

in last line of script section i create release tag with release cli shell commands and i used CI_JOB_ID of this job.be careful to use it like this '$CI_JOB_ID';

if you want to use another job artifact you should save that job CI_JOB_ID in a custom variable like this:

export JOB_ID=$CI_JOB_ID

and then use JOB_ID instead of CI_JOB_ID

Related