Documentation
¶
Index ¶
- Constants
- Variables
- func CheckDefaultComposeFiles(composeFiles []string, workingDir string) ([]string, error)
- func CheckMountPointWriteable(mountPoint container.MountPoint) error
- func ComposeSignal(ctx context.Context, dockerCli command.Cli, project *types.Project, ...) error
- func ConnectToSocket() (net.Conn, error)
- func CreateDockerCli(quiet bool) (command.Cli, error)
- func CreateDockerCliWithContext(quiet bool, dockerContext string) (command.Cli, error)
- func DecryptProjectFiles(repoPath string, p *types.Project) ([]string, error)
- func DeployStack(jobLog *slog.Logger, externalRepoPath string, ctx *context.Context, ...) error
- func DeploySwarmStack(ctx context.Context, dockerCli command.Cli, cfg *composetypes.Config, ...) error
- func DestroyStack(jobLog *slog.Logger, ctx *context.Context, dockerCli *command.Cli, ...) error
- func Exec(apiClient client.APIClient, containerID string, cmd ...string) (out string, err error)
- func ExtractOciArtifactTag(reference string) string
- func GetContainerID(apiClient client.APIClient, name string) (id string, err error)
- func GetLabeledConfigs(ctx context.Context, cli client.APIClient, key, value string) (configs []swarm.Config, err error)
- func GetLabeledContainers(ctx context.Context, cli client.APIClient, key, value string, all bool) (containers []container.Summary, err error)
- func GetLabeledSecrets(ctx context.Context, cli client.APIClient, key, value string) (secrets []swarm.Secret, err error)
- func GetLabeledServices(ctx context.Context, cli client.APIClient, swarmMode bool, key, value string) (map[Service]map[string]string, error)
- func GetLabeledVolumes(ctx context.Context, cli client.APIClient, key, value string) (volumes []volume.Volume, err error)
- func GetMountPointByDestination(cli client.APIClient, containerID, destination string) (container.MountPoint, error)
- func GetPathsFromGitChangedFiles(changedFiles []gitInternal.ChangedFile, basePath string) []string
- func GetProjectContainers(ctx context.Context, dockerCli command.Cli, projectName string) ([]api.ContainerSummary, error)
- func GetProjects(ctx context.Context, dockerCli command.Cli, showDisabled bool) ([]api.Stack, error)
- func GetServiceLabels(ctx context.Context, cli client.APIClient, swarmMode bool, stackName string) (map[Service]Labels, error)
- func HasChangedBindMounts(repoPathExternal string, paths []string, project *types.Project, ...) ([]string, []string)
- func HasChangedBuildFiles(repoPathExternal string, paths []string, project *types.Project, ...) ([]string, []string)
- func HasChangedConfigs(repoPathExternal string, paths []string, project *types.Project, ...) ([]string, []string)
- func HasChangedEnvFiles(repoPathExternal string, paths []string, project *types.Project, ...) ([]string, []string)
- func HasChangedSecrets(repoPathExternal string, paths []string, project *types.Project, ...) ([]string, []string)
- func HaveDeployedServiceImageDigestsChanged(ctx context.Context, dockerCli command.Cli, swarmMode bool, ...) (bool, error)
- func LoadCompose(ctx context.Context, repoPath, workingDir, projectName string, ...) (*types.Project, error)
- func LoadSwarmStack(dockerCli command.Cli, project *types.Project, deployConfig *deploy.Config, ...) (*composetypes.Config, *options.Deploy, error)
- func MarshalAutoDiscoveryConfig(cfg deployConfig.AutoDiscoveryConfig) string
- func NewHttpClient() *http.Client
- func NewJobScheduleParser() gocron.Cron
- func ParseAutoDiscoveryConfig(labelValue string) deployConfig.AutoDiscoveryConfig
- func ParseJobScheduleExpression(spec string) (gocron.Cron, error)
- func ProjectFilesHaveChanges(repoPathExternal string, changePaths []string, project *types.Project) ([]Change, IgnoredInfo, error)
- func ProjectHash(p *types.Project) (string, error)
- func PruneStackConfigs(ctx context.Context, client dockerClient.APIClient, namespace string, ...) error
- func PruneStackSecrets(ctx context.Context, client dockerClient.APIClient, namespace string, ...) error
- func PullImages(ctx context.Context, dockerCli command.Cli, projectName string) error
- func RemoveLabeledVolumes(ctx context.Context, dockerClient client.APIClient, swarmMode bool, ...) error
- func RemoveProject(ctx context.Context, dockerCli command.Cli, projectName string, ...) error
- func RemoveSwarmStack(ctx context.Context, dockerCli command.Cli, namespace string) error
- func RerunJobService(ctx context.Context, cli dockerClient.APIClient, serviceName string) error
- func RestartContainer(ctx context.Context, apiClient client.APIClient, containerID string) error
- func RestartContainerAndWait(ctx context.Context, apiClient client.APIClient, containerID string) error
- func RestartProject(ctx context.Context, dockerCli command.Cli, projectName string, ...) error
- func RestartScheduledSwarmService(ctx context.Context, dockerCLI command.Cli, serviceName string) error
- func RestartService(ctx context.Context, cli dockerClient.APIClient, serviceName string) error
- func RunComposeOneOffFromServiceDefinition(ctx context.Context, dockerCli command.Cli, labels map[string]string, ...) error
- func RunComposeScheduledContainer(ctx context.Context, dockerCli command.Cli, containerID string, ...) error
- func RunContainerOneOffFromExisting(ctx context.Context, apiClient client.APIClient, containerID string) error
- func RunImagePruneJob(ctx context.Context, dockerCLI command.Cli) error
- func RunImageRemoveJob(ctx context.Context, dockerCLI command.Cli, images []string) error
- func RunSwarmJob(ctx context.Context, dockerCLI command.Cli, mode swarm.DeployMode, ...) error
- func RunSwarmOneOffFromService(ctx context.Context, dockerCLI command.Cli, serviceName string, ...) error
- func SetConfigHashPrefixes(stack *composetypes.Config, namespace string) error
- func SetSecretHashPrefixes(stack *composetypes.Config, namespace string) error
- func SourceTypeLabelValue(primary, fallback string) string
- func StartProject(ctx context.Context, dockerCli command.Cli, projectName string, ...) error
- func StartProjectServices(ctx context.Context, dockerCli command.Cli, projectName string, ...) error
- func StartSwarmService(ctx context.Context, dockerCLI command.Cli, serviceName string, ...) error
- func StopProject(ctx context.Context, dockerCli command.Cli, projectName string, ...) error
- func StopProjectServices(ctx context.Context, dockerCli command.Cli, projectName string, ...) error
- func StopSwarmService(ctx context.Context, dockerCLI command.Cli, serviceName string, ...) (originalReplicas uint64, err error)
- func ValidateStopServicesSelfReference(project, service string, refs []StopServiceRef) error
- func VerifyDockerAPIAccess() (error, error)
- func VerifyDockerHostConnection(dockerHost string) error
- func VerifySocketConnection() error
- func VerifySocketRead(httpClient *http.Client) error
- func WaitForSwarmService(ctx context.Context, t *testing.T, cli dockerClient.APIClient, ...) (swarmTypes.Service, error)
- type Change
- type ContainerExitError
- type IgnoredInfo
- type JobExecutionMode
- type JobNotifyOn
- type JobScheduleConfig
- type Labels
- type LatestServiceStatus
- type Service
- type ServiceMismatch
- type ServiceMismatchReason
- type ServiceStatus
- type SignalService
- type StopServiceRef
- type SwarmOneOffFromServiceOptions
Constants ¶
const ( DeprecatedAutoDiscoverLabel = "cd.doco.deployment.auto_discover" DeprecatedAutoDiscoverDeleteLabel = "cd.doco.deployment.auto_discover.delete" // DeprecatedAutoDiscoveryDeleteLabel is the pre-consolidation scalar label for the delete setting. DeprecatedAutoDiscoveryDeleteLabel = "cd.doco.deployment.auto_discovery.delete" //nolint:staticcheck )
DeprecatedAutoDiscoverLabel and DeprecatedAutoDiscoverDeleteLabel are the old label names kept for backwards-compatible reads. New deployments only write the new labels.
Deprecated: Use DocoCDLabels.Deployment.AutoDiscovery and DocoCDLabels.Deployment.AutoDiscoveryConfig instead.
TODO: Remove in a future release.
const ( ServiceMismatchReasonNotDeployed = "service not deployed" ServiceMismatchReasonUnnecessary = "service is unnecessary" ServiceMismatchReasonSwarmMode = "swarm mode mismatch" ServiceMismatchReasonReplicas = "replicas mismatch" )
const (
SocketPath = "/var/run/docker.sock"
)
Variables ¶
var ( ErrNoContainerToStart = errors.New("no container to start") ErrIsInUse = errors.New("is in use") ComposeVersion string // Version of the docker compose module, will be set at runtime )
var ( ErrComposeScheduledServiceReplicated = errors.New("standalone scheduled compose service must have exactly one replica") )
var ( ErrNotAJobService = errors.New("service is not a job-mode service") ErrJobServiceRestartNotSupported = errors.New("restart not supported for job services") // ErrGlobalSwarmServiceNotScalable indicates a global/global-job service was // targeted by an operation that scales replicas, which Swarm does not allow. ErrGlobalSwarmServiceNotScalable = errors.New("global-mode swarm service cannot be scaled") )
var ( ErrMountPointNotFound = errors.New("mount point not found") ErrMountPointNotWriteable = errors.New("mount point is not writeable") ErrContainerIDNotFound = errors.New("container ID not found") )
var ( ErrDockerSocketConnectionFailed = errors.New("failed to connect to docker socket") ErrDockerHostConnectionFailed = errors.New("failed to connect to docker host") )
var DocoCDJobLabels = docoCDJobLabelNames
DocoCDJobLabels exposes the scheduler/job labels for consumers outside this package.
var DocoCDLabels = docoCdLabelNames{
Metadata: docoCDLabelNamesMetadata{
Manager: "cd.doco.metadata.manager",
Version: "cd.doco.metadata.version",
},
Deployment: docoCdLabelNamesDeployment{
Name: "cd.doco.deployment.name",
Timestamp: "cd.doco.deployment.timestamp",
ComposeHash: "cd.doco.deployment.compose.sha",
WorkingDir: "cd.doco.deployment.working_dir",
ConfigTarget: "cd.doco.deployment.config.target",
TargetRef: "cd.doco.deployment.target.ref",
CommitSHA: "cd.doco.deployment.target.sha",
Trigger: "cd.doco.deployment.trigger",
ConfigHash: "cd.doco.deployment.config.sha",
AutoDiscovery: "cd.doco.deployment.auto_discovery",
AutoDiscoveryConfig: "cd.doco.deployment.auto_discovery.config",
RecreateIgnore: "cd.doco.deployment.recreate.ignore",
RecreateIgnoreSignal: "cd.doco.deployment.recreate.ignore.signal",
},
Source: docoCdLabelNamesSource{
Type: "cd.doco.source",
Name: "cd.doco.source.name",
URL: "cd.doco.source.url",
},
}
DocoCDLabels contains the label key names used by DocoCD to identify deployed containers and their metadata.
var ErrIgnoreCfgInvalid = errors.New("ignore config is invalid")
var ErrNoSuchImage = errors.New("no such image") // Image does not exist
var ErrSwarmServiceAlreadyStopped = errors.New("swarm service is already scaled to 0 replicas")
ErrSwarmServiceAlreadyStopped indicates a replicated service was already scaled to 0 replicas, so there is nothing to stop or restore.
Functions ¶
func CheckDefaultComposeFiles ¶ added in v0.73.0
CheckDefaultComposeFiles checks if the default compose files are used and returns them if true.
func CheckMountPointWriteable ¶ added in v0.13.0
func CheckMountPointWriteable(mountPoint container.MountPoint) error
CheckMountPointWriteable checks if a mount point is writable by attempting to create a file in it.
func ComposeSignal ¶ added in v0.77.0
func ComposeSignal(ctx context.Context, dockerCli command.Cli, project *types.Project, signal []SignalService) error
ComposeSignal will send signal to service.
func ConnectToSocket ¶
ConnectToSocket connects to the docker socket.
func CreateDockerCliWithContext ¶ added in v0.100.0
func DecryptProjectFiles ¶ added in v0.74.0
DecryptProjectFiles decrypts all files used in the compose project that are encrypted using doco-cd's encryption mechanism. This includes configs, secrets, bind mounts, env files and build contexts. Since absolute file paths in types.Project are paths on the docker host, repoPath also needs to be the external path to the repository. We use the symlink inside the container to follow the external path to the correct internal path.
func DeployStack ¶ added in v0.14.0
func DeployStack( jobLog *slog.Logger, externalRepoPath string, ctx *context.Context, dockerCli command.Cli, payload *webhook.ParsedPayload, deployConfig *deploy.Config, detectedChanges []Change, needSignal []SignalService, latestCommit, appVersion string, globalSwarmConfigRetention int, globalSwarmSecretRetention int, swarmMode bool, ) error
DeployStack deploys the stack using the provided deployment configuration.
func DeploySwarmStack ¶ added in v0.31.0
func DeploySwarmStack(ctx context.Context, dockerCli command.Cli, cfg *composetypes.Config, opts *options.Deploy) error
DeploySwarmStack deploys a Docker Swarm stack using the provided project and deploy configuration.
func DestroyStack ¶ added in v0.14.0
func DestroyStack( jobLog *slog.Logger, ctx *context.Context, dockerCli *command.Cli, deployConfig *deploy.Config, swarmMode bool, ) error
DestroyStack destroys the stack using the provided deployment configuration.
func ExtractOciArtifactTag ¶ added in v0.89.0
ExtractOciArtifactTag extracts the tag from OCI artifact references (e.g., "main" from "ghcr.io/kimdre/doco-cd_tests:main"). For Git references (e.g., "refs/heads/main", "feat/app/this", "v1.0.0-rc.1", "my/app"), it returns them as-is. For OCI artifact references with explicit tags, it returns the tag portion after the colon. For OCI artifact references with digests, it extracts the digest hash. If the reference has no tag or digest, it returns the original reference as-is (treated as Git reference).
func GetContainerID ¶ added in v0.13.0
GetContainerID retrieves the container ID for a given service name.
func GetLabeledConfigs ¶ added in v0.31.0
func GetLabeledConfigs(ctx context.Context, cli client.APIClient, key, value string) (configs []swarm.Config, err error)
GetLabeledConfigs retrieves all configs with a specific label key and value.
func GetLabeledContainers ¶ added in v0.13.0
func GetLabeledContainers(ctx context.Context, cli client.APIClient, key, value string, all bool) (containers []container.Summary, err error)
GetLabeledContainers retrieves all containers with a specific label key and value.
func GetLabeledSecrets ¶ added in v0.31.0
func GetLabeledSecrets(ctx context.Context, cli client.APIClient, key, value string) (secrets []swarm.Secret, err error)
GetLabeledSecrets retrieves all secrets with a specific label key and value.
func GetLabeledServices ¶ added in v0.54.0
func GetLabeledServices(ctx context.Context, cli client.APIClient, swarmMode bool, key, value string) (map[Service]map[string]string, error)
GetLabeledServices retrieves all services with a specific label key and value, along with their labels.
func GetLabeledVolumes ¶ added in v0.31.0
func GetLabeledVolumes(ctx context.Context, cli client.APIClient, key, value string) (volumes []volume.Volume, err error)
GetLabeledVolumes retrieves all volumes with a specific label key and value.
func GetMountPointByDestination ¶ added in v0.13.0
func GetMountPointByDestination(cli client.APIClient, containerID, destination string) (container.MountPoint, error)
GetMountPointByDestination retrieves the mount point of a container volume/bind mount by its destination (mount point inside the container).
func GetPathsFromGitChangedFiles ¶ added in v0.77.0
func GetPathsFromGitChangedFiles(changedFiles []gitInternal.ChangedFile, basePath string) []string
func GetProjectContainers ¶ added in v0.55.0
func GetProjectContainers(ctx context.Context, dockerCli command.Cli, projectName string) ([]api.ContainerSummary, error)
GetProjectContainers returns the status of all services in the specified project.
func GetProjects ¶ added in v0.33.0
func GetProjects(ctx context.Context, dockerCli command.Cli, showDisabled bool) ([]api.Stack, error)
GetProjects returns a list of all projects.
func GetServiceLabels ¶ added in v0.54.0
func GetServiceLabels(ctx context.Context, cli client.APIClient, swarmMode bool, stackName string) (map[Service]Labels, error)
GetServiceLabels retrieves the Labels for each Service in a given stack.
func HasChangedBindMounts ¶ added in v0.29.0
func HasChangedBindMounts(repoPathExternal string, paths []string, project *types.Project, ignoreCfg projectIgnoreCfg) ([]string, []string)
HasChangedBindMounts checks if any files used in docker compose `volumes:` definitions with type `bind` have changed using the Git status.
func HasChangedBuildFiles ¶ added in v0.73.0
func HasChangedBuildFiles(repoPathExternal string, paths []string, project *types.Project, _ projectIgnoreCfg) ([]string, []string)
HasChangedBuildFiles checks if any files used as build context in docker compose `build:` definitions have changed using the Git status. This includes any file within the build context directory for each service. If a changed file is within a build context, it returns true.
func HasChangedConfigs ¶ added in v0.29.0
func HasChangedConfigs(repoPathExternal string, paths []string, project *types.Project, ignoreCfg projectIgnoreCfg) ([]string, []string)
HasChangedConfigs checks if any files used in docker compose `configs:` definitions have changed using the Git status.
func HasChangedEnvFiles ¶ added in v0.31.1
func HasChangedEnvFiles(repoPathExternal string, paths []string, project *types.Project, _ projectIgnoreCfg) ([]string, []string)
HasChangedEnvFiles checks if any files used in docker compose `env_file:` definitions have changed using the Git status.
func HasChangedSecrets ¶ added in v0.29.0
func HasChangedSecrets(repoPathExternal string, paths []string, project *types.Project, ignoreCfg projectIgnoreCfg) ([]string, []string)
HasChangedSecrets checks if any files used in docker compose `secrets:` definitions have changed using the Git status.
func HaveDeployedServiceImageDigestsChanged ¶ added in v0.82.2
func HaveDeployedServiceImageDigestsChanged(ctx context.Context, dockerCli command.Cli, swarmMode bool, project *types.Project, logger *slog.Logger) (bool, error)
HaveDeployedServiceImageDigestsChanged checks if any currently deployed service image digest differs from the registry digest of the configured image ref.
This compares:
- deployed service image digest (currently running/deployed)
- registry digest of configured service image reference (DistributionInspect)
Returns true as soon as one service differs.
func LoadCompose ¶
func LoadCompose(ctx context.Context, repoPath, workingDir, projectName string, composeFiles, envFiles, profiles []string, environment map[string]string, ) (*types.Project, error)
LoadCompose parses and loads Compose files as specified by the Docker Compose specification.
func LoadSwarmStack ¶ added in v0.73.0
func LoadSwarmStack(dockerCli command.Cli, project *types.Project, deployConfig *deploy.Config, externalWorkingDir string, ) (*composetypes.Config, *options.Deploy, error)
LoadSwarmStack loads a Docker Swarm stack using the provided project and deploy configuration.
func MarshalAutoDiscoveryConfig ¶ added in v0.89.0
func MarshalAutoDiscoveryConfig(cfg deployConfig.AutoDiscoveryConfig) string
MarshalAutoDiscoveryConfig serializes an AutoDiscoveryConfig to a single-line YAML flow-style string for use as a container label.
func NewHttpClient ¶
func NewJobScheduleParser ¶ added in v0.86.0
func ParseAutoDiscoveryConfig ¶ added in v0.89.0
func ParseAutoDiscoveryConfig(labelValue string) deployConfig.AutoDiscoveryConfig
ParseAutoDiscoveryConfig deserializes an AutoDiscoveryConfig from a YAML container label value. If the label is empty or invalid it returns a default config with Delete=true, RemoveVolumes=false, RemoveImages=true.
func ParseJobScheduleExpression ¶ added in v0.86.0
func ProjectFilesHaveChanges ¶ added in v0.31.1
func ProjectFilesHaveChanges(repoPathExternal string, changePaths []string, project *types.Project) ([]Change, IgnoredInfo, error)
ProjectFilesHaveChanges checks if any files related to the compose project have changed.
func ProjectHash ¶ added in v0.73.0
ProjectHash generates a SHA256 hash of the project configuration to be used for detecting changes in the project that may require a redeployment.
func PruneStackConfigs ¶ added in v0.31.0
func PruneStackConfigs(ctx context.Context, client dockerClient.APIClient, namespace string, keepOldRevisions int) error
PruneStackConfigs removes old revisions of configs in a Docker Swarm stack, keeping only the specified number of recent revisions.
func PruneStackSecrets ¶ added in v0.31.0
func PruneStackSecrets(ctx context.Context, client dockerClient.APIClient, namespace string, keepOldRevisions int) error
PruneStackSecrets removes old revisions of secrets in a Docker Swarm stack, keeping only the specified number of recent revisions.
func PullImages ¶ added in v0.55.0
PullImages pulls all images defined in the named compose project.
func RemoveLabeledVolumes ¶ added in v0.31.0
func RemoveProject ¶ added in v0.33.0
func RemoveProject(ctx context.Context, dockerCli command.Cli, projectName string, timeout time.Duration, removeVolumes, removeImages bool) error
RemoveProject removes the entire project including containers, networks, volumes and images.
func RemoveSwarmStack ¶ added in v0.31.0
RemoveSwarmStack removes a Docker Swarm stack using the provided deploy configuration.
func RerunJobService ¶ added in v0.62.0
RerunJobService attempts to retrigger a Swarm job service (`replicated-job` or `global-job`) by updating the service spec (bumping a dummy label), causing Swarm to create new job tasks.
Note: Swarm does not allow UpdateConfig / RollbackConfig on job-mode services, so we must strip those fields before calling ServiceUpdate.
func RestartContainer ¶ added in v0.86.0
func RestartContainerAndWait ¶ added in v0.104.0
func RestartContainerAndWait(ctx context.Context, apiClient client.APIClient, containerID string) error
RestartContainerAndWait starts or restarts the container (identically to RestartContainer) and then blocks until the container exits. This is the blocking variant of RestartContainer used when stop_services requires knowing when the job has finished.
For a stopped container the wait is subscribed BEFORE starting to avoid racing with a fast-exiting container. For a running container, ContainerRestart is called first (it blocks until the container is running again after the restart cycle), and then the wait is subscribed.
func RestartProject ¶ added in v0.33.0
func RestartProject(ctx context.Context, dockerCli command.Cli, projectName string, timeout time.Duration) error
RestartProject restarts all services in the specified project.
func RestartScheduledSwarmService ¶ added in v0.101.0
func RestartScheduledSwarmService(ctx context.Context, dockerCLI command.Cli, serviceName string) error
RestartScheduledSwarmService runs a restart-mode scheduled Swarm service on its schedule. Classic replicated scheduled services are deployed at 0 replicas so they do not run on deployment; this scales them up to their intended replica count (forcing a task re-run) when the schedule fires. Services that cannot be scaled to 0 (e.g. global) fall back to a ForceUpdate bump.
func RestartService ¶ added in v0.62.0
RestartService restarts long-running Swarm services by bumping ForceUpdate. For job-mode services (replicated-job/global-job), it returns ErrJobServiceRestartNotSupported.
func RunComposeOneOffFromServiceDefinition ¶ added in v0.107.0
func RunComposeOneOffFromServiceDefinition( ctx context.Context, dockerCli command.Cli, labels map[string]string, secretProvider *secretprovider.SecretProvider, ) error
func RunComposeScheduledContainer ¶ added in v0.107.0
func RunContainerOneOffFromExisting ¶ added in v0.88.0
func RunImagePruneJob ¶ added in v0.54.0
RunImagePruneJob runs a Docker Swarm global job to prune unused images on all nodes.
func RunImageRemoveJob ¶ added in v0.54.0
RunImageRemoveJob runs a Docker Swarm global job to remove specified images.
func RunSwarmJob ¶ added in v0.54.0
func RunSwarmJob(ctx context.Context, dockerCLI command.Cli, mode swarm.DeployMode, command []string, title string) error
RunSwarmJob runs a Docker Swarm job container with the specified mode and command. https://docs.docker.com/reference/cli/docker/service/create/#running-as-a-job
func RunSwarmOneOffFromService ¶ added in v0.88.0
func RunSwarmOneOffFromService(ctx context.Context, dockerCLI command.Cli, serviceName string, opts SwarmOneOffFromServiceOptions) error
RunSwarmOneOffFromService creates a temporary job service from an existing service spec and waits for completion.
func SetConfigHashPrefixes ¶ added in v0.31.0
func SetConfigHashPrefixes(stack *composetypes.Config, namespace string) error
SetConfigHashPrefixes generates hashes for the config definitions in the stack config and adds them to the config names as suffixes to trigger a redeployment when they change (Only works in Docker Swarm mode).
func SetSecretHashPrefixes ¶ added in v0.31.0
func SetSecretHashPrefixes(stack *composetypes.Config, namespace string) error
SetSecretHashPrefixes generates hashes for the secret definitions in the stack config and adds them to the secret names as suffixes to trigger a redeployment when they change (Only works in Docker Swarm mode).
func SourceTypeLabelValue ¶ added in v0.89.0
SourceTypeLabelValue resolves a stable label value ("git" or "oci") from a primary source, with a fallback (e.g. deploy config source) when the primary is empty or unknown.
func StartProject ¶ added in v0.33.0
func StartProject(ctx context.Context, dockerCli command.Cli, projectName string, timeout time.Duration) error
StartProject starts all services in the specified project.
func StartProjectServices ¶ added in v0.104.0
func StartProjectServices(ctx context.Context, dockerCli command.Cli, projectName string, services []string) error
StartProjectServices starts specific named services within a compose project. Services are identified by their service name as declared in the compose file (the map key under `services:`), not by container_name.
Note: the compose Start API ignores StartOptions.Services, so containers are looked up directly by the com.docker.compose.project and com.docker.compose.service labels and started individually.
This is best-effort: if starting one container fails, the remaining containers are still attempted, and all failures are aggregated into the returned error.
func StartSwarmService ¶ added in v0.104.0
func StartSwarmService(ctx context.Context, dockerCLI command.Cli, serviceName string, replicas uint64) error
StartSwarmService restores a previously stopped swarm service to the given replica count. It is the counterpart to StopSwarmService and is typically called in a deferred function to guarantee the service is restarted even when the scheduled job fails.
A replicas value of 0 means StopSwarmService never actually stopped the service (global-mode, or already scaled to 0), so there is nothing to restore.
The serviceName must be the full swarm-scoped name (e.g. "mystack_myservice").
func StopProject ¶ added in v0.33.0
func StopProject(ctx context.Context, dockerCli command.Cli, projectName string, timeout time.Duration) error
StopProject stops all services in the specified project.
func StopProjectServices ¶ added in v0.104.0
func StopProjectServices(ctx context.Context, dockerCli command.Cli, projectName string, services []string, timeout time.Duration) error
StopProjectServices stops specific named services within a compose project. Services are identified by their service name as declared in the compose file (the map key under `services:`), not by container_name.
Containers are stopped directly via the Docker API (instead of compose Stop with a services filter) to ensure only explicitly targeted services are affected, without implicit dependency traversal.
This is best-effort: if stopping one container fails, the remaining containers are still attempted, and all failures are aggregated into the returned error.
func StopSwarmService ¶ added in v0.104.0
func StopSwarmService(ctx context.Context, dockerCLI command.Cli, serviceName string, timeout time.Duration) (originalReplicas uint64, err error)
StopSwarmService temporarily stops a swarm service by scaling it to 0 replicas and waiting until its tasks have actually terminated. It returns the original replica count so the caller can restore it later via StartSwarmService.
Waiting matters for the primary use case of this feature (consistent cold backups): ServiceUpdate only records the intent to scale down, so without waiting the scheduled job would start while the target's containers are still shutting down and flushing to disk.
Global-mode services cannot be scaled to 0; the function returns (0, ErrGlobalSwarmServiceNotScalable) so the caller can skip them gracefully. A replicated service that is already at 0 replicas returns (0, ErrSwarmServiceAlreadyStopped).
The serviceName must be the full swarm-scoped name (e.g. "mystack_myservice"). In the cd.doco.job.stop_services label, cross-stack services are expressed as "stack/service" and resolved to "stack_service" before calling this function.
func ValidateStopServicesSelfReference ¶ added in v0.104.0
func ValidateStopServicesSelfReference(project, service string, refs []StopServiceRef) error
ValidateStopServicesSelfReference returns an error if refs contains an entry that resolves to the job's own project/stack and service name, which would cause the scheduler to stop the job's own service right before running it.
This cannot be checked inside ParseJobScheduleLabels because it only has access to the raw label map: standalone/compose containers always carry com.docker.compose.project/com.docker.compose.service labels, but Swarm services deployed by doco-cd do not carry those labels on the task spec, so the job's own project/service identity must be resolved by the caller (which knows how to derive it for both compose and Swarm jobs) and passed in explicitly.
func VerifyDockerAPIAccess ¶ added in v0.58.0
VerifyDockerAPIAccess verifies access to the Docker API either via DOCKER_HOST or the default socket.
func VerifyDockerHostConnection ¶ added in v0.58.0
VerifyDockerHostConnection verifies the connection to the specified DOCKER_HOST.
func VerifySocketConnection ¶
func VerifySocketConnection() error
VerifySocketConnection verifies whether the application can connect to the docker socket.
func VerifySocketRead ¶
VerifySocketRead verifies whether the application can read from the docker socket.
func WaitForSwarmService ¶ added in v0.62.0
func WaitForSwarmService(ctx context.Context, t *testing.T, cli dockerClient.APIClient, serviceName string, timeout time.Duration) (swarmTypes.Service, error)
WaitForSwarmService waits until a swarm service exists (and optionally has published ports).
Types ¶
type ContainerExitError ¶ added in v0.101.0
ContainerExitError reports that a container finished with a non-zero exit code. Callers can use errors.As to recover the exit code without parsing error strings.
func (*ContainerExitError) Error ¶ added in v0.101.0
func (e *ContainerExitError) Error() string
type IgnoredInfo ¶ added in v0.77.0
type IgnoredInfo struct {
// Ignored services name
Ignored []string `json:"ignored"`
// Ignored services need to send signal
NeedSendSignal []SignalService `json:"need_signal"`
}
func (IgnoredInfo) IsEmpty ¶ added in v0.77.0
func (i IgnoredInfo) IsEmpty() bool
func (IgnoredInfo) IsNeedSignal ¶ added in v0.78.0
func (i IgnoredInfo) IsNeedSignal() bool
type JobExecutionMode ¶ added in v0.86.0
type JobExecutionMode string
const ( JobExecutionModeRestart JobExecutionMode = "restart" JobExecutionModeOneOff JobExecutionMode = "one_off" // JobExecutionModeOneShotDeprecated is the deprecated alias for JobExecutionModeOneOff. // // Deprecated: still accepted for backward compatibility but will log a warning // TODO: Remove in a future release. JobExecutionModeOneShotDeprecated JobExecutionMode = "one_shot" )
type JobNotifyOn ¶ added in v0.86.0
type JobNotifyOn string
const ( JobNotifyNone JobNotifyOn = "none" JobNotifySuccess JobNotifyOn = "success" JobNotifyFailure JobNotifyOn = "failure" JobNotifyAll JobNotifyOn = "all" )
type JobScheduleConfig ¶ added in v0.86.0
type JobScheduleConfig struct {
Enabled bool
Schedule string
SkipRunning bool
ExecutionMode JobExecutionMode
NotifyOn JobNotifyOn
SwarmReplicas uint64
StopServices []StopServiceRef
}
func ParseJobScheduleLabels ¶ added in v0.86.0
func (JobScheduleConfig) ShouldNotifyFailure ¶ added in v0.86.0
func (c JobScheduleConfig) ShouldNotifyFailure() bool
func (JobScheduleConfig) ShouldNotifySuccess ¶ added in v0.86.0
func (c JobScheduleConfig) ShouldNotifySuccess() bool
type Labels ¶ added in v0.54.0
func SwarmJobLabels ¶ added in v0.107.0
SwarmJobLabels returns the labels of a swarm service with the job configuration taken from the task template only.
Job configuration labels are authored by the user as service labels in the compose file and are therefore part of the task template, which is also where the deploy path reads them from. Honoring them from the service spec here would schedule services that are not set up as jobs during deployment.
Job runtime metadata (last/next run timestamps) is written by doco-cd itself to the service spec, so it is exempt from this rule.
func SwarmServiceLabels ¶ added in v0.107.0
SwarmServiceLabels returns the labels of a swarm service, merged from the task template and the service spec.
Deployment metadata is stored in the service spec labels, because labels in the task template are part of the service definition and changing them makes swarm recreate all tasks of the service on every deployment.
Stacks deployed by earlier versions carry the metadata in the container spec instead, so both label sets are merged, with the service spec taking precedence. Note that this only helps sites that read labels from an inspected service: server-side filtered listings (e.g. GetServicesByLabel) match service spec labels only, so legacy stacks stay invisible to them until they are redeployed once. The container spec fallback can be dropped in a future release, once stacks have been redeployed at least once.
type LatestServiceStatus ¶ added in v0.78.0
type LatestServiceStatus struct {
DeployedStatus map[Service]ServiceStatus
// contains filtered or unexported fields
}
func GetLatestDeployStatus ¶ added in v0.78.0
func GetLatestDeployStatus(ctx context.Context, client client.APIClient, swarmMode bool, cloneURL string, deployName string) (LatestServiceStatus, error)
GetLatestDeployStatus retrieves the deployed status for a given repository and deploy name.
func (LatestServiceStatus) GetDeploymentCommitSHA ¶ added in v0.83.0
func (l LatestServiceStatus) GetDeploymentCommitSHA() string
func (LatestServiceStatus) GetDeploymentComposeHash ¶ added in v0.83.0
func (l LatestServiceStatus) GetDeploymentComposeHash() string
type ServiceMismatch ¶ added in v0.78.0
type ServiceMismatch struct {
ServiceName string `json:"service_name"`
Reasons []ServiceMismatchReason `json:"reasons"`
}
func CheckServiceMismatch ¶ added in v0.78.0
func CheckServiceMismatch(swarmModeEnabled bool, deployed map[Service]ServiceStatus, services types.Services) []ServiceMismatch
CheckServiceMismatch checks if the deployed services match the services in the compose file. now only check replicas, swarm mode, missing and unnecessary services.
type ServiceMismatchReason ¶ added in v0.78.0
type ServiceStatus ¶ added in v0.78.0
type ServiceStatus struct {
// In non-Swarm mode:
// Labels may differ between containers within a service, but most of them should be identical for the same service,
// except for com.docker.compose.container-number, com.docker.compose.replace, and potentially others.
Labels Labels
// swarm deploy mode.
// Empty if not in swarm mode.
SwarmMode swarmInternal.DeployMode
// Non-swarm mode: number of running containers
// Swarm mode: number of service replicas
Replicas uint64
}
type SignalService ¶ added in v0.77.0
type StopServiceRef ¶ added in v0.104.0
type StopServiceRef struct {
Project string // empty = same project/stack as the job
Service string
}
StopServiceRef identifies a compose service (or swarm service) to be temporarily stopped before a scheduled job runs and restarted after it completes.
In standalone (compose) mode:
- Service is the compose service name as declared in the compose file (the map key under `services:`). It is always the service name, never the container_name.
- Project identifies the compose project. When empty, the job's own project is used.
In swarm mode:
- Service is the short service name as declared in the compose file.
- Project is the stack name. When empty, the job's own stack is used.
- The full swarm service name is resolved as "<project>_<service>".