mirror of
https://github.com/drone/drone-kaniko.git
synced 2026-06-14 14:02:35 +08:00
Compare commits
3 Commits
dockerignore
...
v1.8.6
| Author | SHA1 | Date | |
|---|---|---|---|
| 20c593c3e7 | |||
| c2f00d6d86 | |||
| 467287429a |
+45
-28
@@ -37,6 +37,7 @@ var (
|
|||||||
ACRCertPath = "/kaniko/acr-cert.pem"
|
ACRCertPath = "/kaniko/acr-cert.pem"
|
||||||
pluginVersion = "unknown"
|
pluginVersion = "unknown"
|
||||||
username = "00000000-0000-0000-0000-000000000000"
|
username = "00000000-0000-0000-0000-000000000000"
|
||||||
|
maxPageCount = 1000 // maximum count of pages to cycle through before we break out
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -407,41 +408,56 @@ func getPublicUrl(token, registryUrl, subscriptionId string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
registry := strings.Split(registryUrl, ".")[0]
|
registry := strings.Split(registryUrl, ".")[0]
|
||||||
burl := "https://management.azure.com/subscriptions/" +
|
baseURL := "https://management.azure.com/subscriptions/" +
|
||||||
subscriptionId + "/resources?$filter=resourceType%20eq%20'Microsoft.ContainerRegistry/registries'%20and%20name%20eq%20'" +
|
subscriptionId + "/resources?$filter=resourceType%20eq%20'Microsoft.ContainerRegistry/registries'%20and%20name%20eq%20'" +
|
||||||
registry + "'&api-version=2021-04-01&$select=id"
|
registry + "'&api-version=2021-04-01&$select=id"
|
||||||
|
|
||||||
method := "GET"
|
method := "GET"
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
req, err := http.NewRequest(method, burl, nil)
|
|
||||||
if err != nil {
|
cnt := 0
|
||||||
fmt.Println(err)
|
|
||||||
return "", errors.Wrap(err, "failed to create request for getting container registry setting")
|
for {
|
||||||
|
// this is just in case we end up cycling through nextLink's infinitely.
|
||||||
|
// this should not happen - added as a precaution.
|
||||||
|
if cnt > maxPageCount {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
cnt++
|
||||||
|
req, err := http.NewRequest(method, baseURL, nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrap(err, "failed to create request for getting container registry setting")
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("Authorization", "Bearer "+token)
|
||||||
|
res, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrap(err, "failed to send request for getting container registry setting")
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
|
||||||
|
var response strct
|
||||||
|
err = json.NewDecoder(res.Body).Decode(&response)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrap(err, "failed to send request for getting container registry setting")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(response.Value) > 0 {
|
||||||
|
if response.Value[0].ID == "" { // should not happen
|
||||||
|
return "", errors.New("received empty registry ID from /subscriptions API")
|
||||||
|
}
|
||||||
|
return finalUrl + encodeParam(response.Value[0].ID), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if response.NextLink == "" {
|
||||||
|
// No more pages, break the loop
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
baseURL = response.NextLink
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Header.Add("Authorization", "Bearer "+token)
|
return "", errors.New("did not receive any registry information from /subscriptions API")
|
||||||
res, err := client.Do(req)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return "", errors.Wrap(err, "failed to send request for getting container registry setting")
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
var response strct
|
|
||||||
err = json.NewDecoder(res.Body).Decode(&response)
|
|
||||||
if err != nil {
|
|
||||||
return "", errors.Wrap(err, "failed to send request for getting container registry setting")
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(response.Value) == 0 {
|
|
||||||
return "", errors.New("did not receive any registry information from /subscriptions API")
|
|
||||||
}
|
|
||||||
|
|
||||||
if response.Value[0].ID == "" {
|
|
||||||
return "", errors.New("received empty registry ID from /subscriptions API")
|
|
||||||
}
|
|
||||||
|
|
||||||
return finalUrl + encodeParam(response.Value[0].ID), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeParam(s string) string {
|
func encodeParam(s string) string {
|
||||||
@@ -452,4 +468,5 @@ type strct struct {
|
|||||||
Value []struct {
|
Value []struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
} `json:"value"`
|
} `json:"value"`
|
||||||
|
NextLink string `json:"nextLink"` // for pagination
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/amd64/kaniko-acr /kaniko/
|
ADD release/linux/amd64/kaniko-acr /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-acr"]
|
ENTRYPOINT ["/kaniko/kaniko-acr"]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
ENV USER root
|
ENV USER root
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/arm64/kaniko-acr /kaniko/
|
ADD release/linux/arm64/kaniko-acr /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-acr"]
|
ENTRYPOINT ["/kaniko/kaniko-acr"]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/amd64/kaniko-docker /kaniko/
|
ADD release/linux/amd64/kaniko-docker /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-docker"]
|
ENTRYPOINT ["/kaniko/kaniko-docker"]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
ENV USER root
|
ENV USER root
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/arm64/kaniko-docker /kaniko/
|
ADD release/linux/arm64/kaniko-docker /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-docker"]
|
ENTRYPOINT ["/kaniko/kaniko-docker"]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/amd64/kaniko-ecr /kaniko/
|
ADD release/linux/amd64/kaniko-ecr /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-ecr"]
|
ENTRYPOINT ["/kaniko/kaniko-ecr"]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
ENV USER root
|
ENV USER root
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
|
|
||||||
ADD release/linux/arm64/kaniko-ecr /kaniko/
|
ADD release/linux/arm64/kaniko-ecr /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-ecr"]
|
ENTRYPOINT ["/kaniko/kaniko-ecr"]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/amd64/kaniko-gar /kaniko/
|
ADD release/linux/amd64/kaniko-gar /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-gar"]
|
ENTRYPOINT ["/kaniko/kaniko-gar"]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
ENV USER root
|
ENV USER root
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
|
|
||||||
ADD release/linux/arm64/kaniko-gar /kaniko/
|
ADD release/linux/arm64/kaniko-gar /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-gar"]
|
ENTRYPOINT ["/kaniko/kaniko-gar"]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
ADD release/linux/amd64/kaniko-gcr /kaniko/
|
ADD release/linux/amd64/kaniko-gcr /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-gcr"]
|
ENTRYPOINT ["/kaniko/kaniko-gcr"]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
FROM gcr.io/kaniko-project/executor:v1.9.1
|
FROM gcr.io/kaniko-project/executor:v1.19.2
|
||||||
|
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
ENV USER root
|
ENV USER root
|
||||||
ENV KANIKO_VERSION=1.9.1
|
ENV KANIKO_VERSION=1.19.2
|
||||||
|
|
||||||
ADD release/linux/arm64/kaniko-gcr /kaniko/
|
ADD release/linux/arm64/kaniko-gcr /kaniko/
|
||||||
ENTRYPOINT ["/kaniko/kaniko-gcr"]
|
ENTRYPOINT ["/kaniko/kaniko-gcr"]
|
||||||
|
|||||||
@@ -64,6 +64,9 @@ type (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Excluded variables
|
||||||
|
var excludeList = []string{"PLUGIN_PIPELINE", "PLUGIN_USERNAME", "PLUGIN_PASSWORD", "PLUGIN_TAGS", "PLUGIN_REGISTRY", "PLUGIN_ARTIFACT_FILE", "PLUGIN_REPO", "PLUGIN_BUILD_ARGS"}
|
||||||
|
|
||||||
// labelsForTag returns the labels to use for the given tag, subject to the value of ExpandTag.
|
// labelsForTag returns the labels to use for the given tag, subject to the value of ExpandTag.
|
||||||
//
|
//
|
||||||
// Build information (e.g. +linux_amd64) is carried through to all labels.
|
// Build information (e.g. +linux_amd64) is carried through to all labels.
|
||||||
@@ -224,7 +227,12 @@ func (p Plugin) Exec() error {
|
|||||||
if p.Build.TarPath != "" {
|
if p.Build.TarPath != "" {
|
||||||
cmdArgs = append(cmdArgs, fmt.Sprintf("--tar-path=%s", p.Build.TarPath))
|
cmdArgs = append(cmdArgs, fmt.Sprintf("--tar-path=%s", p.Build.TarPath))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Read all PLUGIN_ env vars
|
||||||
|
//parse them such that PLUGIN_ENV_ARG is set to the value of --env-arg
|
||||||
|
//Add the value of --env-arg to cmdArgs if it does not exist
|
||||||
|
cmdArgs = getPluginEnvVars(cmdArgs)
|
||||||
|
|
||||||
cmd := exec.Command("/kaniko/executor", cmdArgs...)
|
cmd := exec.Command("/kaniko/executor", cmdArgs...)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
@@ -264,3 +272,60 @@ func getDigest(digestFile string) string {
|
|||||||
func trace(cmd *exec.Cmd) {
|
func trace(cmd *exec.Cmd) {
|
||||||
fmt.Fprintf(os.Stdout, "+ %s\n", strings.Join(cmd.Args, " "))
|
fmt.Fprintf(os.Stdout, "+ %s\n", strings.Join(cmd.Args, " "))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getPluginEnvVars(cmdArgs []string) []string {
|
||||||
|
envVars := os.Environ()
|
||||||
|
|
||||||
|
// Iterate through environment variables
|
||||||
|
for _, envVar := range envVars {
|
||||||
|
// Check if the variable starts with PLUGIN_
|
||||||
|
if strings.HasPrefix(envVar, "PLUGIN_") && !contains(excludeList, envVar) {
|
||||||
|
// Split the variable into key and value
|
||||||
|
parts := strings.SplitN(envVar, "=", 2)
|
||||||
|
if len(parts) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
key := parts[0]
|
||||||
|
value := parts[1]
|
||||||
|
|
||||||
|
// Trim the "PLUGIN_" prefix
|
||||||
|
flagName := strings.TrimPrefix(key, "PLUGIN_")
|
||||||
|
|
||||||
|
// Replace underscores with hyphens and convert to lowercase
|
||||||
|
flagName = strings.ReplaceAll(flagName, "_", "-")
|
||||||
|
flagName = strings.ToLower(flagName)
|
||||||
|
|
||||||
|
// Format the flag name with "--" prefix
|
||||||
|
flag := "--" + flagName
|
||||||
|
|
||||||
|
// Check if the flag already exists in cmdArgs
|
||||||
|
exists := false
|
||||||
|
for _, arg := range cmdArgs {
|
||||||
|
if strings.HasPrefix(arg, flag) {
|
||||||
|
exists = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the flag does not exist, add it to cmdArgs
|
||||||
|
if !exists {
|
||||||
|
if value == "" {
|
||||||
|
cmdArgs = append(cmdArgs, flag)
|
||||||
|
} else {
|
||||||
|
cmdArgs = append(cmdArgs, fmt.Sprintf("%s=%s", flag, value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cmdArgs
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to check if a string is in a slice
|
||||||
|
func contains(slice []string, str string) bool {
|
||||||
|
for _, s := range slice {
|
||||||
|
if strings.HasPrefix(str, s) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user