介绍
官网
之前我们使用制品库的时候,是使用 gitlab 里的制品:
当制品多的时候,就不太适合了,我们可以使用一些专门用来上传制品库的来保存制品
安装 artifactory
使用 docker 安装
下载镜像
docker pull truecharts/artifactory-oss:7.41.13
启动镜像
docker run --name jfrog-oss -d -v data_artifactory:/var/opt/jfrog/artifactory -p 8081:8081 -p 8082:8082 -p 8046:8046 -p 8049:8049 -p 8070:8070 truecharts/artifactory-oss:7.41.13
启动完成之后,访问 8081
端口,看到下面页面则搭建成功
初始用户名和密码:admin/password
登录完成之后提示需要修改密码,我这里修改后的为:Zouzou123#
创建仓库
artifactory
搭建完成之后,接下来就要创建一个制品仓库
这样我们就创建好了一个仓库 devops
,也可以查看到
我们可以点击 Set Me Up 可以看到上传制品和下载制品的命令。package Type 选择我们创建时候选择的 Generic
上传制品
上面我们已经创建好了一个 devops
的仓库,接下来我们来上传制品,我们的仓库目录如下
app
目录下有两个文件,我们将这两个文件打包,模拟是构建产生的文件,然后需要做成制品保留起来
在 .gitlab-ci.yml 文件里,写入下面的内容
default:
tags:
- build # 这里使用的是 shell 执行器,如果使用 docker 执行器,需要确保容器里有 curl 命令
variables: # 定义制品仓库的变量
# 上传到制品库
ARTIFACTORY_URL: "http://10.6.215.31:8081/artifactory" # 制品服务器地址
ARTIFACTORY_NAME: "devops" # 制品仓库
TARGET_FILE_PATH: "$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_PIPELINE_ID" # 上传到制品仓库的路径
TARGET_ARTIFACT_NAME: "myapp.tar.gz" # 上传到制品仓库的名称,这里我和打包后的名称一样
ARTIFACT_PATH : 'app.tar.gz' # 需要上传的制品目录
stages:
- build
- upload_artifact
.deploy-artifact: # 模板,也可以单独抽出来放到其他文件里,使用 include 导入
stage: deploy-artifact
cache:
key: build-app # 缓存 build 下的 app.tar.gz 文件
paths:
- app.tar.gz
script:
- ls
- echo "upload"
- curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -T ${ARTIFACT_PATH} "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"
build:
stage: build
cache:
key: build-app # 缓存 key
paths:
- app.tar.gz # 需要缓存的文件
script:
- echo "my is build"
- tar -cvf app.tar.gz app/ # 这里模拟 app 目录是构建之类产生的目录,需要上传到制品库。然后缓存起来
- ls
upload_artifact:
stage: upload_artifact
extends: .deploy-artifact
里面涉及几个变量
- $CI_PROJECT_NAMESPACE:项目的 namespace
- $CI_PROJECT_NAME :项目名称
- $CI_COMMIT_REF_NAME:项目的分支名称
- $CI_COMMIT_SHORT_SHA:commit 提交 id,短的
- $CI_PIPELINE_ID:流水线的 id
还有制品仓库的账号和密码,这里我在 gitlab
的 CI/CD
里定义了
运行流水线查看制品是否上传成功。是根据我们上面定义的 TARGET_FILE_PATH
生成的目录
TARGET_FILE_PATH: "$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_PIPELINE_ID" # 上传到制品仓库的路径
查看日志
下载 myapp.tar.gz 文件,解压后可以看到是原来的文件
下载制品
可以在 jfrog artifactory 里看到下载的命令
更改 .gitlab-ci.yml 文件,加上下载制品的 job,如下
default:
tags:
- build # 这里使用的是 shell 执行器,如果使用 docker 执行器,需要确保容器里有 curl 命令
variables: # 定义制品仓库的变量
# 上传到制品库
ARTIFACTORY_URL: "http://10.6.215.31:8081/artifactory" # 制品服务器地址
ARTIFACTORY_NAME: "devops" # 制品仓库
TARGET_FILE_PATH: "$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_PIPELINE_ID" # 上传到制品仓库的路径
TARGET_ARTIFACT_NAME: "myapp.tar.gz" # 上传到制品仓库的名称,这里我和打包后的名称一样
ARTIFACT_PATH : 'app.tar.gz' # 需要上传的制品目录
stages:
- build
- upload_artifact
- download-artifact
.deploy-artifact: # 模板,也可以单独抽出来放到其他文件里,使用 include 导入
stage: deploy-artifact
cache:
key: build-app # 缓存 build 下的 app.tar.gz 文件
paths:
- app.tar.gz
script:
- ls
- echo "upload"
- curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -T ${ARTIFACT_PATH} "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"
.download-artifact: # 下载制品的模板
stage: download-artifact
script:
- ls
- curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -O "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"
- ls
build:
stage: build
cache:
key: build-app # 缓存 key
paths:
- app.tar.gz # 需要缓存的文件
script:
- echo "my is build"
- tar -cvf app.tar.gz app/ # 这里模拟 app 目录是构建之类产生的目录,需要上传到制品库。然后缓存起来
- ls
upload_artifact: # 上传制品
stage: upload_artifact
extends: .deploy-artifact
download-artifact: # 下载制品
stage: download-artifact
extends: .download-artifact
查看 download-artifact 的日志