2021-10-30 09:50:23 -03:00
# Artifactory
2017-12-02 21:03:06 +01:00
2021-09-27 22:43:00 -03:00
Publish your artifacts to an Artifactory instance.
2017-12-02 21:03:06 +01:00
## How it works
2017-12-10 15:17:29 -02:00
You can declare multiple Artifactory instances.
2017-12-02 21:03:06 +01:00
All binaries generated by your `builds` section will be pushed to
each configured Artifactory.
If you have only one Artifactory instance,
the configuration is as easy as adding the
2021-12-23 01:52:01 +01:00
upload target and a username to your `.goreleaser.yaml` file:
2017-12-02 21:03:06 +01:00
```yaml
artifactories:
2017-12-09 18:17:37 +01:00
- name: production
2017-12-09 20:54:04 +01:00
target: http://< Your-Instance > :8081/artifactory/example-repo-local/{{ .ProjectName }}/{{ .Version }}/
2017-12-02 21:03:06 +01:00
username: goreleaser
```
Prerequisites:
2018-05-28 10:49:38 -03:00
- A running Artifactory instances
- A user + password / API key with grants to upload an artifact
2017-12-02 21:03:06 +01:00
### Target
2017-12-09 20:54:04 +01:00
The `target` is the URL to upload the artifacts to (_without_ the name of the artifact).
2017-12-02 21:03:06 +01:00
2017-12-09 20:54:04 +01:00
An example configuration for `goreleaser` in upload mode `binary` with the target can look like
2017-12-02 21:03:06 +01:00
2018-02-18 20:37:59 -03:00
```yaml
- mode: binary
target: 'http://artifacts.company.com:8081/artifactory/example-repo-local/{{ .ProjectName }}/{{ .Version }}/{{ .Os }}/{{ .Arch }}{{ if .Arm }}{{ .Arm }}{{ end }}'
2017-12-02 21:03:06 +01:00
```
2018-02-18 20:37:59 -03:00
and will result in a final deployment like `http://artifacts.company.com:8081/artifactory/example-repo-local/goreleaser/1.0.0/Darwin/x86_64/goreleaser` .
2017-12-02 21:03:06 +01:00
2018-02-18 20:37:59 -03:00
Supported variables:
2017-12-02 21:03:06 +01:00
2018-05-28 10:49:38 -03:00
- Version
- Tag
- ProjectName
- Os
- Arch
- Arm
2017-12-09 20:54:04 +01:00
2020-05-10 16:57:11 -03:00
!!! info
Variables _Os_ , _Arch_ and _Arm_ are only supported in upload mode `binary` .
2017-12-02 21:03:06 +01:00
2018-08-25 17:26:06 -03:00
### Username
2017-12-02 21:03:06 +01:00
Your configured username needs to be authenticated against your Artifactory.
2018-08-25 17:26:06 -03:00
You can have the username set in the configuration file as shown above
or you can have it read from an environment variable.
The configured name of your Artifactory instance will be used to build
the environment variable name.
This way we support auth for multiple instances.
This also means that the `name` per configured instance needs to be unique
per goreleaser configuration.
The name of the environment variable will be `ARTIFACTORY_NAME_USERNAME` .
If your instance is named `production` , you can store the username in the
environment variable `ARTIFACTORY_PRODUCTION_USERNAME` .
The name will be transformed to uppercase.
If a configured username is found in the configuration file, then the
environment variable is not used at all.
### Password / API Key
2017-12-02 21:03:06 +01:00
The password or API key will be stored in a environment variable.
2017-12-20 11:32:21 +01:00
The configured name of your Artifactory instance will be used.
2017-12-09 18:17:37 +01:00
With this way we support auth for multiple instances.
This also means that the `name` per configured instance needs to be unique
per goreleaser configuration.
2017-12-02 21:03:06 +01:00
2017-12-09 18:17:37 +01:00
The name of the environment variable will be `ARTIFACTORY_NAME_SECRET` .
If your instance is named `production` , you need to store the secret in the
environment variable `ARTIFACTORY_PRODUCTION_SECRET` .
The name will be transformed to uppercase.
2017-12-02 21:03:06 +01:00
2018-09-06 16:19:19 -03:00
### Server authentication
You can authenticate your Artifactory TLS server adding a trusted X.509
certificate chain in your configuration.
The trusted certificate chain will be used to validate the server certificates.
2018-09-08 16:33:46 -03:00
You can set the trusted certificate chain using the `trusted_certificates`
setting the artifactory section with PEM encoded certificates on a YAML literal
block like this:
2018-09-06 16:19:19 -03:00
```yaml
2018-09-08 16:33:46 -03:00
puts:
- name: "some artifactory server with a private TLS certificate"
#...(other settings)...
trusted_certificates: |
-----BEGIN CERTIFICATE-----
MIIDrjCCApagAwIBAgIIShr2zchZo+8wDQYJKoZIhvcNAQENBQAwNTEXMBUGA1UE
...(edited content)...
TyzMJasj5BPZrmKjJb6O/tOtEIJ66xPSBTxPShkEYHnB7A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDrjCCApagAwIBAgIIShr2zchZo+8wDQYJKoZIhvcNAQENBQAwNTEXMBUGA1UE
...(edited content)...
TyzMJasj5BPZrmKjJb6O/tOtEIJ66xPSBTxPShkEYHnB7A==
-----END CERTIFICATE-----
2018-09-06 16:19:19 -03:00
```
2017-12-02 21:03:06 +01:00
## Customization
Of course, you can customize a lot of things:
```yaml
2021-12-23 01:52:01 +01:00
# .goreleaser.yaml
2017-12-02 21:03:06 +01:00
artifactories:
# You can have multiple Artifactory instances.
-
2017-12-09 18:17:37 +01:00
# Unique name of your artifactory instance. Used to identify the instance
name: production
2022-03-19 17:44:34 -03:00
# IDs of the artifacts you want to upload.
ids:
- foo
- bar
# File extensions to filter for.
# This might be useful if you have multiple packages with different
# extensions with the same ID, and need to upload each extension to
# a different place (e.g. nFPM packages).
# Default is empty.
exts:
- deb
- rpm
2017-12-09 20:54:04 +01:00
# Upload mode. Valid options are `binary` and `archive` .
# If mode is `archive` , variables _Os_ , _Arch_ and _Arm_ for target name are not supported.
# In that case these variables are empty.
# Default is `archive` .
mode: archive
2022-03-19 17:44:34 -03:00
2017-12-02 21:03:06 +01:00
# URL of your Artifactory instance + path to deploy to
2017-12-09 20:54:04 +01:00
target: http://artifacts.company.com:8081/artifactory/example-repo-local/{{ .ProjectName }}/{{ .Version }}/
2022-03-19 17:44:34 -03:00
2017-12-02 21:03:06 +01:00
# User that will be used for the deployment
2017-12-02 23:34:29 +01:00
username: deployuser
2022-03-19 17:44:34 -03:00
2018-06-25 02:06:52 -03:00
# Upload checksums (defaults to false)
checksum: true
2022-03-19 17:44:34 -03:00
2018-06-25 02:06:52 -03:00
# Upload signatures (defaults to false)
signature: true
2022-03-19 17:44:34 -03:00
2018-09-08 16:33:46 -03:00
# Certificate chain used to validate server certificates
trusted_certificates: |
-----BEGIN CERTIFICATE-----
MIIDrjCCApagAwIBAgIIShr2zchZo+8wDQYJKoZIhvcNAQENBQAwNTEXMBUGA1UE
...(edited content)...
TyzMJasj5BPZrmKjJb6O/tOtEIJ66xPSBTxPShkEYHnB7A==
-----END CERTIFICATE-----
2017-12-02 21:03:06 +01:00
```
2017-12-10 14:41:57 -02:00
These settings should allow you to push your artifacts into multiple Artifactories.
2022-03-19 17:44:34 -03:00
!!! tip
Learn more about the [name template engine ](/customization/templates/ ).