本文档将为您介绍如何通过流水线Flow,实现代码源托管到镜像构建,并推送到自定义的私有镜像仓库。
前提条件
-
请确保安装配置完成自定义的镜像仓库(ACR/Harbor),关于使用自定义ACR镜像仓库,具体操作请参阅使用个人版实例推送拉取镜像。
-
代码托管仓库需要包含构建镜像的Dockerfile指令文件。
步骤一:新建流水线
-
登录流水线Flow服务控制台,在控制台界面,请单击右侧上方新建流水线按钮。
-
在弹出窗口中,根据需求选择合适的流水线模板,本文选择使用了空模板,单击创建按钮。
步骤二:流水线任务>代码源
-
选择新建的目标流水线,进入到流水线任务节点的操作页面。
-
选择任务节点按钮添加流水线源,单击代码源,选择示例代码源,选择JAVA语言,单击添加按钮,完成代码源流水线任务配置,代码仓库默认为
https://atomgit.com/flow-example/spring-boot.git,默认分支为master。说明流水线源提供了多种代码源的托管仓库平台,如:自建GitLab、Codeup、GitHub等,可以根据您的需求选择。
重要-
构建镜像Dockerfile指令文件,有关内容请参阅在Dockerfile中使用构建打包镜像并运行。
-
如果您选择的非示例代码源,请确保您的代码仓库已创建配置了构建镜像的Dockerfile指令文件。
-
步骤三:流水线任务>镜像构建并推送Harbor
选择构建环境,配置方式。
指定容器环境/默认VM环境
-
选择任务节点新的任务,选择导航菜单镜像构建,添加镜像构建推送任务。如果已有空白任务,则在任务步骤中,单独添加两个步骤
Docker Login和镜像构建并推送。 -
配置基本参数。
参数
说明
任务名称
您可自定义任务名称,一般保持默认即可。
构建集群
支持以下构建集群:
构建环境
支持以下构建环境:
-
指定容器环境(云效默认构建集群):流水线 Flow在构建机器上启动指定容器,在单容器环境进行构建。云效提供官方常用镜像供选择使用、您也可以指定自己的镜像作为运行环境。
-
默认VM环境(仅私有构建集群支持):须选择指定构建节点。流水线 Flow会直接在构建机器上安装环境并执行任务,为了提升任务构建速度建议提前在构建机器上安装好相应SDK和环境。
-
默认环境(云效默认构建集群/私有构建集群):流水线 Flow会根据任务类型默认使用不同的容器镜像,预装相应的SDK和环境,默认镜像不可修改(Deprecated)。
说明任务执行期间,流水线任务构建环境分配给用户使用,构建环境的使用权归属用户,任务执行脚本由用户自定义。
下载流水线源
开启下载流水线源后,您配置的源文件将会被下载至对应的工作目录下。支持以下三种方式:
-
下载全部流水线源
-
不下载流水线源
-
下载部分流水线源
-
-
在任务步骤中,单击添加步骤,添加Java项目构建环境,
安装 Java、配置 MavenSettings 文件和执行命令三个步骤。在任务步骤中,前三个步骤为安装 Java、配置 MavenSettings 文件和执行命令。展开执行命令步骤,在命令编辑区输入构建命令:mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip。 -
在任务步骤配置项里,展开Docker Login和镜像构建并推送任务,完成以下任务参数设置。
参数
说明
步骤名称
您可以自定义步骤名称,本文保持默认名称。
镜像仓库地址
设置Registry自定义镜像仓库地址。
选择服务连接
单击添加服务连接,选择或者新建您的Harbor私有镜像仓库账号和密码,将目标私有镜像仓库服务授权于流水线 Flow服务访问。
镜像地址
填写镜像构建并推送的地址。
说明-
镜像地址格式,例如:172.xx.xx.133/library/test:latest,表示IP地址或者域名+项目名称+标签。
-
镜像地址支持固定Repository,例如registry.cn-hangzhou.aliyuncs.com/ns/demo:1.0,或者带动态参数例如registry.cn-hangzhou.aliyuncs.com/ns/demo:${DATETIME}。
Dockerfile路径
本文示例代码源仓库中Dockerfile文件位于根目录下,保持默认路径即可。
说明-
如果非本文示例代码源,请正确设置您的Dockerfile路径地址。
-
Dockerfile路径,默认路径是相对于代码库根目录所在路径,如META/config/Dockerfile或Dockerfile。
镜像缓存
指定镜像缓存方式,支持 local 本地缓存(仅私有构建集群生效)、remote 远端缓存、no-cache 不使用缓存三种方式:
-
本地缓存:仅在私有构建集群下生效,使用构建机本地缓存。
-
远端缓存:使用
--cache-from、--cache-to指定远端缓存镜像地址。不填则默认使用<镜像 repo 地址>:flow-docker-build-cache作为缓存地址。 -
不使用缓存:公共构建集群无本地缓存,不使用缓存;私有构建集群使用
--no-cache指定不使用缓存,每次构建重新拉取镜像层。
更多构建参数
支持指定更多构建参数定制构建行为,如
--build-arg arg1=value1指定构建参数;--platform linux/amd64,linux/arm64指定构建架构。 -
默认环境
-
选择任务节点空任务,如果没有则可以单击新的任务添加一个空白任务,勾选默认环境。在流水线任务配置的右侧面板中,将构建集群设置为云效北京构建集群,构建环境选择默认环境,下载流水线源选择下载全部流水线源。
-
在任务步骤中,添加任务步骤镜像构建并推送至自定义镜像仓库。在任务步骤区域单击添加步骤,从下拉菜单中选择镜像构建并推送至自定义镜像仓库。
-
配置镜像构建并推送至自定义镜像仓库参数。
参数
说明
步骤名称
您可以自定义步骤名称,本文保持默认名称。
镜像仓库地址
设置您的自定义镜像仓库地址。
重要-
镜像仓库地址格式,例如:172.xx.xx.133/library/test:latest:表示IP地址或者域名+项目名称+标签。
-
镜像仓库地址支持固定Repository,例如registry.cn-hangzhou.aliyuncs.com/ns/demo:1.0,或者带动态参数例如registry.cn-hangzhou.aliyuncs.com/ns/demo:${DATETIME}。
选择凭据类型
根据需求选择,选择使用用户名/密码方式。
用户名
填写私有镜像仓库的登录用户名。
密码
填写私有镜像仓库的登录密码。
Dockerfile路径
本文示例代码源仓库中Dockerfile文件位于根目录下,保持默认路径即可。
说明-
如果非本文示例代码源,请正确设置您的Dockerfile路径地址。
-
Dockerfile路径,默认路径是相对于代码库根目录所在路径,如META/config/Dockerfile或Dockerfile。
说明关于自定义的镜像仓库,您可以使用阿里云ACR镜像仓库,也可以使用第三方的镜像仓库Harbor,本步骤使用的Harbor镜像仓库。
-
步骤四:运行并查看日志
-
在流水线Flow控制台界面我的流水线列表,单击目标流水线右侧
运行按钮,选择目标流水线查看流水线任务节点界面。 -
在构建镜像任务节点,单击日志查看到流水线任务步骤及日志。
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]-----------Dockerfile Content---------- 2024-12-06 11:03:49 [INFO] docker image is set to: registry.cn-hangzhou.aliyuncs.com/flow-image/java-flow-acr:2024-12-06-11-01-29 2024-12-06 11:03:49 [INFO] docker tag is set to: 2024-12-06-11-01-29 2024-12-06 11:03:49 [INFO] ready to execute: docker buildx build --progress=plain -t registry.cn-hangzhou.aliyuncs.com/flow-image/java-flow-acr:2024-12-06-11-01-29 -f /root/workspace/__flow_work/__flow_builds/88bf36d2-1994-4648-8ccd-467a6ae1e87c/workspace/spring_boot_QzkR/Dockerfile /root/workspace/__flow_work/__flow_builds/88bf36d2-1994-4648-8ccd-467a6ae1e87c/workspace/spring_boot_QzkR --push --cache-from registry.cn-hangzhou.aliyuncs.com/flow-image/java-flow-acr:flow-docker-build-cache --cache-to registry.cn-hangzhou.aliyuncs.com/flow-image/java-flow-acr:flow-docker-build-cache --platform linux/amd64,linux/arm64 2024-12-06 11:03:50 [INFO] #0 building with "flow-build-container" instance using docker-container driver 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #1 [internal] load build definition from Dockerfile 2024-12-06 11:03:50 [INFO] #1 transferring dockerfile: 252B done 2024-12-06 11:03:50 [INFO] #1 DONE 0.0s 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #2 [linux/arm64 internal] load metadata for registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine 2024-12-06 11:03:50 [INFO] #2 ... 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #3 [linux/amd64 internal] load metadata for registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine 2024-12-06 11:03:50 [INFO] #3 DONE 0.5s 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #4 [internal] load .dockerignore 2024-12-06 11:03:50 [INFO] #4 transferring context: 2B done 2024-12-06 11:03:50 [INFO] #4 DONE 0.0s 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #2 [linux/arm64 internal] load metadata for registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine 2024-12-06 11:03:50 [INFO] #2 DONE 0.6s 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #5 [internal] load build context 2024-12-06 11:03:50 [INFO] #5 DONE 0.0s 2024-12-06 11:03:50 [INFO] 2024-12-06 11:03:50 [INFO] #6 [linux/amd64 1/3] FROM registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine@sha256:3cfd41aa99e4894431389af78c5459845c4d13252b2557390b72207678890df2 2024-12-06 11:03:50 [INFO] #6 resolve registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine@sha256:3cfd41aa99e4894431389af78c5459845c4d13252b2557390b72207678890df2 done ...(后续构建日志省略)