init
Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
This commit is contained in:
commit
e32c182728
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
tmp/
|
||||||
|
.terraform
|
||||||
|
terraform.tfstate**
|
||||||
|
.idea
|
21
.terraform.lock.hcl
Normal file
21
.terraform.lock.hcl
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# This file is maintained automatically by "terraform init".
|
||||||
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
|
provider "registry.terraform.io/hashicorp/null" {
|
||||||
|
version = "3.2.1"
|
||||||
|
hashes = [
|
||||||
|
"h1:tSj1mL6OQ8ILGqR2mDu7OYYYWf+hoir0pf9KAQ8IzO8=",
|
||||||
|
"zh:58ed64389620cc7b82f01332e27723856422820cfd302e304b5f6c3436fb9840",
|
||||||
|
"zh:62a5cc82c3b2ddef7ef3a6f2fedb7b9b3deff4ab7b414938b08e51d6e8be87cb",
|
||||||
|
"zh:63cff4de03af983175a7e37e52d4bd89d990be256b16b5c7f919aff5ad485aa5",
|
||||||
|
"zh:74cb22c6700e48486b7cabefa10b33b801dfcab56f1a6ac9b6624531f3d36ea3",
|
||||||
|
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
|
||||||
|
"zh:79e553aff77f1cfa9012a2218b8238dd672ea5e1b2924775ac9ac24d2a75c238",
|
||||||
|
"zh:a1e06ddda0b5ac48f7e7c7d59e1ab5a4073bbcf876c73c0299e4610ed53859dc",
|
||||||
|
"zh:c37a97090f1a82222925d45d84483b2aa702ef7ab66532af6cbcfb567818b970",
|
||||||
|
"zh:e4453fbebf90c53ca3323a92e7ca0f9961427d2f0ce0d2b65523cc04d5d999c2",
|
||||||
|
"zh:e80a746921946d8b6761e77305b752ad188da60688cfd2059322875d363be5f5",
|
||||||
|
"zh:fbdb892d9822ed0e4cb60f2fedbdbb556e4da0d88d3b942ae963ed6ff091e48f",
|
||||||
|
"zh:fca01a623d90d0cad0843102f9b8b9fe0d3ff8244593bd817f126582b52dd694",
|
||||||
|
]
|
||||||
|
}
|
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Nexus with casc plugin example
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.adphi.net/adphi/nexus-casc-terraform-example
|
||||||
|
cd nexus-casc-terraform-example
|
||||||
|
|
||||||
|
# edit variables to customize image / version, etc in main.tf
|
||||||
|
# terraform init
|
||||||
|
# terraform plan
|
||||||
|
# terraform apply
|
||||||
|
|
||||||
|
# or use the pre-build image (adphi/nexus3:3.41.1-casc)
|
||||||
|
docker-compose --project-directory test up
|
||||||
|
```
|
5
main.tf
Normal file
5
main.tf
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
module "nexus_image" {
|
||||||
|
source = "./modules/nexus_image"
|
||||||
|
nexus_image = "adphi/nexus3:3.41.1-casc"
|
||||||
|
nexus_version = "3.41.1"
|
||||||
|
}
|
27
modules/nexus_image/main.tf
Normal file
27
modules/nexus_image/main.tf
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
locals {
|
||||||
|
tmp_dir = "${path.root}/tmp/nexus-casc-plugin"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "null_resource" "nexus_image" {
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "mkdir -p ${local.tmp_dir}"
|
||||||
|
working_dir = path.root
|
||||||
|
}
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "git clone ${var.nexus_repo_url} ${local.tmp_dir}"
|
||||||
|
working_dir = path.root
|
||||||
|
}
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "git checkout v${var.nexus_version}-01.0"
|
||||||
|
working_dir = local.tmp_dir
|
||||||
|
}
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "docker build --pull -t ${var.nexus_image} ${local.tmp_dir}"
|
||||||
|
}
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "docker push ${var.nexus_image}"
|
||||||
|
}
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "rm -rf ${local.tmp_dir}"
|
||||||
|
}
|
||||||
|
}
|
4
modules/nexus_image/output.tf
Normal file
4
modules/nexus_image/output.tf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
output "nexus_image" {
|
||||||
|
depends_on = [null_resource.nexus_image]
|
||||||
|
value = var.nexus_image
|
||||||
|
}
|
14
modules/nexus_image/variables.tf
Normal file
14
modules/nexus_image/variables.tf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
variable "nexus_repo_url" {
|
||||||
|
type = string
|
||||||
|
default = "https://github.com/AdaptiveConsulting/nexus-casc-plugin"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable nexus_version {
|
||||||
|
type = string
|
||||||
|
default = "3.41.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable nexus_image {
|
||||||
|
type = string
|
||||||
|
default = "adphi/nexus3:3.41.1-casc"
|
||||||
|
}
|
802
test/default-nexus.yml
Normal file
802
test/default-nexus.yml
Normal file
@ -0,0 +1,802 @@
|
|||||||
|
---
|
||||||
|
core:
|
||||||
|
baseUrl: ${BASE_URL:""}
|
||||||
|
userAgentCustomization: "CasC test"
|
||||||
|
connectionTimeout: 60
|
||||||
|
connectionRetryAttempts: 10
|
||||||
|
# httpProxy:
|
||||||
|
# host: proxy.internal.lan
|
||||||
|
# port: 3128
|
||||||
|
# username: nexus-user
|
||||||
|
# password: ${PROXY_PASSWORD}
|
||||||
|
# httpsProxy:
|
||||||
|
# host: proxy.internal.lan
|
||||||
|
# port: 3128
|
||||||
|
# username: nexus-user
|
||||||
|
# password: ${PROXY_PASSWORD}
|
||||||
|
# ntlmHost: dc.internal.lan
|
||||||
|
# ntlmDomain: internal.lan
|
||||||
|
# nonProxyHosts:
|
||||||
|
# - host1.internal.lan
|
||||||
|
# - host2.internal.lan
|
||||||
|
capabilities:
|
||||||
|
- type: analytics-configuration
|
||||||
|
enabled: false
|
||||||
|
- type: OutreachManagementCapability
|
||||||
|
enabled: false
|
||||||
|
security:
|
||||||
|
anonymousAccess: true
|
||||||
|
pruneUsers: true
|
||||||
|
realms:
|
||||||
|
- name: "DockerToken"
|
||||||
|
enabled: true
|
||||||
|
- name: "NpmToken"
|
||||||
|
enabled: true
|
||||||
|
- name: "NuGetApiKey"
|
||||||
|
enabled: true
|
||||||
|
privileges:
|
||||||
|
- id: system-repository-admin-docker-docker-proxy-update
|
||||||
|
enabled: true
|
||||||
|
name: system-repository-admin-docker-docker-proxy-update
|
||||||
|
description: Permit update to docker-proxy repository configuration
|
||||||
|
type: repository-admin
|
||||||
|
properties:
|
||||||
|
format: docker
|
||||||
|
repository: docker-proxy
|
||||||
|
actions: read,update
|
||||||
|
roles:
|
||||||
|
- id: ui-minimal
|
||||||
|
enabled: true
|
||||||
|
source: default
|
||||||
|
name: ui-minimal
|
||||||
|
description: "UI Minimal"
|
||||||
|
privileges:
|
||||||
|
- nx-healthcheck-read
|
||||||
|
- nx-search-read
|
||||||
|
- id: repository-read-docker-proxy
|
||||||
|
enabled: true
|
||||||
|
source: default
|
||||||
|
name: repository-read-docker-proxy
|
||||||
|
description: "Docker Anonymous Access for public proxy repository"
|
||||||
|
privileges:
|
||||||
|
- nx-repository-view-docker-docker-proxy-browse
|
||||||
|
- nx-repository-view-docker-docker-proxy-read
|
||||||
|
- id: repository-read-all
|
||||||
|
enabled: true
|
||||||
|
source: default
|
||||||
|
name: repository-read-all
|
||||||
|
description: "Read All permission for repositories"
|
||||||
|
privileges:
|
||||||
|
- nx-apikey-all
|
||||||
|
- nx-repository-view-*-*-browse
|
||||||
|
- nx-repository-view-*-*-read
|
||||||
|
- id: repository-write-all
|
||||||
|
enabled: true
|
||||||
|
source: default
|
||||||
|
name: repository-write-all
|
||||||
|
description: "Write All permission for repositories"
|
||||||
|
privileges:
|
||||||
|
- nx-apikey-all
|
||||||
|
- nx-repository-view-*-*-*
|
||||||
|
- id: repository-read-nodejs-dist
|
||||||
|
enabled: true
|
||||||
|
source: default
|
||||||
|
name: repository-read-nodejs-dist
|
||||||
|
description: "Read permission for NodeJS Dist repository"
|
||||||
|
privileges:
|
||||||
|
- nx-repository-view-raw-nodejs-dist-browse
|
||||||
|
- nx-repository-view-raw-nodejs-dist-read
|
||||||
|
- id: repository-read-cypress-dist
|
||||||
|
enabled: true
|
||||||
|
source: default
|
||||||
|
name: repository-read-cypress-dist
|
||||||
|
description: "Read permission for Cypress Download repository"
|
||||||
|
privileges:
|
||||||
|
- nx-repository-view-raw-cypress-dist-browse
|
||||||
|
- nx-repository-view-raw-cypress-dist-read
|
||||||
|
users:
|
||||||
|
- username: anonymous
|
||||||
|
firstName: Anonymous
|
||||||
|
lastName: User
|
||||||
|
password: anonymous
|
||||||
|
updateExistingPassword: false
|
||||||
|
email: anonymous@example.org
|
||||||
|
roles:
|
||||||
|
- source: "default"
|
||||||
|
role: ui-minimal
|
||||||
|
- source: "default"
|
||||||
|
role: repository-read-cypress-dist
|
||||||
|
- source: "default"
|
||||||
|
role: repository-read-docker-proxy
|
||||||
|
- source: "default"
|
||||||
|
role: repository-read-nodejs-dist
|
||||||
|
- username: johndoe
|
||||||
|
firstName: John
|
||||||
|
lastName: Doe
|
||||||
|
password: "${file:/run/secrets/password_johndoe}"
|
||||||
|
updateExistingPassword: true
|
||||||
|
email: johndoe@example.org
|
||||||
|
roles:
|
||||||
|
- source: "default"
|
||||||
|
role: nx-admin
|
||||||
|
- username: janedoe
|
||||||
|
firstName: Jane
|
||||||
|
lastName: Doe
|
||||||
|
password: changeme
|
||||||
|
updateExistingPassword: false
|
||||||
|
email: janedoe@example.org
|
||||||
|
roles:
|
||||||
|
- source: "default"
|
||||||
|
role: ui-minimal
|
||||||
|
- source: "default"
|
||||||
|
role: repository-write-all
|
||||||
|
repository:
|
||||||
|
pruneBlobStores: true
|
||||||
|
blobStores:
|
||||||
|
- name: apt
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: apt
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: docker
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: docker
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: golang
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: golang
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: maven
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: maven
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: npm
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: npm
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: nuget
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: nuget
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: raw
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: raw
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: rubygems
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: rubygems
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: pypi
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: pypi
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
- name: yum
|
||||||
|
type: File
|
||||||
|
attributes:
|
||||||
|
file:
|
||||||
|
path: yum
|
||||||
|
blobStoreQuotaConfig:
|
||||||
|
quotaLimitBytes: 10240000000
|
||||||
|
quotaType: spaceUsedQuota
|
||||||
|
pruneCleanupPolicies: true
|
||||||
|
cleanupPolicies:
|
||||||
|
- name: cleanup-everything
|
||||||
|
format: ALL_FORMATS
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-apt-proxy
|
||||||
|
format: apt
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-docker-proxy
|
||||||
|
format: docker
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-golang-proxy
|
||||||
|
format: go
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-maven-proxy
|
||||||
|
format: maven2
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-npm-proxy
|
||||||
|
format: npm
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-nuget-proxy
|
||||||
|
format: nuget
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-pypi-proxy
|
||||||
|
format: pypi
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-raw-proxy
|
||||||
|
format: raw
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-rubygems-proxy
|
||||||
|
format: rubygems
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
- name: cleanup-yum-proxy
|
||||||
|
format: yum
|
||||||
|
notes: ''
|
||||||
|
criteria:
|
||||||
|
lastDownloaded: 864000
|
||||||
|
pruneRepositories: true
|
||||||
|
repositories:
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/apt-repositories
|
||||||
|
- name: apt-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: apt-hosted
|
||||||
|
attributes:
|
||||||
|
apt:
|
||||||
|
distribution: focal
|
||||||
|
aptSigning:
|
||||||
|
keypair: "${file:/run/secrets/gpg_key_example}"
|
||||||
|
passphrase: "${file:/run/secrets/gpg_passphrase_example}"
|
||||||
|
storage:
|
||||||
|
blobStoreName: apt
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- None
|
||||||
|
- name: apt-ubuntu
|
||||||
|
online: true
|
||||||
|
recipeName: apt-proxy
|
||||||
|
attributes:
|
||||||
|
apt:
|
||||||
|
distribution: focal
|
||||||
|
aptSigning:
|
||||||
|
keypair: "${file:/run/secrets/gpg_key_example}"
|
||||||
|
passphrase: "${file:/run/secrets/gpg_passphrase_example}"
|
||||||
|
proxy:
|
||||||
|
contentMaxAge: -1
|
||||||
|
remoteUrl: https://archive.ubuntu.com/ubuntu/
|
||||||
|
metadataMaxAge: 1440
|
||||||
|
storage:
|
||||||
|
blobStoreName: apt
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-apt-proxy
|
||||||
|
- name: chromedriver-dist
|
||||||
|
online: true
|
||||||
|
recipeName: raw-proxy
|
||||||
|
attributes:
|
||||||
|
raw:
|
||||||
|
contentDisposition: ATTACHMENT
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://chromedriver.storage.googleapis.com/
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: raw
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-raw-proxy
|
||||||
|
- name: cypress-dist
|
||||||
|
online: true
|
||||||
|
recipeName: raw-proxy
|
||||||
|
attributes:
|
||||||
|
raw:
|
||||||
|
contentDisposition: ATTACHMENT
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://download.cypress.io/
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: raw
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-raw-proxy
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/docker-registry
|
||||||
|
- name: docker-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: docker-hosted
|
||||||
|
attributes:
|
||||||
|
docker:
|
||||||
|
forceBasicAuth: true # Do not permit anonymous access to this repository
|
||||||
|
v1Enabled: true
|
||||||
|
# httpPort: 8082 # Uncomment to activate
|
||||||
|
# httpsPort: 8083 # Requires Nexus Jetty be configured to use SSL Certificates
|
||||||
|
storage:
|
||||||
|
blobStoreName: docker
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- None
|
||||||
|
- name: docker-proxy
|
||||||
|
online: true
|
||||||
|
recipeName: docker-proxy
|
||||||
|
attributes:
|
||||||
|
docker:
|
||||||
|
forceBasicAuth: false # Allow anonymous access
|
||||||
|
v1Enabled: true
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://registry-1.docker.io
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
dockerProxy:
|
||||||
|
indexType: HUB
|
||||||
|
cacheForeignLayers: true
|
||||||
|
foreignLayerUrlWhitelist:
|
||||||
|
- '.*'
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: docker
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
routingRules:
|
||||||
|
routingRuleId: null
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-docker-proxy
|
||||||
|
- name: docker
|
||||||
|
online: true
|
||||||
|
recipeName: docker-group
|
||||||
|
attributes:
|
||||||
|
docker:
|
||||||
|
forceBasicAuth: false # Each repo uses its own setting
|
||||||
|
v1Enabled: true
|
||||||
|
storage:
|
||||||
|
blobStoreName: docker
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "docker-hosted"
|
||||||
|
- "docker-proxy"
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/go-repositories
|
||||||
|
# GOPROXY should point to the _group_ repository URL
|
||||||
|
# golang requires anonymous access for this to work
|
||||||
|
- name: golang-gonexus-proxy
|
||||||
|
online: true
|
||||||
|
recipeName: go-proxy
|
||||||
|
attributes:
|
||||||
|
golang:
|
||||||
|
forceBasicAuth: false # Allow anonymous access
|
||||||
|
v1Enabled: true
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://gonexus.dev
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: golang
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
routingRules:
|
||||||
|
routingRuleId: null
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-golang-proxy
|
||||||
|
- name: golang-group
|
||||||
|
online: true
|
||||||
|
recipeName: go-group
|
||||||
|
attributes:
|
||||||
|
golang:
|
||||||
|
forceBasicAuth: false # Each repo uses its own setting
|
||||||
|
v1Enabled: true
|
||||||
|
storage:
|
||||||
|
blobStoreName: golang
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "golang-gonexus-proxy"
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/maven-repositories
|
||||||
|
- name: maven-snapshots
|
||||||
|
online: true
|
||||||
|
recipeName: maven2-hosted
|
||||||
|
attributes:
|
||||||
|
maven:
|
||||||
|
versionPolicy: SNAPSHOT
|
||||||
|
layoutPolicy: STRICT
|
||||||
|
storage:
|
||||||
|
writePolicy: ALLOW
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
blobStoreName: maven
|
||||||
|
- name: maven-releases
|
||||||
|
online: true
|
||||||
|
recipeName: maven2-hosted
|
||||||
|
attributes:
|
||||||
|
maven:
|
||||||
|
versionPolicy: RELEASE
|
||||||
|
layoutPolicy: STRICT
|
||||||
|
storage:
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
blobStoreName: maven
|
||||||
|
- name: maven-central
|
||||||
|
online: true
|
||||||
|
recipeName: maven2-proxy
|
||||||
|
attributes:
|
||||||
|
proxy:
|
||||||
|
contentMaxAge: -1
|
||||||
|
remoteUrl: https://repo1.maven.org/maven2/
|
||||||
|
metadataMaxAge: 1440
|
||||||
|
negativeCache:
|
||||||
|
timeToLive: 1440
|
||||||
|
enabled: true
|
||||||
|
storage:
|
||||||
|
strictContentTypeValidation: false
|
||||||
|
blobStoreName: maven
|
||||||
|
httpclient:
|
||||||
|
connection:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
maven:
|
||||||
|
versionPolicy: RELEASE
|
||||||
|
layoutPolicy: PERMISSIVE
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-maven-proxy
|
||||||
|
- name: maven
|
||||||
|
online: true
|
||||||
|
recipeName: maven2-group
|
||||||
|
attributes:
|
||||||
|
maven:
|
||||||
|
versionPolicy: MIXED
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "maven-snapshots"
|
||||||
|
- "maven-releases"
|
||||||
|
- "maven-central"
|
||||||
|
storage:
|
||||||
|
blobStoreName: maven
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/npm-registry
|
||||||
|
- name: npm-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: npm-hosted
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: npm
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- None
|
||||||
|
- name: npm-proxy
|
||||||
|
online: true
|
||||||
|
recipeName: npm-proxy
|
||||||
|
attributes:
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://registry.npmjs.org
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: npm
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
routingRules:
|
||||||
|
routingRuleId: null
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-npm-proxy
|
||||||
|
- name: npm
|
||||||
|
online: true
|
||||||
|
recipeName: npm-group
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: npm
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "npm-proxy"
|
||||||
|
- "npm-hosted"
|
||||||
|
# NuGet Support: https://help.sonatype.com/repomanager3/formats/nuget-repositories
|
||||||
|
# v3 URLs must be used if v3 proxy is present
|
||||||
|
- name: nuget-proxy
|
||||||
|
online: true
|
||||||
|
recipeName: nuget-proxy
|
||||||
|
attributes:
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://api.nuget.org/v3/index.json
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: nuget
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-nuget-proxy
|
||||||
|
- name: nuget-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: nuget-hosted
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: nuget
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
- name: nuget
|
||||||
|
online: true
|
||||||
|
recipeName: nuget-group
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: nuget
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "nuget-hosted"
|
||||||
|
- "nuget-proxy"
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/pypi-repositories
|
||||||
|
- name: pypi-proxy
|
||||||
|
online: true
|
||||||
|
recipeName: pypi-proxy
|
||||||
|
attributes:
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://pypi.org/
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: pypi
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-pypi-proxy
|
||||||
|
- name: pypi-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: pypi-hosted
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: pypi
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
- name: pypi-group
|
||||||
|
online: true
|
||||||
|
recipeName: pypi-group
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: pypi
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "pypi-hosted"
|
||||||
|
- "pypi-proxy"
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/raw-repositories
|
||||||
|
- name: raw-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: raw-hosted
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: raw
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- None
|
||||||
|
# How to configure proprietary component - requires Nexus firewall
|
||||||
|
raw:
|
||||||
|
contentDisposition: ATTACHMENT # or inline
|
||||||
|
component:
|
||||||
|
proprietaryComponents: true
|
||||||
|
- name: nodejs-dist
|
||||||
|
online: true
|
||||||
|
recipeName: raw-proxy
|
||||||
|
attributes:
|
||||||
|
raw:
|
||||||
|
contentDisposition: ATTACHMENT
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://nodejs.org/dist/
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: raw
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-raw-proxy
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/rubygems-repositories
|
||||||
|
- name: rubygems-proxy
|
||||||
|
online: true
|
||||||
|
recipeName: rubygems-proxy
|
||||||
|
attributes:
|
||||||
|
proxy:
|
||||||
|
remoteUrl: https://rubygems.org/
|
||||||
|
contentMaxAge: -1.0
|
||||||
|
metadataMaxAge: 1440.0
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
storage:
|
||||||
|
blobStoreName: rubygems
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-rubygems-proxy
|
||||||
|
- name: rubygems-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: rubygems-hosted
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: rubygems
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
- name: rubygems-group
|
||||||
|
online: true
|
||||||
|
recipeName: rubygems-group
|
||||||
|
attributes:
|
||||||
|
storage:
|
||||||
|
blobStoreName: rubygems
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- "rubygems-hosted"
|
||||||
|
- "rubygems-proxy"
|
||||||
|
# https://help.sonatype.com/repomanager3/formats/yum-repositories
|
||||||
|
# Please read the documentation around repodataDepth
|
||||||
|
- name: yum-hosted
|
||||||
|
online: true
|
||||||
|
recipeName: yum-hosted
|
||||||
|
attributes:
|
||||||
|
yum:
|
||||||
|
repodataDepth: 3
|
||||||
|
deployPolicy: STRICT # PERMISSIVE for maven yum deployment
|
||||||
|
storage:
|
||||||
|
blobStoreName: yum
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- None
|
||||||
|
- name: yum-centos
|
||||||
|
online: true
|
||||||
|
recipeName: yum-proxy
|
||||||
|
attributes:
|
||||||
|
yum:
|
||||||
|
repodataDepth: 3
|
||||||
|
deployPolicy: STRICT # PERMISSIVE for maven yum deployment
|
||||||
|
yumSigning:
|
||||||
|
keypair: "${file:/run/secrets/gpg_key_example}"
|
||||||
|
passphrase: "${file:/run/secrets/gpg_passphrase_example}"
|
||||||
|
httpclient:
|
||||||
|
blocked: false
|
||||||
|
autoBlock: true
|
||||||
|
connection:
|
||||||
|
useTrustStore: false
|
||||||
|
negativeCache:
|
||||||
|
enabled: true
|
||||||
|
timeToLive: 1440.0
|
||||||
|
proxy:
|
||||||
|
contentMaxAge: -1
|
||||||
|
remoteUrl: http://mirror.centos.org/centos/
|
||||||
|
metadataMaxAge: 1440
|
||||||
|
storage:
|
||||||
|
blobStoreName: yum
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
writePolicy: ALLOW_ONCE
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-yum-proxy
|
||||||
|
- name: yum-group
|
||||||
|
online: true
|
||||||
|
recipeName: yum-group
|
||||||
|
attributes:
|
||||||
|
group:
|
||||||
|
memberNames:
|
||||||
|
- yum-hosted
|
||||||
|
- yum-centos
|
||||||
|
yumSigning:
|
||||||
|
keypair: "${file:/run/secrets/gpg_key_example}"
|
||||||
|
passphrase: "${file:/run/secrets/gpg_passphrase_example}"
|
||||||
|
storage:
|
||||||
|
blobStoreName: yum
|
||||||
|
strictContentTypeValidation: true
|
||||||
|
cleanup:
|
||||||
|
policyName:
|
||||||
|
- cleanup-yum-proxy
|
29
test/docker-compose.yaml
Normal file
29
test/docker-compose.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
nexus:
|
||||||
|
image: 'adphi/nexus3:3.41.1-casc'
|
||||||
|
container_name: 'nexus'
|
||||||
|
user: 'nexus'
|
||||||
|
environment:
|
||||||
|
BASE_URL: 'http://localhost:8081'
|
||||||
|
NEXUS_SECURITY_RANDOMPASSWORD: 'false'
|
||||||
|
NEXUS_CASC_CONFIG: '/opt/nexus.yml'
|
||||||
|
# INSTALL4J_ADD_VM_PARAMS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
|
||||||
|
ports:
|
||||||
|
- 8081:8081
|
||||||
|
expose:
|
||||||
|
- 8081
|
||||||
|
volumes:
|
||||||
|
- './default-nexus.yml:/opt/nexus.yml:ro'
|
||||||
|
secrets:
|
||||||
|
- password_johndoe
|
||||||
|
- gpg_key_example
|
||||||
|
- gpg_passphrase_example
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
password_johndoe:
|
||||||
|
file: ./password_johndoe
|
||||||
|
gpg_key_example:
|
||||||
|
file: ./gpg-example.key
|
||||||
|
gpg_passphrase_example:
|
||||||
|
file: ./gpg-example.passphrase
|
35
test/gpg-example.key
Normal file
35
test/gpg-example.key
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||||
|
|
||||||
|
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
|
||||||
|
uARFigR4P8GJyJD/aLRYc0eJSD60gn3ywA==
|
||||||
|
=Kieb
|
||||||
|
-----END PGP PRIVATE KEY BLOCK-----
|
1
test/gpg-example.passphrase
Normal file
1
test/gpg-example.passphrase
Normal file
@ -0,0 +1 @@
|
|||||||
|
admin123
|
19
test/gpg-example.pub
Normal file
19
test/gpg-example.pub
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mI0EYEQE1wEEAM3yPG1irDgcpupmoQbuzJ94rsy0cfeZoaqYcbze+wcJM4lrz4YJ
|
||||||
|
2i2pTmhsaEoouyC8qP8abpAmRQVBjmzsOOh106eTFlU0twkeE9NpdAxGthN4GLjb
|
||||||
|
k+IxqNpzdjS2z8QzCH2KL8VUUDP4IikZ+EcQBZA1dnvvBBr2tq/iKa9LABEBAAG0
|
||||||
|
HUV4YW1wbGUgPGV4YW1wbGVAZXhhbXBsZS5jb20+iM4EEwEKADgWIQQXa2yOr0SR
|
||||||
|
mj4qjI+SEq/EdJf/IQUCYEQE1wIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
|
||||||
|
CRCSEq/EdJf/IcjBA/9z9n1BgmY1JBAEbLi7KxdY+YLE6xWq7tgg2vxwGemERGar
|
||||||
|
89EDwmsrNZCaJBURn95oVKdzQ6tabgmM/jm9lPhsMcMhMnzjUVfTQ2uE1liCJMzT
|
||||||
|
cInxEWFDWbxOgbI6OglZE4+2hpZPn/sZ2Gak/+HJy2/6tDCnnmzCnzPcYJxCeLiN
|
||||||
|
BGBEBNcBBADL0Q+v/Lh7UwOAv0sMBOiGZJeQIOhtB4KaAjz4VjZztwSrQtXA499S
|
||||||
|
MNwGkFU+p1uD9UQI0eSU1S169fWec12RfRzBgTgwlvH5uc0/H1Cy8qgZteaPY2Y0
|
||||||
|
mlZeGxk3+EmDB/KPjTssOvoKulKIw2lhvRDErG2pYbAdBaOhjhNIdQARAQABiLYE
|
||||||
|
GAEKACAWIQQXa2yOr0SRmj4qjI+SEq/EdJf/IQUCYEQE1wIbDAAKCRCSEq/EdJf/
|
||||||
|
IQ+EBACO488Na08yNQL8mBfBtcCnwTCe7kJNHi4Jw5xciiUPC4Fu4bODCqanHBJI
|
||||||
|
lEwkkz8xWw/JRj//D8qiZ0FqJ0EbXXx8sF4UmKkcTV9c0K/9pWUMsRjRgkD5nnUp
|
||||||
|
2A+LPCZFlgQZMtvhuARFigR4P8GJyJD/aLRYc0eJSD60gn3ywA==
|
||||||
|
=Gdw2
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
1
test/password_johndoe
Normal file
1
test/password_johndoe
Normal file
@ -0,0 +1 @@
|
|||||||
|
admin123
|
Loading…
Reference in New Issue
Block a user