活动介绍
file-type

GitHub Action实现AWS ECR Docker镜像重标记

下载需积分: 50 | 853KB | 更新于2025-08-11 | 68 浏览量 | 0 下载量 举报 收藏
download 立即下载
### GitHub Action在AWS ECR中重新标记现有Docker映像知识点 #### 概述 GitHub Actions是一个持续集成和持续部署(CI/CD)平台,允许用户自动化软件开发生命周期中的流程,例如构建、测试和部署应用程序。本文档介绍了一种特定的GitHub Action工作流——`ecr-retag-action`,该工作流用于在AWS Elastic Container Registry (ECR)中重新标记已存在的Docker镜像。这通常用于将开发环境的镜像标签更改为测试或生产环境的标签。 #### Docker与AWS ECR Docker是一种流行的容器化平台,它允许开发者打包、分发和运行应用程序。而AWS ECR是Amazon Web Services提供的一个Docker容器注册服务,允许用户存储、管理和部署Docker镜像。 #### AWS ECR与GitHub Actions集成 要使用`ecr-retag-action`,你需要将AWS的访问密钥和密钥ID配置为GitHub Actions工作流中的环境变量。这些敏感信息应该通过GitHub Secrets进行管理,以保证安全。在GitHub Actions中配置AWS的访问凭证,是为了让Action能够在AWS ECR中进行操作,如检索和标记Docker镜像。 #### 工作流配置 在描述中提供的工作流配置示例,展示了如何在GitHub Actions中配置一个工作流,以便在每次`master`分支接收到新的`push`操作时触发。工作流由一系列步骤组成,其中核心步骤是重新标记Docker镜像。 工作流定义了一个名为`release-stage-and-prod`的任务,该任务将在最新的Ubuntu环境中运行。工作流的步骤包括重新标记操作,例如将`test/image:dev`标签的镜像重新标记为`test/image:staging`和`test/image:production`。 这个操作的逻辑是首先使用AWS的凭证来访问ECR,然后使用Docker命令对目标镜像进行重新标记。工作流文件中应当包含对AWS和Docker CLI的调用,这通常在GitHub Actions的步骤中通过运行shell命令完成。 #### 具体配置项说明 - `name`: 这是GitHub Actions工作流的名称,这里定义为`ci`。 - `env`: 在此部分中,我们定义了两个环境变量:`AWS_ACCESS_KEY_ID`和`AWS_SECRET_ACCESS_KEY`。这些变量通过GitHub Secrets获得,保证了AWS凭证的安全性。 - `on`: 指定触发工作流的事件,在这个例子中是`push`事件发生在`master`分支时。 - `jobs`: 定义了一个名为`release-stage-and-prod`的任务。 - `runs-on`: 指定任务运行的环境,在这个例子中是最新的Ubuntu。 - `steps`: 描述了工作流需要执行的步骤,第一个步骤使用`ecr-retag-action`重新标记镜像。 #### 重要概念和流程 1. **清单模式v2**: 在Docker中,清单模式v2是一种新的镜像清单格式,提供了更好的安全性、更好的镜像层管理功能。在这个工作流中,我们假设环境已经使用了清单模式v2。 2. **拉/推操作**: 根据描述,这里没有涉及到传统的拉取(pull)和推送(push)操作,因为工作流使用的是AWS ECR的能力,这暗示了操作可能在ECR内部进行,不需要在本地和ECR之间传输镜像数据。 3. **安全性**: 使用GitHub Secrets存储AWS的访问密钥和密钥ID可以防止凭证泄露。这对于任何自动化部署流程来说都是至关重要的安全措施。 4. **工作流触发条件**: 这个GitHub Action工作流仅在推送到`master`分支时触发,这表明它用于主分支代码的生产部署。 5. **环境变量**: 将AWS凭证作为环境变量提供,使得工作流脚本可以访问ECR,执行镜像的重新标记操作。 6. **Docker重新标记**: Docker重新标记是一个常见的操作,它允许用户将镜像从一个标签复制到另一个标签。这样做可以更新镜像版本、将镜像从开发环境转移到测试环境,或者为生产环境准备镜像。 #### 结语 通过上述分析,我们了解到`ecr-retag-action`工作流是GitHub Actions中针对AWS ECR进行Docker镜像管理的一个实用工具,它能有效地帮助开发者将开发中的Docker镜像打上测试或生产环境的标签,从而促进自动化部署和持续集成流程的实现。然而,考虑到操作涉及到AWS的访问凭证和Docker镜像的管理,因此在使用该GitHub Action时,务必注意安全和权限管理,避免潜在的安全风险。

