
# 配置流水线构建任务
- 场景一：使用Jenkins构建生成的是软件包，如Jar包，就使用脚本中的软件包部署场景，软件包部署会将构建出来的软件包上传到OBS桶中并升级CAE组件。
- 场景二：使用Jenkins构建生成的是镜像包，就使用脚本中的镜像部署场景，镜像部署会将构建出来的镜像包上传到SWR镜像仓库中并升级CAE组件。
本章节以[配置流水线脚本]中的实例为Jar包的场景进行说明。
 #### 创建Gitlab凭证
使用具有Gitlab代码仓库权限的账号密码在Jenkins中创建凭证，用于拉取Gitlab代码。
1. 在浏览器地址栏输入http://{安装Jekins的Linux虚拟机IP}:8080，登录Jenkins。
2. 选择"系统管理 \> 系统配置"，在配置中选择"Gitlab"。 
   图1进入Gitlab配置   
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001387229086.png "点击放大")
   
   
3. 单击"Credentials"下方的"添加"，选择"Jenkins"。 
   图2选择凭据提供者   
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001438109733.png "点击放大")
   
   
4. 配置Gitlab账号密码，单击"添加"，保存配置。
5. 选择"系统管理 \> Manage Credentials"，查看配置的凭据。 
   唯一标识在[配置流水线脚本]中会用到。
   图3管理凭据   
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001387390998.png "点击放大")
   图4查看凭据   
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001835341841.png "点击放大")
   
   
 
#### 创建流水线任务
1. 在浏览器地址栏输入http://{安装Jekins的Linux虚拟机IP}:8080，登录Jenkins。
2. 单击"新建任务"。 
   图5新建任务   
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001437873545.png "点击放大")
   
   
3. 输入任务名称，本示例使用：test-demo，选择"流水线"，单击"确定"。
 
#### 配置构建触发器
这里介绍两种构建方式：
1. 在Jenkins中手动触发构建，手动单击任务右边的"立即构建"从而触发流水线任务。
2. 通过Gitlab提交代码后自动触发Jenkins构建，这种方式同时支持手动触发构建。
此处以第二种方式为例。
1. 配置Jenkins构建触发器。
   
   1. 勾选"Build when a change is pushed to GitLab"，保存图示中的GitLab webhook URL（配置Gitlab webhook时需使用），然后单击右下角"高级"。
      图6获取GitLab webhook URL   
      ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001387268864.png "点击放大") 
   
   2. 选择"Filter branches by regex "，配置指定分支变更后触发构建任务，示例中的分支名称为main，单击右下角"Generate"生成Secret token并保存，在配置Gitlab webhook时需使用。
      图7获取Secret token   
      ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001387743972.png "点击放大") 
   
   
   
   
2. 配置Gitlab webhook 
   1. 登录Gitlab，进入代码仓库，示例中的仓库名称是"test-demo"。
   
   2. 选择settings中的"Webhooks"，URL和Secret token填写[1]获取到的GitLab webhook URL和Secret token。
      图8webhooks配置   
      ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001387746692.png "点击放大") 
   
   3. 取消勾选SSL verification的"Enable SSL verification"，单击"Add webhook"。
      图9完成webhook配置   
      ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001387747720.png "点击放大") 
   
   
   
   
 
 #### 配置流水线脚本
流水线脚本是构建时运行的构建命令，脚本参数说明见[表1]。
 表1流水线脚本参数说明 
| **参数**            | **是否必须** | **参数类型** | **描述**                                                                                                                                         |
|:---|:---|:---|:---|
| git_url           | 是        | String   | Gitlab代码仓库地址。                                                                                                                                  |
| credentials_id    | 是        | String   | 使用账号密码配置的Gitlab凭据id，参考[创建Gitlab凭证]。                                                                         |
| branch_name       | 是        | String   | Gitlab代码仓库分支名称。                                                                                                                                |
| maven             | 是        | String   | maven安装的可执行文件路径，示例：/root/app/maven/apache-maven-3.8.6/bin/mvn。                                                                                 |
| deploy_shell      | 是        | String   | deploy.sh脚本在Jenkins所在虚拟机上存放的路径，示例：/root/jar/deploy.sh，内容请参见[deploy.sh脚本说明](https://support.huaweicloud.com/bestpractice-cae/cae_05_0016.html)。 |
| build_target_name | 是        | String   | 构建产物名称：软件包名称或镜像名称:版本号，通过执行脚本时传入该参数，软件包部署场景为软件包名称，镜像部署场景为构建出来的镜像名称:版本号。                                                                         |
   
1. 完成"构建触发器"配置之后，在"流水线"页签，在下拉框选择"Pipeline script"。 
   图10流水线配置   
   ![](https://support.huaweicloud.com/bestpractice-cae/zh-cn_image_0000001667943634.png "点击放大")
   
   
2. 配置流水线脚本，示例中使用的是构建jar包场景，脚本如下： 
   ```
   node {
       // 定义代码仓地址
       def git_url = 'http://100.**.**.207:8090/test/test-demo.git'
       // Gitlab凭据id
       def credentials_id = '133b7c9a-eb6a-4484-84b3-c3509ed63df8'
       // git代码仓库分支名称
       def branch_name = 'main'
       // maven安装的可执行文件路径
       def maven = '/root/app/maven/apache-maven-3.8.6/bin/mvn'
       // deploy.sh 脚本存放路径，需要设置可执行权限
       def deploy_shell = '/root/jar/deploy.sh'
       // 构建产物名称：软件包名称或镜像名称，必须参数，通过执行脚本时传入该参数
       def build_target_name = "cae-demo-1.0-SNAPSHOT.jar"
    
       stage('Clone sources') {
           git branch: branch_name, credentialsId: credentials_id, url: git_url
       }
       stage('Build') {
           // 构建jar包
           sh "'$maven' clean package -Dmaven.test.failure.ignore=true"
       }
       stage('deploy') {
           // 执行脚本，使用构建产物升级CAE组件，超时时间5分钟
   sh "timeout 300s '$deploy_shell' '$build_target_name'"
       }
   }
   ```
   ![](https://support.huaweicloud.com/bestpractice-cae/public_sys-resources/note_3.0-zh-cn.png)
   - 流水线脚本运行时会调用deploy.sh，该脚本详细说明参见[deploy.sh脚本说明](https://support.huaweicloud.com/bestpractice-cae/cae_05_0016.html)。
   
   - 设置脚本文件deploy.sh为可执行文件。
    
   
   
 
