Artifacts#
Note: Using Artifacts during the beta period is free. Once the artifacts system is in the general availability, additional charges will apply based on usage.
Artifacts are used to persist files that are either final deliverables or intermediary/debugging files.
Semaphore has three levels of artifact store: job, workflow and project.
Each job and workflow gets its own namespaced artifact store, which is handy for storing debugging data or build artifacts that need to be promoted through the pipeline.
On the project level there is a single artifact store that usually stores final deliverables of CI/CD pipelines.
Job Artifacts#
Each job has an artifact store. You can view stored files from a job's page. Look for "Job Artifacts" button. The main use-case for job level artifacts is storing logs, screenshots and other types of files that make debugging easier.
To upload files to the job level artifacts store, use the built-in artifact CLI.
artifact push job <my_file_or_dir>
If you want to upload artifacts only in the case of failed job
using
epilogue in combination with on_fail
condition is a usual pattern.
blocks:
- name: Build app
task:
jobs:
- name: Job 1
commands:
- make test
epilogue:
on_fail:
commands:
- artifact push job logs/test.log
- artifact push job screenshots
Since job level debugging artifacts become irrelevant some time after a job has
finished, you can set artifacts to expire with --expire-in
flag.
artifact push job --expire-in 2w logs/test.log
For more details about uploading artifacts check the artifact CLI reference.
Workflow Artifacts#
As in the case of jobs, each workflow also gets its own artifact store. On the workflow page look for the "Workflow Artifacts" button.
Workflow artifacts can be used for storing various build and test reports and build artifacts. Promoting build artifacts through blocks and pipelines of a workflow is another common use-case.
The following example illustrates how executable app
, available in the
workflow level artifact store, can be downloaded in the downstream blocks of
the pipeline. In the same way artifacts can be downloaded from any other
pipeline of the same workflow.
blocks:
- name: Build app
task:
jobs:
- name: Make
commands:
- make
- artifact push workflow app
- name: Test
task:
jobs:
- name: Unit tests
commands:
- artifact pull workflow app
- make test
- name: Integration tests
commands:
- artifact pull workflow app
- make integration-tests
For more details about uploading and downloading artifacts see artifact CLI reference.
Project Artifacts#
Project level artifacts are great for storing final deliverables of the CI/CD process. To access them in the UI, look for the "Project Artifacts" button on the project page.
To upload project artifacts from any job of any workflow you need to use:
artifact push project myapp-v1.25.tar.gz
Similarly, if you want to download file from the project level artifact store,
use the pull
command.
artifact pull project myapp-v1.25.tar.gz