欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tuleap-敏捷管理实战

程序员文章站 2022-04-26 11:42:01
...

What it is?

  • Tuleap 核心系统是基于 LAMP 并且架构于 CentOS 之上。如今的开发栈是 AngularJS (v1)、REST 后端(PHP)、基于 NodeJS 的实时推送服务器。
  • Eclipse 基金会使用 Tuleap 取代了 Bugzilla,Tuleap 是一个独特的开源项目管理工具,目前发展势头很好,现在,每个月它会出一个大版本。
  • 基于 GPLv2 协议,它提供了一个集中化的平台,在这里,团队可以找到他们所需的所有工具,追踪他们软件项目的生命周期。他们可以找到项目管理(Scrum、看板、瀑布、混合等等)、源码控制(git 和 svn)和代码审查(pull 请求和 gerrit)、持续集成、问题跟踪、wiki 和文档等的支持

The Primary Target

本次预研的目标是什么?

  • 基本掌握Tuleap的使用方法流程。
  • 摸清程序架构和运行环境
  • 根据程序提供的Rest Api接口,分析出哪些接口能和我们目前Cicd的流程相结合?
  • 是否可以和Jenkins集成,如何集成?
  • 是否可以通过任务卡片的操作实现与Jenkins的交互,如果可以,是怎样的流程?
  • 是否可以把本次Tuleap的接口预研项落地到敏捷管理环节中?如何落地?

How to use ?

  • 架构概览

    基于LANP(老版本是Apache目前换成了Nginx),目录清晰。

Tuleap-敏捷管理实战

  • 程序安装

    安装起来相对容易一些,参照官方文档就基本没什么问题,建议仔细阅读。

    https://docs.tuleap.org/installation-guide/full-installation.html

    安装后,能够正常打开访问即可。

  • 插件安装

    首先也是要参照官方文档,写的比较详细 :https://docs.tuleap.org/installation-guide/install-plugins.html

    其次就是看我的文档,先看一下目前默认安装了哪些插件?

    yum list tuleap-*
    

    为了避免再次踩坑,咱直接晒出家底,这是目前我已经配置安装的插件,具体根据自己需求安装。

Tuleap-敏捷管理实战

安装后的更新插件命令

# On RHEL/CentOS 7
yum install tuleap-plugin-XXX(上述列表插件名)
/usr/share/tuleap/tools/utils/php73/run.php --module=nginx
systemctl reload nginx
systemctl restart tuleap-php-fpm

安装后要在插件管理处,启用一下

Tuleap-敏捷管理实战

