gitlab--集成 jfrog artifactory 制品库

发布时间 2023-08-14 15:41:27作者: 邹邹很busy。

介绍

官网:https://www.jfrogchina.com/artifactory/features/

之前我们使用制品库的时候,是使用 gitlab 里的制品:https://www.cnblogs.com/zouzou-busy/p/16485401.html

当制品多的时候,就不太适合了,我们可以使用一些专门用来上传制品库的来保存制品

安装 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

还有制品仓库的账号和密码,这里我在 gitlabCI/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 的日志