将制品上传到第三方仓库
以Nexus为例, 通过调用NexusAPI完成制品的上传。
.pushartifact:
tags:
- build
stage: pushartifact
script:
|-
if [[ ${PROJECT_TYPE} == "java" ]];then
pkgName=`ls target/ | grep -e "jar$"`
cd target/
mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=mylocalrepo" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "raw.directory=/${CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \
-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \
-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:admin123
else
echo "PROJECT_TYPE ERROR [java]"
fi
上传到GitLab内置仓库
GitLab仓库可以充当各种常见的包管理器的私有或公共仓库中心。可以发布和共享包,这些包可以很容易地作为下游项目的依赖项使用。
轻松实现代码基线和流水线构建与制品关联。
目前支持的仓库类型:
实例:使用GitLab Generic 类型仓库
仓库认证
用户个人Token(注意不会关联到Pipeline);
CI流水线作业的Token (${CI_JOB_TOKEN});
发布Token (项目设置中创建DeployToken);
上传包
PUT /projects/:id/packages/generic/:package_name/:package_version/:file_name?status=:status
参数:
id 项目的ID (Integer/string 必填);
package_name 包名称(String 必填);
package_version 包版本(String 必填);
file_name 文件名 (String 必填);
status 包状态,可选值[default/hidden] 默认是在UI展示(String 可选);
代码示例:
curl --header "PRIVATE-TOKEN: apF1R9s9JJBYJzLF5mYd" \
--upload-file sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar \
"http://192.168.1.200/api/v4/projects/33/packages/generic/devops03-maven-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar?status=default"
响应示例:
{
"message":"201 Created"
}
当发布与现有包具有相同名称和版本的包时,新的包文件将添加到现有包中。仍然可以使用 UI 或 API 来访问和查看现有包的历史旧文件。
下载包
GET /projects/:id/packages/generic/:package_name/:package_version/:file_name
参数:
id 项目的ID (Integer/string 必填);
package_name 包名称(String 必填);
package_version 包版本(String 必填);
file_name 文件名 (String 必填);
代码示例:
curl --header "PRIVATE-TOKEN: <your_access_token>" \
"http://192.168.1.200/api/v4/projects/33/packages/generic/devops03-maven-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar"
GitLabCI/CD 示例:
.pushartforgitlab:
tags:
- build
stage: pushartifact
script:
|-
if [[ ${PROJECT_TYPE} == "java" ]];then
newPkgName=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
pkgName=`ls target/ | grep -e "jar$"`
cd target/
mv ${pkgName} ${newPkgName}
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
--upload-file ${newPkgName} \
"http://192.168.1.200/api/v4/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/${newPkgName}?status=default"
else
echo "PROJECT_TYPE ERROR [java]"
fi
本内容来自于《第③期DevOps实践训练营》, 了解详情可以点击 2021 如何成为一名优秀的DevOps工程师?|第三期训练营报名中欢迎投稿,微信:devopsvip。
关于我们
DevOps云学堂,专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!
更多DevOps实践,请关注「DevOps云学堂」
点击阅读原文,进入企业DevOps学堂