Tuleap SSL Configuration

  • Nginx 主要配置参考,默认安装 /etc/nginx/conf.d/tuleap.conf

    upstream tuleap-apache {
        server 127.0.0.1:8080;
    }
    
    upstream tuleap-php-fpm {
        server 127.0.0.1:9000;
    }
    
    upstream tuleap-php-fpm-long-running-request {
        server 127.0.0.1:9002;
    }
    
    server {
            listen       443 ssl http2;
            listen       [::]:443 ssl http2;
            server_name  172.17.162.164;
    
            ssl_certificate /home/cert164.crt;
            ssl_certificate_key /home/cert164.key;
            
            ssl_session_timeout 1d;
            ssl_session_cache shared:MozSSL:10m;
            ssl_session_tickets off;
    
            # Tweak to your needs
            ssl_protocols TLSv1.2;
            ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
            ssl_prefer_server_ciphers off;
    
    
            # Tweak for file upload and SVN
            client_max_body_size 256M;
    
            include conf.d/tuleap.d/*.conf;
    }
    
    server {
        listen       80;
        listen       [::]:80;
        server_name  172.17.162.164;
    
        location / {
          return 301 https://$server_name:443$request_uri;
        }
    }
    
    

Jenkins Integration

  • 集成后我们可以实现哪些CICD功能?

    • 通过Tuleap中Git Repository的代码提交可以自动触发Jenkins的Job Building。

    • Tuleap -> Jenkins Job索引功能,可以在任务卡片上配置#jobname来实现触发。

    • 持续集成功能比较多,具体参考:https://docs.tuleap.org/user-guide/ci.html#continuous-integration-service-in-tuleap

  • 仔细阅读官方配置文档

https://docs.tuleap.org/user-guide/ci.html#jenkins-configuration

Tuleap与Jenkins集成必须要通过服务端建立SSL通信才可以,文档中的Attention这三项需要留意,避免后续踩坑。

Tuleap-敏捷管理实战

  • 配置Jenkins服务器的SSL

    如果你已经配置过了,那么请直接跳过,如果没配置过,可参考以下文档或者Tuleap的官方文档
    https://medium.com/@sportans300/nginx-reverse-proxy-with-https-466daa4da4fc 
    
  • Nginx SSL 主要配置参考

    server{
            listen 443 ssl default_server;
            server_name 172.17.162.163;
            ssl_certificate      /home/server.crt;
            ssl_certificate_key  /home/server.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_protocols TLSv1.2;
            ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
            ssl_prefer_server_ciphers off;
            
           
    
            # Nginx configuration specific to Jenkins
            # Note that regex takes precedence, so use of "^~" ensures earlier evaluation
            location ^~ /jenkins/ {
         
                # Convert inbound WAN requests for https://domain.tld/jenkins/ to 
                # local network requests for http://10.0.0.100:8080/jenkins/
                proxy_pass https://127.0.0.1:1443/jenkins/;
                 
                # Rewrite HTTPS requests from WAN to HTTP requests on LAN
                proxy_redirect http:// https://;
         
                # The following settings from https://wiki.jenkins-ci.org/display/JENKINS/Running+Hudson+behind+Nginx
                sendfile off;
         
                proxy_set_header   Host             $host:$server_port;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                proxy_max_temp_file_size 0;
         
                # This is the maximum upload size
                client_max_body_size       10m;
                client_body_buffer_size    128k;
         
                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;
         
                proxy_temp_file_write_size 64k;
          
                # Required for new HTTP-based CLI
                proxy_http_version 1.1;
                proxy_request_buffering off;
                proxy_buffering off; # Required for HTTP-based CLI to work over SSL
          }
        }
    
  • Jenkins需要安装以下插件

    Tuleap-api (这个是依赖项)
    Tuleap Git Branch Source
    Tuleap Authentication
    
  • Tuleap服务器的SSL证书常规套路配置即可,需要注意的是,需要把证书的扩展信息SubjectAlternativeName中加入IP地址

    //查看jks证书命令
    keytool -v -list -keystore cert164.jks -alias cert164 -keypass 123456 -storepass 123456
    
    
    //回显信息
    Keystore type: jks
    Keystore provider: SUN
    
    Your keystore contains 1 entry
    
    Alias name: cert164
    Creation date: Aug 25, 2020
    此处省略10万字…
    
    Extensions:
    
    #1: ObjectId: 2.5.29.35 Criticality=false
    AuthorityKeyIdentifier [
    KeyIdentifier [
    0000: A5 80 CA 69 1C FE 33 34 9E 54 FA 2C 67 D9 E0 63 …i…34.T.,g…c
    0010: A4 90 51 06 …Q.
    ]
    ]
    
    #2: ObjectId: 2.5.29.19 Criticality=false
    BasicConstraints:[
    CA:true
    PathLen:2147483647
    ]
    
    #3: ObjectId: 2.5.29.17 Criticality=false
    SubjectAlternativeName [
    IPAddress: 172.17.162.164
    ]
    
    #4: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: A5 80 CA 69 1C FE 33 34 9E 54 FA 2C 67 D9 E0 63 …i…34.T.,g…c
    0010: A4 90 51 06 …Q.
    ]
    ]
    
    
    
    重点看这块儿,携带扩展信息中需要配置IP字段~
    SubjectAlternativeName [
      IPAddress: 172.17.162.164
    ]
    
    
  • 配置好crt和jks证书后,携带Tuleap服务器生成的jks证书重新启动Jenkins

    nohup java -jar jenkins.war \
         --httpPort=-1 \
         --httpsPort=1443 \
         --httpsKeyStore=/home/cert164.jks \
         --httpsKeyStorePassword=123456 \
         --prefix=/jenkins \
          > /home/server.log 2>&1 & 
               
    
  • 测试下Jenkins和Tuleap服务器之间的SSL双向交互是否OK

    openssl s_client -connect 172.17.162.164:443 
    curl -v https://172.17.162.164
    
    
  • 交互通了的话,使用上述curl -v命令会看到类似这样的证书和握手信息

    ---
    SSL handshake has read 1435 bytes and written 425 bytes
    Verification: OK
    ---
    New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : ECDHE-RSA-AES256-GCM-SHA384
        Session-ID: 3329E99031C29822CDDA223E775C9EF2E5F7B99418B3333A98458D11277797AD
        Session-ID-ctx: 
        Master-Key: 0D677D6F809D0DF9F1E70FBB2191794A63072A79A6314415643ED4254BEC92110029FFF82B6A8ED905E7D1E079E1EDF7
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        Start Time: 1598879871
        Timeout   : 7200 (sec)
        Verify return code: 0 (ok)
        Extended master secret: no
    ---
    read:errno=0
    [aaa@qq.com etc]# curl -v https://172.17.162.164
    * Rebuilt URL to: https://172.17.162.164/
    *   Trying 172.17.162.164...
    * TCP_NODELAY set
    * Connected to 172.17.162.164 (172.17.162.164) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none
    * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    * TLSv1.3 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (IN), TLS handshake, Server finished (14):
    * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
    * TLSv1.2 (OUT), TLS handshake, Finished (20):
    * TLSv1.2 (IN), TLS handshake, Finished (20):
    * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
    * ALPN, server accepted to use h2
    * Server certificate:
    *  subject: C=CN; ST=private; L=Tianjin; O=Tianjin; CN=172.17.162.164
    *  start date: Aug 25 13:38:09 2020 GMT
    *  expire date: Aug 25 13:38:09 2022 GMT
    *  subjectAltName: host "172.17.162.164" matched cert's IP address!
    *  issuer: C=CN; ST=private; L=Tianjin; O=Tianjin; CN=172.17.162.164
    *  SSL certificate verify ok.
    
    
    
  • 正常集成后,Jenkins插件中直接配置Tuleap的Url后,会这样显示。

Tuleap-敏捷管理实战

Congratulations! 看到上述此消息后,Tuleap和Jenkins的集成配置顺利通关。

RestApi Usage

  • 接口演示的SwaggerApi地址

    https://172.17.162.164/api/explorer
    
    
  • 任务卡片移动接口模拟测试

    • Step1: Tuleap生成本地访问Token

      https://172.17.162.164/api/tokens
      
      

Tuleap-敏捷管理实战

  • Step2: 移动任务卡片artifacts/20(携带Token),此操作会把任务卡片artifacts=20的项目移动到136的位置上,大概可理解为『Review』->『OnGoing』

    https://172.17.162.164/api/artifacts/20
    
    

Tuleap-敏捷管理实战

Tuleap-敏捷管理实战

  • Step3: 系统演示

    • 系统演示,调用Api接口前:

Tuleap-敏捷管理实战

- 系统演示,调用Api接口后:

Tuleap-敏捷管理实战

**What about the value? **

  • 敏捷看板任务联动Jenkins,开发人员想要完成卡片任务的时候,先经过Jenkins自动编译构建,如果成功则进入评审阶段,如不成功,则自动回退到进行中。

  • Tuleap中的任务可以任意链接Jenkins的Job,实现在看板管理的任意阶段通过Jenkins触发某些项目代码的构建、测试、部署等操作。

  • 测试人员可提前编写测试脚本,通过Tuleap的Task 直接触发测试脚本运行,通过测试结果来自动判断该任务是否可以通过自动化测试。

  • To be continue …