相关推荐

filetype

; write=0.006 s, sync=0.001 s, total=0.024 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB 2025-07-25 11:25:49.627 UTC [1] LOG: database system is ready to accept connections 2025-07-25 11:25:49.628 UTC [11305] FATAL: could not open file "global/pg_filenode.map": No such file or directory 2025-07-25 11:25:49.628 UTC [11306] FATAL: could not open file "global/pg_filenode.map": No such file or directory 2025-07-25 11:25:49.629 UTC [1] LOG: autovacuum launcher process (PID 11305) exited with exit code 1 2025-07-25 11:25:49.629 UTC [1] LOG: terminating any other active server processes 2025-07-25 11:25:49.630 UTC [1] LOG: background worker "logical replication launcher" (PID 11306) exited with exit code 1 2025-07-25 11:25:49.631 UTC [1] LOG: all server processes terminated; reinitializing 2025-07-25 11:25:49.680 UTC [11307] LOG: database system was interrupted; last known up at 2025-07-25 11:25:49 UTC 2025-07-25 11:25:49.753 UTC [11307] LOG: database system was not properly shut down; automatic recovery in progress 2025-07-25 11:25:49.759 UTC [11307] LOG: invalid record length at 0/1478CF0: wanted 24, got 0 2025-07-25 11:25:49.759 UTC [11318] FATAL: the database system is in recovery mode 2025-07-25 11:25:49.759 UTC [11307] LOG: redo is not required 2025-07-25 11:25:49.765 UTC [11308] LOG: checkpoint starting: end-of-recovery immediate wait 2025-07-25 11:25:49.774 UTC [1] LOG: received smart shutdown request 2025-07-25 11:25:49.789 UTC [11308] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.008 s, sync=0.001 s, total=0.026 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB 2025-07-25 11:25:49.793 UTC [11308] LOG: shutting down 2025-07-25 11:25:49.794 UTC [11308] LOG: checkpoint starting: shutdown immediate 2025-07-25 11:25:49.810 UTC [11308] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.002 s, sync=0.001 s, total=0.017 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=0 kB 2025-07-25 11:25:49.826 UTC [1] LOG: database system is shut down [root@k8s-master1 harbor]# [root@k8s-master1 harbor]# kubectl logs harbor-core-75cd4f54b5-b5stj -n harbor --previous Appending internal tls trust CA to ca-bundle ... find: '/etc/harbor/ssl': No such file or directory Internal tls trust CA appending is Done. init global config instance failed. If you do not use this, just ignore it. open conf/app.conf: no such file or directory 2025-07-25T11:29:52Z [INFO] [/controller/artifact/annotation/parser.go:85]: the annotation parser to parser artifact annotation version v1alpha1 registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cncf.helm.config.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnab.manifest.v1 registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnai.model.manifest.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.index.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.list.v2+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.v1+prettyjws registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.config.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.container.image.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.goharbor.harbor.sbom.v1 registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.wasm.config.v1+json registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/native/adapter.go:36]: the factory for adapter docker-registry registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/aliacr/adapter.go:40]: the factory for adapter ali-acr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/awsecr/adapter.go:44]: the factory for adapter aws-ecr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/azurecr/adapter.go:29]: Factory for adapter azure-acr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/dockerhub/adapter.go:40]: Factory for adapter docker-hub registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/dtr/adapter.go:36]: the factory of dtr adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/githubcr/adapter.go:43]: the factory for adapter github-ghcr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/gitlab/adapter.go:33]: the factory for adapter gitlab registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/googlegcr/adapter.go:37]: the factory for adapter google-gcr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/huawei/huawei_adapter.go:40]: the factory of Huawei adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/jfrog/adapter.go:42]: the factory of jfrog artifactory adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/quay/adapter.go:53]: the factory of Quay adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/tencentcr/adapter.go:55]: the factory for adapter tencent-tcr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/volcenginecr/adapter.go:40]: the factory for adapter volcengine-cr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/harbor/adaper.go:31]: the factory for adapter harbor registered 2025-07-25T11:29:52Z [INFO] [/core/controllers/base.go:187]: Config path: /etc/core/app.conf 2025-07-25T11:29:52Z [INFO] [/core/main.go:148]: initializing cache ... 2025-07-25T11:29:52Z [INFO] [/core/main.go:167]: initializing configurations... 2025-07-25T11:29:52Z [INFO] [/lib/config/systemconfig.go:178]: key path: /etc/core/key 2025-07-25T11:29:52Z [INFO] [/lib/config/config.go:92]: init secret store 2025-07-25T11:29:52Z [INFO] [/core/main.go:169]: configurations initialization completed 2025-07-25T11:29:52Z [INFO] [/common/dao/base.go:67]: Registering database: type-PostgreSQL host-harbor-database port-5432 database-registry sslmode-"disable" 2025-07-25T11:29:52Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:29:54Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:29:56Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:29:58Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:00Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:02Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:04Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:06Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:08Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:10Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:12Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:14Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:16Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:18Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:20Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:22Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:24Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:26Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:28Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:30Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:32Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:34Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:36Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:38Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:40Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:42Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:44Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:46Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:48Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:50Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:52Z [FATAL] [/core/main.go:190]: failed to initialize database: failed to connect to tcp:harbor-database:5432 after 60 seconds [root@k8s-master1 harbor]# kubectl logs harbor-jobservice-6457b57477-7qgt2 -n harbor --previous Appending internal tls trust CA to ca-bundle ... find: '/etc/harbor/ssl': No such file or directory Internal tls trust CA appending is Done. 2025-07-25T11:30:54Z [INFO] [/controller/artifact/annotation/parser.go:85]: the annotation parser to parser artifact annotation version v1alpha1 registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cncf.helm.config.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnab.manifest.v1 registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnai.model.manifest.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.index.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.list.v2+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.v1+prettyjws registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.config.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.container.image.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.goharbor.harbor.sbom.v1 registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.wasm.config.v1+json registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/native/adapter.go:36]: the factory for adapter docker-registry registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/aliacr/adapter.go:40]: the factory for adapter ali-acr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/awsecr/adapter.go:44]: the factory for adapter aws-ecr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/azurecr/adapter.go:29]: Factory for adapter azure-acr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/dockerhub/adapter.go:40]: Factory for adapter docker-hub registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/dtr/adapter.go:36]: the factory of dtr adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/githubcr/adapter.go:43]: the factory for adapter github-ghcr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/gitlab/adapter.go:33]: the factory for adapter gitlab registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/googlegcr/adapter.go:37]: the factory for adapter google-gcr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/huawei/huawei_adapter.go:40]: the factory of Huawei adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/jfrog/adapter.go:42]: the factory of jfrog artifactory adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/quay/adapter.go:53]: the factory of Quay adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/tencentcr/adapter.go:55]: the factory for adapter tencent-tcr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/volcenginecr/adapter.go:40]: the factory for adapter volcengine-cr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/harbor/adaper.go:31]: the factory for adapter harbor registered 2025-07-25T11:30:54Z [INFO] [/pkg/config/rest/rest.go:47]: get configuration from url: http://harbor-core:80/api/v2.0/internalconfig 2025-07-25T11:30:54Z [ERROR] [/pkg/config/rest/rest.go:50]: Failed on load rest config err:Get "http://harbor-core:80/api/v2.0/internalconfig": dial tcp 10.5.232.220:80: connect: connection refused, url:http://harbor-core:80/api/v2.0/internalconfig panic: failed to load configuration, error: failed to load rest config goroutine 1 [running]: main.main() /harbor/src/jobservice/main.go:46 +0x3ae [root@k8s-master1 harbor]# 查看日子输出这些,我应该如何解决呢,目前正在用kubernetes集群搭建harbor仓库,想让root@k8s-master1 harbor]# kubectl get pod -n harbor NAME READY STATUS RESTARTS AGE harbor-core-75cd4f54b5-b5stj 0/1 CrashLoopBackOff 11 (118s ago) 26m harbor-database-0 0/1 Running 4 (3m16s ago) 26m harbor-jobservice-6457b57477-7qgt2 0/1 CrashLoopBackOff 13 (3m23s ago) 26m harbor-portal-5b6b5f7494-gcc8n 1/1 Running 1 (10m ago) 26m harbor-redis-0 1/1 Running 1 (10m ago) 26m harbor-registry-5fb967b497-d4r4r 2/2 Running 2 (10m ago) 26m harbor-trivy-0 1/1 Running 1 (10m ago) 26m全是running

日月龙腾
  • 粉丝: 46
上传资源 快速赚钱