Docs/CICD/使用release-it做私服版本控制.md

186 lines
No EOL
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 背景介绍
公司项目抽取出来的公共组件,用于项目的快速开发。但是因各项目使用的组件版本不同,需要做版本管理。
# 需求分析
## 功能需求
1、每次提交代码自动构建
2、自动发布到nexus私服
3、git repository中自动添加tagtag自动递增
4、自动生成changelog
## 工具选择
jenkins结合release-itjs编写的工具可以满足以上所有需求。
# 实现方案
## 1.开发支持
### 1-1.安装nodejs
```shell
# 下载nodejs
# 下载地址https://nodejs.org/dist/v21.2.0/node-v21.2.0-linux-x64.tar.xz
# 解压
tar -xvf node-v21.2.0-linux-x64.tar.xz
# 移动到指定目录
mv node-v21.2.0-linux-x64 /usr/local/
# 配置环境变量以linux系统为例
export NODE_HOME=/usr/local/node-v21.2.0-linux-x64/bin/node
export PATH=$PATH:$NODE_HOME
# 验证是否安装成功
node -v
```
### 1-2.初始化并安装release-it
```shell
# 在项目目录中初始化
npm init -y
# 全局安装release-it
npm install -g release-it
npm install -g @release-it/conventional-changelog
# 验证是否安装成功
release-it -V
```
### 1-3.创建配置文件
```shell
# 项目根目录下创建.release-it.json文件
# 参照https://raw.githubusercontent.com/release-it/release-it/main/config/release-it.json
cat > .release-it.json << EOF
{
"git": {
"requireBranch": false,
"commitMessage": "release: v${version} [ci-skip]"
},
"npm": {
"publish": false
},
"hooks": {
"after:bump": "echo 更新版本成功,版本: v${version}",
"after:git:release": "npm run publish",
"after:release": "echo Successfully released ${name} v${version} to ${repo.repository}."
},
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
}
}
EOF
# 修改package.json文件
cat > package.json << EOF
{
"name": "echo-plugins",
"group": "com.turingsyn.framework.plugin",
"version": "1.1.30",
"description": "plugins",
"main": "index.js",
"scripts": {
"test": "gradlew check",
"clean": "gradlew clean",
"publish": "sh gradlew clean build publish",
"release": "release-it"
},
"author": "turingsyc",
"license": "ISC",
"devDependencies": {
"@release-it/conventional-changelog": "^8.0.1",
"release-it": "^17.0.0"
},
"repository": {
"type": "git",
"url": "https://gitee.com/turningsyn/echo-libs.git"
}
}
EOF
# 添加nexus私服链接及认证信息
cat >> gradle.properties << EOF
# nexus私服链接
NEXUS_URL=http://nexus-server-svc:8081
# nexus私服认证信息
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin
EOF
# build.gradle添加如下配置
cat > build.gradle << EOF
allprojects {
repositories {
maven {
credentials {
username = NEXUS_USERNAME
password = NEXUS_PASSWORD
}
allowInsecureProtocol true
url "${NEXUS_URL}/repository/maven-public/"
}
}
}
EOF
```
***以下以gitee为例配置***
## 2.生成公私钥
使用如下命令生成公私钥。
```shell
# 一直回车即可生成无密码的公私钥。
# 公私钥一般生成在用户家目录下的.ssh目录私钥为id_ed25519公钥为id_ed25519.pub
# windows系统在C:\Users\用户名\.ssh\
ssh-keygen -t ed25519 -C "gitee"
```
## 3.gitee配置SSH公钥
移动鼠标至用户名,在下拉框中选择[设置][安全设置]下的[SSH公钥],自定义公钥名称,把公钥内容粘贴到[公钥]中,点击[确定]。
使用如下命令测试是否配置成功。
```shell
ssh -T git@gitee.com
```
## 4.安装配置jenkins
安装略。安装相应插件。因需要自动构建因此需要安装对应代码仓库的plugin。
如gitlab需要安装gitlab plugingitee需要安装gitee plugin等。
### 4-1.全局安全配置
在[系统管理][安全]配置下,选择[全局安全配置],在[Git Host Key Verification Configuration]下的[Host Key Verification Strategy]选择[Manually provided keys],在[Approved Host Keys]中填写.ssh/known_hosts文件的内容点击[保存]。
### 4-2.凭证管理
#### 4-2-1.添加源码管理凭证
在[全局凭证]中添加类型为[SSH Username with private key]的凭证凭证ID为[gitee]用户名为gitee的用户名私钥为.ssh/id_ed25519点击[创建]。
#### 4-2-2.添加用于release-it拉取/推送的凭证
在[全局凭证]中添加类型为[Secret file]的凭证凭证ID为[giteePrivate]file为.ssh/id_ed25519点击[创建]。
#### 4-2-3.添加gitee用户名凭证
在[全局凭证]中添加类型为[Secret text]的凭证凭证ID为[giteeUsername]value为gitee的用户名点击[创建]。
#### 4-2-4.添加gitee邮箱凭证
在[全局凭证]中添加类型为[Secret text]的凭证凭证ID为[giteeEmail]value为gitee的邮箱点击[创建]。
### 4-2.新建自由风格job
略。
### 4-3.配置job
本文档主要讲解业务需求配置,其他配置略。
#### 4-3-1.源码管理
使用ssh方式拉取代码。
在[源码管理][Git],点击[添加],选择[Git],在[Repository URL]中填写gitee的ssh仓库地址在[Credentials]中选择[gitee],点击[保存]。
#### 4-3-2.构建触发器
选中[Gitee webhook 触发构建][Gitee触发构建策略]选择[推送代码]。
[构建指令过滤]选择[[ci-skip] 指令跳过构建]。
[允许触发构建的分支]选择[根据分支名过滤][包含]填写[master](或对应的分支名)
[Gitee WebHook 密码],点击[生成]。
#### 4-3-3.gitee代码库配置webhook
在gitee仓库的[设置][Webhooks],点击[添加webhook],填写[URL]为jenkins的webhook地址[WebHook密码/签名密钥]选择[WebHook密码]密码为Jenkins生成的webhook密码[选择事件]为[push]、[tag push]、[pull request]、[激活]。
#### 4-3-4.构建环境
选择[Use secret test(s) or file(s)],添加以下变量。
1.添加[Secret file]类型,自定义命名,如[PRIVATEKEY],并指定凭证为[giteePrivate]
2.添加[Secret text]类型,自定义命名,如[USERNAME],并指定凭证为[giteeUsername]
3.添加[Secret text]类型,自定义命名,如[EMAIL],并指定凭证为[giteeEmail]
#### 4-3-5.构建步骤
选择[Execute shell],在[Command]中填写以下内容。
```shell
npm config set registry https://registry.npm.taobao.org && npm install
git branch && git checkout master
#sh gradlew clean build --no-daemon
mkdir ~/.ssh && chmod 700 ~/.ssh && cp ${PRIVATEKEY} ~/.ssh
ssh-keyscan -t ssh-ed25519 gitee.com > ~/.ssh/known_hosts
git config --global user.email "${EMAIL}"
git config --global user.name "${USERNAME}"
#git checkout .
npx release-it --ci
```