mirror of
https://github.com/drone/drone-kaniko.git
synced 2026-06-14 05:12:27 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10673a5a17 | |||
| 0d0510f029 | |||
| e09b2ad589 | |||
| 5b4ff345a7 | |||
| b826c7f408 | |||
| e56198f84c |
@@ -0,0 +1,14 @@
|
|||||||
|
inputSet:
|
||||||
|
name: event-PR
|
||||||
|
identifier: eventPR
|
||||||
|
orgIdentifier: default
|
||||||
|
projectIdentifier: Drone_Plugins
|
||||||
|
pipeline:
|
||||||
|
identifier: dronekanikoharness
|
||||||
|
properties:
|
||||||
|
ci:
|
||||||
|
codebase:
|
||||||
|
build:
|
||||||
|
type: PR
|
||||||
|
spec:
|
||||||
|
number: <+trigger.prNumber>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
inputSet:
|
||||||
|
name: event-Push
|
||||||
|
identifier: eventPush
|
||||||
|
orgIdentifier: default
|
||||||
|
projectIdentifier: Drone_Plugins
|
||||||
|
pipeline:
|
||||||
|
identifier: dronekanikoharness
|
||||||
|
properties:
|
||||||
|
ci:
|
||||||
|
codebase:
|
||||||
|
build:
|
||||||
|
type: branch
|
||||||
|
spec:
|
||||||
|
branch: <+trigger.branch>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
inputSet:
|
||||||
|
name: event-Tag
|
||||||
|
identifier: eventTag
|
||||||
|
orgIdentifier: default
|
||||||
|
projectIdentifier: Drone_Plugins
|
||||||
|
pipeline:
|
||||||
|
identifier: dronekanikoharness
|
||||||
|
properties:
|
||||||
|
ci:
|
||||||
|
codebase:
|
||||||
|
build:
|
||||||
|
type: tag
|
||||||
|
spec:
|
||||||
|
tag: <+trigger.tag>
|
||||||
@@ -0,0 +1,681 @@
|
|||||||
|
pipeline:
|
||||||
|
name: drone-kaniko-harness
|
||||||
|
identifier: dronekanikoharness
|
||||||
|
projectIdentifier: Drone_Plugins
|
||||||
|
orgIdentifier: default
|
||||||
|
tags: {}
|
||||||
|
properties:
|
||||||
|
ci:
|
||||||
|
codebase:
|
||||||
|
connectorRef: GitHub_Drone_Org
|
||||||
|
repoName: drone-kaniko
|
||||||
|
build: <+input>
|
||||||
|
sparseCheckout: []
|
||||||
|
stages:
|
||||||
|
- stage:
|
||||||
|
name: Manager Approval
|
||||||
|
identifier: Manager_Approval
|
||||||
|
description: ""
|
||||||
|
type: Approval
|
||||||
|
spec:
|
||||||
|
execution:
|
||||||
|
steps:
|
||||||
|
- step:
|
||||||
|
name: CI Manager Approval
|
||||||
|
identifier: CI_Manager_Approval
|
||||||
|
type: HarnessApproval
|
||||||
|
timeout: 1d
|
||||||
|
spec:
|
||||||
|
approvalMessage: |-
|
||||||
|
Please review the following information
|
||||||
|
and approve the pipeline progression
|
||||||
|
includePipelineExecutionHistory: true
|
||||||
|
approvers:
|
||||||
|
minimumCount: 1
|
||||||
|
disallowPipelineExecutor: false
|
||||||
|
userGroups:
|
||||||
|
- CI_Manager
|
||||||
|
isAutoRejectEnabled: false
|
||||||
|
approverInputs: []
|
||||||
|
tags: {}
|
||||||
|
- parallel:
|
||||||
|
- stage:
|
||||||
|
name: linux-amd64
|
||||||
|
identifier: linuxamd64
|
||||||
|
description: ""
|
||||||
|
type: CI
|
||||||
|
spec:
|
||||||
|
cloneCodebase: true
|
||||||
|
caching:
|
||||||
|
enabled: false
|
||||||
|
paths: []
|
||||||
|
platform:
|
||||||
|
os: Linux
|
||||||
|
arch: Amd64
|
||||||
|
runtime:
|
||||||
|
type: Cloud
|
||||||
|
spec: {}
|
||||||
|
execution:
|
||||||
|
steps:
|
||||||
|
- step:
|
||||||
|
type: Run
|
||||||
|
name: Build Binary
|
||||||
|
identifier: Build
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: golang:1.22.4
|
||||||
|
shell: Sh
|
||||||
|
command: |-
|
||||||
|
go test ./...
|
||||||
|
sh scripts/build.sh
|
||||||
|
- parallel:
|
||||||
|
- step:
|
||||||
|
type: Plugin
|
||||||
|
name: BuildAndPushDockerTag
|
||||||
|
identifier: BuildAndPushDockerTag
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
username: drone
|
||||||
|
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.amd64
|
||||||
|
auto_tag: "true"
|
||||||
|
auto_tag_suffix: linux-amd64
|
||||||
|
daemon_off: "false"
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "tag"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
- "-acr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
- acr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: ""
|
||||||
|
repo: acr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: acr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-acr"
|
||||||
|
repo: ecr
|
||||||
|
nodeName: _<+matrix.repo>
|
||||||
|
- step:
|
||||||
|
type: Plugin
|
||||||
|
name: BuildAndPushDockerTag_Kaniko
|
||||||
|
identifier: BuildAndPushDockerTag_Kaniko
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
username: drone
|
||||||
|
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.amd64.kaniko1.9.1
|
||||||
|
auto_tag: "true"
|
||||||
|
auto_tag_suffix: linux-amd64-kaniko1.9.1
|
||||||
|
daemon_off: "false"
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "tag"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
nodeName: <+matrix.repo>
|
||||||
|
- parallel:
|
||||||
|
- step:
|
||||||
|
type: BuildAndPushDockerRegistry
|
||||||
|
name: BuildAndPushDockerBranch
|
||||||
|
identifier: BuildAndPushDockerBranch
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
tags:
|
||||||
|
- linux-amd64
|
||||||
|
caching: false
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.amd64
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "branch"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
- "-acr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
- acr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: ""
|
||||||
|
repo: acr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: acr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-acr"
|
||||||
|
repo: ecr
|
||||||
|
nodeName: <+matrix.repo>
|
||||||
|
- step:
|
||||||
|
type: BuildAndPushDockerRegistry
|
||||||
|
name: BuildAndPushDockerBranch_Kaniko
|
||||||
|
identifier: BuildAndPushDockerBranch_Kaniko
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
tags:
|
||||||
|
- linux-amd64-kaniko1.9.1
|
||||||
|
caching: false
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.amd64.kaniko1.9.1
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "branch"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
nodeName: _<+matrix.repo>
|
||||||
|
when:
|
||||||
|
pipelineStatus: Success
|
||||||
|
- stage:
|
||||||
|
name: linux-arm64
|
||||||
|
identifier: linuxarm64
|
||||||
|
description: ""
|
||||||
|
type: CI
|
||||||
|
spec:
|
||||||
|
cloneCodebase: true
|
||||||
|
caching:
|
||||||
|
enabled: false
|
||||||
|
paths: []
|
||||||
|
platform:
|
||||||
|
os: Linux
|
||||||
|
arch: Arm64
|
||||||
|
runtime:
|
||||||
|
type: Cloud
|
||||||
|
spec: {}
|
||||||
|
execution:
|
||||||
|
steps:
|
||||||
|
- step:
|
||||||
|
type: Run
|
||||||
|
name: Build Binary
|
||||||
|
identifier: Build_and_Test
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: golang:1.22.4
|
||||||
|
shell: Sh
|
||||||
|
command: |-
|
||||||
|
go test ./...
|
||||||
|
sh scripts/build.sh
|
||||||
|
- parallel:
|
||||||
|
- step:
|
||||||
|
type: Plugin
|
||||||
|
name: BuildAndPushDockerTag
|
||||||
|
identifier: BuildAndPushDockerTag
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
username: drone
|
||||||
|
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.arm64
|
||||||
|
auto_tag: "true"
|
||||||
|
auto_tag_suffix: linux-arm64
|
||||||
|
daemon_off: "false"
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "tag"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
- "-acr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
- acr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: ""
|
||||||
|
repo: acr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: acr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-acr"
|
||||||
|
repo: ecr
|
||||||
|
nodeName: _<+matrix.repo>
|
||||||
|
- step:
|
||||||
|
type: Plugin
|
||||||
|
name: BuildAndPushDockerTag_Kaniko
|
||||||
|
identifier: BuildAndPushDockerTag_Kaniko
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
username: drone
|
||||||
|
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.arm64.kaniko1.9.1
|
||||||
|
auto_tag: "true"
|
||||||
|
auto_tag_suffix: linux-arm64-kaniko1.9.1
|
||||||
|
daemon_off: "false"
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "tag"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
nodeName: _<+matrix.repo>
|
||||||
|
- parallel:
|
||||||
|
- step:
|
||||||
|
type: BuildAndPushDockerRegistry
|
||||||
|
name: BuildAndPushDockerBranch
|
||||||
|
identifier: BuildAndPushDockerBranch
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
tags:
|
||||||
|
- linux-arm64
|
||||||
|
caching: false
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.arm64
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "branch"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
- "-acr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
- acr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: ""
|
||||||
|
repo: acr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: acr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: acr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-acr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-acr"
|
||||||
|
repo: ecr
|
||||||
|
nodeName: <+matrix.repo>
|
||||||
|
- step:
|
||||||
|
type: BuildAndPushDockerRegistry
|
||||||
|
name: BuildAndPushDockerBranch_Kaniko
|
||||||
|
identifier: BuildAndPushDockerBranch_Kaniko
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
repo: plugins/kaniko<+matrix.image>
|
||||||
|
tags:
|
||||||
|
- linux-arm64-kaniko1.9.1
|
||||||
|
caching: false
|
||||||
|
dockerfile: docker/<+matrix.repo>/Dockerfile.linux.arm64.kaniko1.9.1
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "branch"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- ""
|
||||||
|
- "-gcr"
|
||||||
|
- "-gar"
|
||||||
|
- "-ecr"
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
exclude:
|
||||||
|
- image: ""
|
||||||
|
repo: gcr
|
||||||
|
- image: ""
|
||||||
|
repo: gar
|
||||||
|
- image: ""
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: gar
|
||||||
|
- image: "-gcr"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: docker
|
||||||
|
- image: "-gar"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-gar"
|
||||||
|
repo: ecr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: docker
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gcr
|
||||||
|
- image: "-ecr"
|
||||||
|
repo: gar
|
||||||
|
nodeName: _<+matrix.repo>
|
||||||
|
when:
|
||||||
|
pipelineStatus: Success
|
||||||
|
- stage:
|
||||||
|
name: Manifest
|
||||||
|
identifier: Manifest
|
||||||
|
description: ""
|
||||||
|
type: CI
|
||||||
|
spec:
|
||||||
|
cloneCodebase: true
|
||||||
|
caching:
|
||||||
|
enabled: false
|
||||||
|
paths: []
|
||||||
|
platform:
|
||||||
|
os: Linux
|
||||||
|
arch: Amd64
|
||||||
|
runtime:
|
||||||
|
type: Cloud
|
||||||
|
spec: {}
|
||||||
|
execution:
|
||||||
|
steps:
|
||||||
|
- parallel:
|
||||||
|
- step:
|
||||||
|
type: Plugin
|
||||||
|
name: Manifest
|
||||||
|
identifier: Manifest
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: plugins/manifest
|
||||||
|
settings:
|
||||||
|
auto_tag: "true"
|
||||||
|
spec: docker/<+matrix.repo>/manifest.tmpl
|
||||||
|
username: drone
|
||||||
|
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
||||||
|
ignore_missing: "true"
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "branch" || <+codebase.build.type> == "tag"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
- acr
|
||||||
|
nodeName: manifest_<+matrix.repo>
|
||||||
|
- step:
|
||||||
|
type: Plugin
|
||||||
|
name: Manifest_kaniko
|
||||||
|
identifier: Manifest_kaniko
|
||||||
|
spec:
|
||||||
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
|
image: plugins/manifest
|
||||||
|
settings:
|
||||||
|
auto_tag: "true"
|
||||||
|
spec: docker/<+matrix.repo>/manifest-kaniko1.9.1.tmpl
|
||||||
|
username: drone
|
||||||
|
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
||||||
|
ignore_missing: "true"
|
||||||
|
when:
|
||||||
|
stageStatus: Success
|
||||||
|
condition: <+codebase.build.type> == "branch" || <+codebase.build.type> == "tag"
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
repo:
|
||||||
|
- docker
|
||||||
|
- gcr
|
||||||
|
- gar
|
||||||
|
- ecr
|
||||||
|
nodeName: manifest_<+matrix.repo>
|
||||||
|
when:
|
||||||
|
pipelineStatus: Success
|
||||||
+11
-4
@@ -480,25 +480,32 @@ func setupAuth(tenantId, clientId, cert,
|
|||||||
return "", fmt.Errorf("registry must be specified")
|
return "", fmt.Errorf("registry must be specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
if noPush {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// case of client secret or cert based auth
|
// case of client secret or cert based auth
|
||||||
if clientId != "" {
|
if clientId != "" {
|
||||||
// only setup auth when pushing or credentials are defined
|
// only setup auth when pushing or credentials are defined
|
||||||
|
|
||||||
token, publicUrl, err := getACRToken(subscriptionId, tenantId, clientId, clientSecret, cert, registry)
|
token, publicUrl, err := getACRToken(subscriptionId, tenantId, clientId, clientSecret, cert, registry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if noPush {
|
||||||
|
logrus.Warnf("NO_PUSH mode: failed to fetch ACR Token: %v", err)
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
return "", errors.Wrap(err, "failed to fetch ACR Token")
|
return "", errors.Wrap(err, "failed to fetch ACR Token")
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup docker config for azure registry and base image docker registry
|
// setup docker config for azure registry and base image docker registry
|
||||||
if err := setDockerAuth(username, token, registry, dockerUsername, dockerPassword, dockerRegistry); err != nil {
|
if err := setDockerAuth(username, token, registry, dockerUsername, dockerPassword, dockerRegistry); err != nil {
|
||||||
|
if noPush {
|
||||||
|
logrus.Warnf("NO_PUSH mode: failed to create docker config: %v", err)
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
return "", errors.Wrap(err, "failed to create docker config")
|
return "", errors.Wrap(err, "failed to create docker config")
|
||||||
}
|
}
|
||||||
return publicUrl, nil
|
return publicUrl, nil
|
||||||
} else {
|
} else {
|
||||||
|
if noPush {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
return "", fmt.Errorf("managed authentication is not supported")
|
return "", fmt.Errorf("managed authentication is not supported")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go-v2/service/ecr"
|
"github.com/aws/aws-sdk-go-v2/service/ecr"
|
||||||
"github.com/aws/aws-sdk-go-v2/service/ecrpublic"
|
"github.com/aws/aws-sdk-go-v2/service/ecrpublic"
|
||||||
awsv1 "github.com/aws/aws-sdk-go/aws"
|
awsv1 "github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
ecrv1 "github.com/aws/aws-sdk-go/service/ecr"
|
ecrv1 "github.com/aws/aws-sdk-go/service/ecr"
|
||||||
@@ -29,6 +30,8 @@ import (
|
|||||||
kaniko "github.com/drone/drone-kaniko"
|
kaniko "github.com/drone/drone-kaniko"
|
||||||
"github.com/drone/drone-kaniko/pkg/artifact"
|
"github.com/drone/drone-kaniko/pkg/artifact"
|
||||||
"github.com/drone/drone-kaniko/pkg/docker"
|
"github.com/drone/drone-kaniko/pkg/docker"
|
||||||
|
"github.com/google/go-containerregistry/pkg/authn"
|
||||||
|
"github.com/google/go-containerregistry/pkg/crane"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -403,6 +406,21 @@ func main() {
|
|||||||
Usage: "OIDC token for assuming role via web identity",
|
Usage: "OIDC token for assuming role via web identity",
|
||||||
EnvVar: "PLUGIN_OIDC_TOKEN_ID",
|
EnvVar: "PLUGIN_OIDC_TOKEN_ID",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "tar-path",
|
||||||
|
Usage: "Set this flag to save the image as a tarball at path",
|
||||||
|
EnvVar: "PLUGIN_TAR_PATH, PLUGIN_DESTINATION_TAR_PATH",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "source-tar-path",
|
||||||
|
Usage: "Set this flag for the source tarball during push operations.",
|
||||||
|
EnvVar: "PLUGIN_SOURCE_TAR_PATH",
|
||||||
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "push-only",
|
||||||
|
Usage: "Specify if the operation is push-only",
|
||||||
|
EnvVar: "PLUGIN_PUSH_ONLY",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := app.Run(os.Args); err != nil {
|
if err := app.Run(os.Args); err != nil {
|
||||||
@@ -415,10 +433,21 @@ func run(c *cli.Context) error {
|
|||||||
registry := c.String("registry")
|
registry := c.String("registry")
|
||||||
region := c.String("region")
|
region := c.String("region")
|
||||||
noPush := c.Bool("no-push")
|
noPush := c.Bool("no-push")
|
||||||
|
pushOnly := c.Bool("push-only")
|
||||||
assumeRole := c.String("assume-role")
|
assumeRole := c.String("assume-role")
|
||||||
externalId := c.String("external-id")
|
externalId := c.String("external-id")
|
||||||
oidcToken := c.String("oidc-token-id")
|
oidcToken := c.String("oidc-token-id")
|
||||||
|
|
||||||
|
// Validate flags
|
||||||
|
if noPush && pushOnly {
|
||||||
|
return fmt.Errorf("no-push and push-only flags cannot be used together")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle push-only operation
|
||||||
|
if pushOnly {
|
||||||
|
return handlePushOnly(c)
|
||||||
|
}
|
||||||
|
|
||||||
// setup docker config for azure registry and base image docker registry
|
// setup docker config for azure registry and base image docker registry
|
||||||
err := setDockerAuth(
|
err := setDockerAuth(
|
||||||
c.String("docker-registry"),
|
c.String("docker-registry"),
|
||||||
@@ -521,6 +550,9 @@ func run(c *cli.Context) error {
|
|||||||
IgnorePaths: c.StringSlice("ignore-paths"),
|
IgnorePaths: c.StringSlice("ignore-paths"),
|
||||||
ImageFSExtractRetry: c.Int("image-fs-extract-retry"),
|
ImageFSExtractRetry: c.Int("image-fs-extract-retry"),
|
||||||
ImageDownloadRetry: c.Int("image-download-retry"),
|
ImageDownloadRetry: c.Int("image-download-retry"),
|
||||||
|
TarPath: c.String("tar-path"),
|
||||||
|
SourceTarPath: c.String("source-tar-path"),
|
||||||
|
PushOnly: c.Bool("push-only"),
|
||||||
},
|
},
|
||||||
Artifact: kaniko.Artifact{
|
Artifact: kaniko.Artifact{
|
||||||
Tags: c.StringSlice("tags"),
|
Tags: c.StringSlice("tags"),
|
||||||
@@ -846,3 +878,98 @@ func getOidcCreds(oidcToken, assumeRole string) (string, string, string, error)
|
|||||||
// Return the credentials
|
// Return the credentials
|
||||||
return *result.Credentials.AccessKeyId, *result.Credentials.SecretAccessKey, *result.Credentials.SessionToken, nil
|
return *result.Credentials.AccessKeyId, *result.Credentials.SecretAccessKey, *result.Credentials.SessionToken, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createECRSession(region, accessKey, secretKey, sessionToken string) *ecrv1.ECR {
|
||||||
|
sess := session.Must(session.NewSession(&awsv1.Config{
|
||||||
|
Region: awsv1.String(region),
|
||||||
|
Credentials: credentials.NewStaticCredentials(
|
||||||
|
accessKey,
|
||||||
|
secretKey,
|
||||||
|
sessionToken,
|
||||||
|
),
|
||||||
|
}))
|
||||||
|
return ecrv1.New(sess)
|
||||||
|
}
|
||||||
|
|
||||||
|
func handlePushOnly(c *cli.Context) error {
|
||||||
|
sourceTarPath := c.String("source-tar-path")
|
||||||
|
if sourceTarPath == "" {
|
||||||
|
return fmt.Errorf("source_tar_path is required when push_only is set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(sourceTarPath); os.IsNotExist(err) {
|
||||||
|
return fmt.Errorf("image tarball does not exist at path: %s", sourceTarPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
repo := c.String("repo")
|
||||||
|
registry := c.String("registry")
|
||||||
|
if repo == "" || registry == "" {
|
||||||
|
return fmt.Errorf("repository and registry must be specified for push-only operation")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the image from the tarball
|
||||||
|
img, err := crane.Load(sourceTarPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to load image from tarball: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get ECR credentials using existing auth methods
|
||||||
|
var username, password string
|
||||||
|
var svc *ecrv1.ECR
|
||||||
|
if oidcToken := c.String("oidc-token-id"); oidcToken != "" && c.String("assume-role") != "" {
|
||||||
|
accessKey, secretKey, sessionToken, err := getOidcCreds(oidcToken, c.String("assume-role"))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get OIDC credentials: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
svc = createECRSession(c.String("region"), accessKey, secretKey, sessionToken)
|
||||||
|
} else if assumeRole := c.String("assume-role"); assumeRole != "" {
|
||||||
|
accessKey, secretKey, sessionToken, err := getAssumeRoleCreds(c.String("region"), assumeRole, c.String("external-id"), "")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get assume role credentials: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
svc = createECRSession(c.String("region"), accessKey, secretKey, sessionToken)
|
||||||
|
} else {
|
||||||
|
// Use direct credentials or IAM role
|
||||||
|
sess := session.Must(session.NewSession(&awsv1.Config{
|
||||||
|
Region: awsv1.String(c.String("region")),
|
||||||
|
Credentials: credentials.NewStaticCredentials(
|
||||||
|
c.String("access-key"),
|
||||||
|
c.String("secret-key"),
|
||||||
|
"",
|
||||||
|
),
|
||||||
|
}))
|
||||||
|
svc = ecrv1.New(sess)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get ECR auth token using the configured session
|
||||||
|
username, password, _, err = getAuthInfo(svc)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get ECR credentials: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup crane auth
|
||||||
|
opts := []crane.Option{
|
||||||
|
crane.WithAuth(&authn.Basic{
|
||||||
|
Username: username,
|
||||||
|
Password: password,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Push for each tag
|
||||||
|
tags := c.StringSlice("tags")
|
||||||
|
if len(tags) == 0 {
|
||||||
|
tags = []string{"latest"}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tag := range tags {
|
||||||
|
dest := fmt.Sprintf("%s/%s:%s", registry, repo, tag)
|
||||||
|
if err := crane.Push(img, dest, opts...); err != nil {
|
||||||
|
return fmt.Errorf("failed to push image to %s: %v", dest, err)
|
||||||
|
}
|
||||||
|
fmt.Printf("Successfully pushed image to %s\n", dest)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user