Tuleap-敏捷管理实战
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),目录清晰。
-
程序安装
安装起来相对容易一些,参照官方文档就基本没什么问题,建议仔细阅读。
https://docs.tuleap.org/installation-guide/full-installation.html
安装后,能够正常打开访问即可。
-
插件安装
首先也是要参照官方文档,写的比较详细 :https://docs.tuleap.org/installation-guide/install-plugins.html
其次就是看我的文档,先看一下目前默认安装了哪些插件?
yum list 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 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这三项需要留意,避免后续踩坑。
-
配置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后,会这样显示。
Congratulations! 看到上述此消息后,Tuleap和Jenkins的集成配置顺利通关。
RestApi Usage
-
接口演示的SwaggerApi地址
https://172.17.162.164/api/explorer
-
任务卡片移动接口模拟测试
-
Step1: Tuleap生成本地访问Token
https://172.17.162.164/api/tokens
-
-
Step2: 移动任务卡片artifacts/20(携带Token),此操作会把任务卡片artifacts=20的项目移动到136的位置上,大概可理解为『Review』->『OnGoing』
https://172.17.162.164/api/artifacts/20
-
Step3: 系统演示
- 系统演示,调用Api接口前:
- 系统演示,调用Api接口后:
**What about the value? **
-
敏捷看板任务联动Jenkins,开发人员想要完成卡片任务的时候,先经过Jenkins自动编译构建,如果成功则进入评审阶段,如不成功,则自动回退到进行中。
-
Tuleap中的任务可以任意链接Jenkins的Job,实现在看板管理的任意阶段通过Jenkins触发某些项目代码的构建、测试、部署等操作。
-
测试人员可提前编写测试脚本,通过Tuleap的Task 直接触发测试脚本运行,通过测试结果来自动判断该任务是否可以通过自动化测试。
-
To be continue …
推荐阅读
-
.NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程
-
【C++并发实战】(二)线程管理
-
Django企业开发实战-学员管理系统
-
Spring实战之使用XML方式管理声明式事务操作示例
-
Java学习小型案例实战模拟---播放器管理实战
-
PHP实战 新闻管理系统 使用到了bootstrap框架
-
HTML5实战与剖析之焦点管理(activeElement和hasFocus)
-
Spring Boot+Spring Cloud+Vue+Element项目实战 手把手教你开发权限管理系统 徐丽健著 清华大学出版社
-
Java 实战范例之进销存管理系统的实现
-
java+mysql实现图书馆管理系统实战