文档

使用Jenkins创建多语言应用的持续集成

更新时间:

本文介绍使用Jenkins通过镜像方式创建SAE Golang、Node.js、Python、PHP等多语言应用的持续集成。

前提条件

背景信息

您可以使用Jenkins构建SAE应用的持续集成方案。本文适用于对以下语言或工具有一定了解的开发人员。

工具

说明

Maven

Maven是一个项目管理和构建的自动化工具。

Jenkins

Jenkins是一个可扩展的持续集成引擎。

GitLab

GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。

步骤一:配置项目

  1. 修改Maven项目配置,填写Dockerfile路径以及仓库地址。具体操作,请参见通过Maven插件自动化部署应用
    配置文件示例如下:
    • 打包文件
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: Image
        build:
          docker:
             dockerfile: Dockerfile #指定Dockerfile。
             imageRepoAddress:      #镜像仓库地址。
             imageTag:              #镜像Tag。
             imageRepoUser:         #镜像仓库用户名。
             imageRepoPassword:     #镜像仓库密码。                                  
    • 部署文件
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: serverless
        target:
          appId:        #部署应用的ID。如果配置了该参数则无需配置namespaceId和appName。
          namespaceId:  #应用所属命名空间。如果您不清楚应用ID,可使用应用所属命名空间及应用名称进行部署。
          appName:      #应用名称。如果您不清楚应用ID,可使用应用名称及命名空间进行部署。                                      
  2. 在您的打包工程中添加pom.xml文件,以便添加插件依赖。
    pom.xml文件示例如下:
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>demo</groupId>
        <artifactId>sae-demo</artifactId>
        <version>1.0.0</version>
        <build>
            <plugins>
                        <plugin>
                            <groupId>com.alibaba.cloud</groupId>
                            <artifactId>toolkit-maven-plugin</artifactId>
                            <version>1.1.2</version>
                        </plugin>
    
            </plugins>
        </build>
    </project>
    说明 修改项目配置后,建议您在本地使用Maven构建验证配置是否正确。

步骤二:配置Jenkins

  1. 在Jenkins控制台的菜单栏中选择Manage Jenkins > Manage Plugins,安装Git和GitLab插件。
    说明
    • GIT Client Plugin和GIT Plugin插件可以帮助Jenkins拉取Git仓库中的代码。
    • Gitlab Hook Plugin插件可以帮助Jenkins在收到Gitlab发来的Hook后触发一次构建任务。
    安装和配置 Jenkins
  2. 在Jenkins控制台的菜单栏中选择Manage Jenkins > Global Tool Configuration,设置Maven版本名称并配置路径,单击保存
     Jenkins 控制台设置Maven
  3. 在Jenkins服务器上生成SSH RSA密钥对,并将公钥导入GitLab,实现Jenkins拉取GitLab代码时的自动认证。
    1. 在Jenkins服务器生成SSH RSA密钥对。具体信息,请参见GitLab文档
      EDAS在 Jenkins 服务器运行 Jenkins 软件的用户下,生成 SSH RSA 密钥对
    2. 进入GitLab首页,在菜单栏选择Settings > Deploy Keys ,并单击New Deploy Key ,导入在Jenkins服务器上创建的SSH RSA公钥。
      EDAS使用Jenkins在gitlab导公钥1

步骤三:创建Jenkins任务

  1. 在Jenkins首页左侧导航栏中单击新建Item,在创建任务界面输入任务名称,并选择Freestyle project,单击确定,配置任务信息。
    EDAS使用Jenkins集成之创建项目
  2. 单击源码管理,在源码管理页签中选择Git,并设置相关参数。
    • Repository URL:您的项目的Git协议地址。
    • Credentials:安全凭证,选择即可。
      重要 请确保您的SSH RSA公匙已添加到该Git项目所在的GitLab中,否则将会报错。
    EDAS使用Jenkins集成之源码管理
  3. 单击构建触发器,在构建触发器页签选中GitHub hook trigger for GITScm polling
  4. 单击构建环境,在构建环境页签选中Add timestamps to the Console Output,为控制台输出的信息添加时间戳。
  5. 单击构建,在构建页签单击增加构建步骤,在下拉列表中选择Invoke top-level Maven targets
  6. Invoke top-level Maven targets区域设置Maven VersionGoals。如果您想部署多模块工程,请参见(可选)创建多模块工程的Jenkins任务
    • Maven Version:单击该选项后面的下拉框,选择在全局工具配置里配置的Maven版本名称
    • Goals:输入mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml (如有其它参数,请根据实际情况输入)。
    SAE
    说明 Maven配置完成后,在步骤五:提交变更到GitLab中便可通过POP API方式触发应用部署。

步骤四:配置GitLab的Web Hook

  1. 在Gitlab首页右键单击GitLab工程,然后选择Setting > Web Hooks

  2. Web Hooks页面的URL区域中输入http://jenkins服务器地址:jenkins服务器监听端口/git/notifyCommit?url=本项目的git协议地址

    图中表示的Jenkins服务器地址为您的Jenkins服务器的Web访问地址如192.168.XX.XX:8080

    配置 Gitlab 的 Web Hook,实现自动构建
  3. 配置完成后,单击Test Hook,测试配置结果。

    配置 Gitlab 的 Web Hook结果

步骤五:提交变更到GitLab

如果上述步骤配置正确,提交后将会触发一次GitLab Hook。Jenkins在接收到该Hook后会构建您的Maven项目,并在构建结束时调用SAE POP API脚本触发部署。
说明 构建的Maven项目中配置了通过SAE POP API方式部署应用的脚本。

提交部署成功输出的日志信息(Build Number > 控制台输出)。

15:58:51 [INFO] Deploy application successfully!
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 [INFO] BUILD SUCCESS
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 [INFO] Total time: 24.330 s
15:58:51 [INFO] Finished at: 2018-12-25T15:58:51+08:00
15:58:51 [INFO] Final Memory: 23M/443M
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 Finished: SUCCESS
            

如果部署失败,您可以登录SAE控制台,查看此次部署任务的执行过程。具体步骤,请参见查看变更记录

(可选)创建多模块工程的Jenkins任务

如果您需要创建多模块工程的Jenkins任务,您可以参考以下内容设置。

创建多模块工程的Jenkins任务和步骤二:配置Jenkins的第5步基本相同,只需要修改调用顶层Maven目标。如果工程为多模块工程,想在Jenkins中部署子模块的话,那么需要在父模块中调用mvn clean install命令,然后在子模块中调用mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml命令。以Demo工程为例,工程结构如下。

sh-3.2# tree -L 1 carshop
carshop
├── detail
├── itemcenter
├── itemcenter-api
└── pom.xml            

其中,detail、itemcenter、itemcenter-api为子模块,如果您想部署itemcenter模块的话,需要在父工程中设置一个clean install构建目标,然后在itemcenter模块中设置clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml构建目标。

SAE
  • 本页导读 (1)
文档反馈