Archive

Posts Tagged ‘jira’

用JIRA、CVS、XPlanner、WIKI来进行项目管理

February 6th, 2010 No comments

从版本管理的角度来考虑,最理想的发布方法就是把CVS中的代码拿下来, 打上一个tag, 编译并且测试一直到发布。这样的管理方式的确是很简单的,但事实上用户可不买帐的。这里讲的Issue就是前面JIRA系统中的一个issue。

JIRA

  一个非常出色的Issue跟踪系统,这里的Issue不单单是指BUG, 很多时候也可以是TASK, IMPROVEMENT, NEW FEATURE, 甚至是一个QUESTION。

  在多年前, 我曾经尝试使用过那个经典的的Bugzilla,但是一个项目作下来,大家都反映那个东西的界面实在是太粗糙,简直无法忍受而且报表功能也是在太弱。最后大家就讨论自己作一个BUG的跟踪系统,就在大家已经完成了设计文档准备编码的时候, 我们发现JIRA原来就是我们要找的东西,而且比我们要的更多。它内置一个可以配置的工作流引擎(osworkflow),一个快捷的全文检索功能(基予Apache Lucene).和一个可以配置的Dashboard(portlet),以及一个和CVS连接的引擎,通过这个连接,在一个Issue中直接可以看到修改的文件名称,如果配置了viewcvs的话,还直接直接定位到行,根据一个问题可以跟踪到代码的行,这正式我们梦寐一求的功能。 也正是这种特性,才使我们能够把一个个Issue当作发布和版本管理的一个单元。

CVS

  这个应该大家都知道。在系统开发过程中,一切的源代码和设计文档都应该进入版本管理系统来进行管理, 有的时候可能资源库可能会膨胀的很大, 但这个代价是值得的。

XPlanner

  在整个管理体系中,进度管理一直是一个?比较薄弱的环节,我也曾试过dotproject这样的管理软件,但由于dotproject管理的太过详细,填报起来太复杂,大家渐渐都失去了填报的热情。这个 XPlanner软件可就简单多了。指定了迭代,story,然后就可以填写进度了。由于这个软件也是OpenSource的,所以如果觉得不满意,修改起来也很方便,现在老林就对这个系统作了些改进,可以直接和JIRA系统连接起来,JIRA中建立issue后,可以在XPlaner中反映出来,连填写 story的时间都省去了, 然后在下班之前可以生成一个详细的报告,列出每个人在这一天内在自己负责的Issue在上的处理时间和进度。

WIKI

  在项目管理中,我们一直把它当作文档管理和Portlet系统来使用,它现在已经变成我们的小组的工作台,在WIKI中我们制定了包括系统开发设计规范在内的一切设计文档,以及数十个经常的HOWTO项目,例如如何配额一个标准的开发环境,如何使用CVS客户端,如何使用JIRA,以及自己的 JavaDoc, JSDoc等。 我们也可以通过Wiki来简单的整合系统,在Wiki中我们列出了所有开发环境和开发工具的入口,例如上面就放了进入JIRA,XPlanner以及我们各个Project的连接,甚至到 Apache中常用的Project的JavaDoc的连接,现在再也没有人去记录这些URL了,只要打开Wiki所有的资源都在面前了,并且由于wiki本身的开放性,所以每个团队的成员都是一个维护者,同时也是这个系统的受益者。在很多的团队中经常出现的情况是一个小子对某个技术特别在行,大家遇到这方面的问题都问他,在小的团队中, 面对面的交流通常是最快的交流方式,但是放到大的团队中,这个就不大可行了,那个小子迟早有一天会被问的烦到吐血为至,特别是他自己的工作也无法按时完工的时候。还是抽一个小时写出来,放到 wiki里面吧, 别问我, 自己去查Wiki。

基于ISSUE的发布管理

  从版本管理的角度来考虑,最理想的发布方法就是把CVS中的代码拿下来, 打上一个tag, 编译并且测试一直到发布。 这样的管理方式的确是很简单的,但事实上用户可不买帐的, 用户觉得在新的版本中某个新的功能他还不想要,这可能是他还没有整理好业务初始数据或者在实际的业务流程上或人员上没有做好准备, 上帝说了不要咱就不能把这个新功能发布。在这个情况下,基于Issue的发布管理是一个好的方案。

  这里讲的Issue就是前面JIRA系统中的一个issue。 通常每个Issue的完成都会伴随这一些代码的修改。 基于Issue的发布简单的来说就是把一组Issue变更的文件用patch的形式发布到正式的系统中。

  基于Issue发布的前提就是要在Issue和Source之间建立连接, 使发布人员清楚的知道每个Issue修改的源代码是什么。我们实践下来最简单的办法就是在提交source的时候必须加上JIRA编号, 没有JIRA编号代码是不能提交的。 这样有以下好处:

1)防止一些没有经验的程序员无意义的提交, 比如一个小子今天提交了一个java文件,明天发现这个变量命名有点不爽, 修改后就要提交,在这种情况下, 这个提交是没有意义的,如果测试组已经测试这个Issue, 是否测试组要重新测试? 为一个变量名称化这样的时间和冒险是可嫩的。小伙子还是在第一次提交的时候就把变量名想好了再提交。

2)程序员偷偷的修改代码,一个小伙子发现自己的已经Closed的Issue中有一个Bug, 便偷偷的修改代码。 这个当然也是不可能的,凡是提交到CVS中的代码就不是自己的了,那是大家的, 没有足够的理由想改当然没有那么容易。 先自己建立建立个Issue, 向Team leader报告, 然后再去修改代码.。

  • Share/Bookmark

jira实现创建问题的时候将问题自动分配给模块负责人component lead

February 4th, 2010 No comments

我以JIRA 3.12.1来说
1.首先在Project的管理界面,Add相应的Components,添加Components时指定其Component Lead为相应的开发组负责人。
2.添加了Components后,单击Components下方的Select,将Default Assignee指定为Component Lead。
3.在Field Configuration里,显示“模块”/“Components”这个字段,并定义为“必填”/“Required”
4.在该项目创建问题所使用的Screen里(通常是在Screen Scheme里),显示“模块”/“Components”,并告知创建者在创建时要单选,不要多选。因为选择多个模块时,可能会有多个负责人,但一个问题只能被分配给一个人。
5.在该项目创建问题所使用的Screen里(通常是在Screen Scheme里),若显示“开发者”/“Assignee”这个字段,则通知创建者在创建时不用选择开发者,默认为“自动”即可。若隐藏“开发者”这个字段,则系统就会把新创建的问题自动分配给相应的Component Lead.

转载请注明源自www.SCMLife.com,请保留版权. 本贴地址:http://bbs.scmlife.com/viewthread.php?tid=17636

  • Share/Bookmark

jira 试用license授权码

February 3rd, 2010 No comments
JIRA 3.*

mNmmqDVQBQhkfqNncKTPLJBnpQRcUDRtwwbxTfdpXcLIcnA
mj2Kc8Zd4E2ELX32<8VdKDWX2L0GZETIelTbYbnsu5uM8G0
ooOtWOnpoPnpRmqRpNXVqmomOopqmpRnrwtuWusTTrTTxSu
tTUSxxTNWWqQNWUsmopvUUnorooqrsmmmmmUUnorooqrsmm
mmmUU8rXtbfWKbZeklildfbpW3lkiWCqak

JIRA 4.0

AAABKg0ODAoPeNptkFFrgzAUhd/zKwJ7naJCS1sIdGhgDmeLtd3LXrL0tmaLiSTRrf9+ViuUscdwc
853znl4gyPOdYejGY7C1Wy+igIc70ocBcESJWC5EY0TWpGXtHjCeyVFLVyv2Vsw9n2FE+hA6gYMz
gQHZQHFBthVkTAH5GrjhaEXzVGslWPc5awGcvpiarlYVy37BuFzXaNPYZh/s6BHMSBpXtJiW6Q7O
onpKxPyHzXtmGwHKjkx2Ye4tysvDQzUhB5ottnSYjz3fqID4kwLSI5fD32pq0mEepByoJjiQH8aY
S63OmHg9Y2CBdqYM1PCjtDnIQougVdKS30WYHGs/UecuaM/0vK2/gCzOQ3DES9Et3RpQrI0mV53r
HbaGm1bwytm4e+iv+MEluowLAIUbzOeTFmaflIz8gM7mOA1Zpw3gRUCFBGxxZcn1PX4xvSirQH5a
G14C7pEX02eu

JIRA 注册码程序

这个程序算出来的license在JIRA 3.13.5版本中是有效的,这个版本是目前最新的release版本,没有在4.0beta中试过。

Java代码 复制代码
  • package com.justin.workaround;   
  •   
  • import java.io.IOException;   
  • import java.security.KeyFactory;   
  • import java.security.Signature;   
  • import java.security.spec.PKCS8EncodedKeySpec;   
  •   
  • import com.atlassian.license.LicensePair;   
  •   
  • public class JiraLicenseGenerator   
  • {   
  •     static byte EncodedPrvKey[] = { 48, -126, 1, 75, 2, 1, 0, 48, -126, 1, 44, 6, 7, 42, -122, 72, -50, 56, 4, 1, 48,   
  •                     -126, 1, 31, 2, -127, -127, 0, -3, 127, 83, -127, 29, 117, 18, 41, 82, -33, 74, -100, 46, -20, -28,   
  •                     -25, -10, 17, -73, 82, 60, -17, 68, 0, -61, 30, 63, -128, -74, 81, 38, 105, 69, 93, 64, 34, 81, -5,   
  •                     89, 61, -115, 88, -6, -65, -59, -11, -70, 48, -10, -53, -101, 85, 108, -41, -127, 59, -128, 29, 52,   
  •                     111, -14, 102, 96, -73, 107, -103, 80, -91, -92, -97, -97, -24, 4, 123, 16, 34, -62, 79, -69, -87,   
  •                     -41, -2, -73, -58, 27, -8, 59, 87, -25, -58, -88, -90, 21, 15, 4, -5, -125, -10, -45, -59, 30, -61,   
  •                     2, 53, 84, 19, 90, 22, -111, 50, -10, 117, -13, -82, 43, 97, -41, 42, -17, -14, 34, 3, 25, -99,   
  •                     -47, 72, 1, -57, 2, 21, 0, -105, 96, 80, -113, 21, 35, 11, -52, -78, -110, -71, -126, -94, -21,   
  •                     -124, 11, -16, 88, 28, -11, 2, -127, -127, 0, -9, -31, -96, -123, -42, -101, 61, -34, -53, -68,   
  •                     -85, 92, 54, -72, 87, -71, 121, -108, -81, -69, -6, 58, -22, -126, -7, 87, 76, 11, 61, 7, -126,   
  •                     103, 81, 89, 87, -114, -70, -44, 89, 79, -26, 113, 7, 16, -127, -128, -76, 73, 22, 113, 35, -24,   
  •                     76, 40, 22, 19, -73, -49, 9, 50, -116, -56, -90, -31, 60, 22, 122, -117, 84, 124, -115, 40, -32,   
  •                     -93, -82, 30, 43, -77, -90, 117, -111, 110, -93, 127, 11, -6, 33, 53, 98, -15, -5, 98, 122, 1, 36,   
  •                     59, -52, -92, -15, -66, -88, 81, -112, -119, -88, -125, -33, -31, 90, -27, -97, 6, -110, -117, 102,   
  •                     94, -128, 123, 85, 37, 100, 1, 76, 59, -2, -49, 73, 42, 4, 22, 2, 20, 42, 50, -88, 30, 125, -37,   
  •                     118, -50, 20, -82, -63, 0, 8, -36, 106, -9, -110, 124, 107, 68 };   
  •   
  •     public static void main(String args[]) throws IOException   
  •     {   
  •         try  
  •         {   
  •             long l = 267L;   
  •             long l1 = System.currentTimeMillis();   
  •             long l2 = System.currentTimeMillis();   
  •             String s = ”";   
  •             System.out.println(“Keygen for JIRA Enterprise Edition.”);   
  •             System.out.print(“created by mydaj[ROR].”);   
  •             do  
  •             {   
  •                 System.out.print(“\nEnter your organization name: ”);   
  •                 for (int i = System.in.read(); i != 10 && i != 13; i = System.in.read())   
  •                     s = s + (char) i;   
  •   
  •             }   
  •             while (s == ”");   
  •             try  
  •             {   
  •                 PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(EncodedPrvKey);   
  •                 KeyFactory keyfactory = KeyFactory.getInstance(“DSA”, ”SUN”);   
  •                 java.security.PrivateKey privatekey = keyfactory.generatePrivate(pkcs8encodedkeyspec);   
  •                 String s1 = Long.toString(l, 10);   
  •                 s1 = s1 + ”^^”;   
  •                 s1 = s1 + Long.toString(l1, 10);   
  •                 s1 = s1 + ”^^”;   
  •                 s1 = s1 + Long.toString(l2, 10);   
  •                 s1 = s1 + ”^^”;   
  •                 s1 = s1 + s;   
  •                 byte abyte0[] = s1.getBytes();   
  •                 Signature signature = Signature.getInstance(“SHA1withDSA”);   
  •                 signature.initSign(privatekey);   
  •                 signature.update(abyte0);   
  •                 byte abyte1[] = signature.sign();   
  •                 LicensePair licensepair = null;   
  •                 try  
  •                 {   
  •                     licensepair = new LicensePair(abyte0, abyte1);   
  •                 }   
  •                 catch (Exception exception1)   
  •                 {   
  •                     exception1.printStackTrace();   
  •                 }   
  •                 System.out.println(s1);   
  •                 System.out.println(“Your license key is: ”);   
  •                 System.out.println(licensepair.toString());   
  •             }   
  •             catch (Exception exception)   
  •             {   
  •                 exception.printStackTrace();   
  •             }   
  •         }   
  •         catch (IOException ioexception)   
  •         {   
  •         }   
  •     }   
  • }  
  • package com.justin.workaround;
    
    import java.io.IOException;
    import java.security.KeyFactory;
    import java.security.Signature;
    import java.security.spec.PKCS8EncodedKeySpec;
    
    import com.atlassian.license.LicensePair;
    
    public class JiraLicenseGenerator
    {
    	static byte EncodedPrvKey[] = { 48, -126, 1, 75, 2, 1, 0, 48, -126, 1, 44, 6, 7, 42, -122, 72, -50, 56, 4, 1, 48,
    					-126, 1, 31, 2, -127, -127, 0, -3, 127, 83, -127, 29, 117, 18, 41, 82, -33, 74, -100, 46, -20, -28,
    					-25, -10, 17, -73, 82, 60, -17, 68, 0, -61, 30, 63, -128, -74, 81, 38, 105, 69, 93, 64, 34, 81, -5,
    					89, 61, -115, 88, -6, -65, -59, -11, -70, 48, -10, -53, -101, 85, 108, -41, -127, 59, -128, 29, 52,
    					111, -14, 102, 96, -73, 107, -103, 80, -91, -92, -97, -97, -24, 4, 123, 16, 34, -62, 79, -69, -87,
    					-41, -2, -73, -58, 27, -8, 59, 87, -25, -58, -88, -90, 21, 15, 4, -5, -125, -10, -45, -59, 30, -61,
    					2, 53, 84, 19, 90, 22, -111, 50, -10, 117, -13, -82, 43, 97, -41, 42, -17, -14, 34, 3, 25, -99,
    					-47, 72, 1, -57, 2, 21, 0, -105, 96, 80, -113, 21, 35, 11, -52, -78, -110, -71, -126, -94, -21,
    					-124, 11, -16, 88, 28, -11, 2, -127, -127, 0, -9, -31, -96, -123, -42, -101, 61, -34, -53, -68,
    					-85, 92, 54, -72, 87, -71, 121, -108, -81, -69, -6, 58, -22, -126, -7, 87, 76, 11, 61, 7, -126,
    					103, 81, 89, 87, -114, -70, -44, 89, 79, -26, 113, 7, 16, -127, -128, -76, 73, 22, 113, 35, -24,
    					76, 40, 22, 19, -73, -49, 9, 50, -116, -56, -90, -31, 60, 22, 122, -117, 84, 124, -115, 40, -32,
    					-93, -82, 30, 43, -77, -90, 117, -111, 110, -93, 127, 11, -6, 33, 53, 98, -15, -5, 98, 122, 1, 36,
    					59, -52, -92, -15, -66, -88, 81, -112, -119, -88, -125, -33, -31, 90, -27, -97, 6, -110, -117, 102,
    					94, -128, 123, 85, 37, 100, 1, 76, 59, -2, -49, 73, 42, 4, 22, 2, 20, 42, 50, -88, 30, 125, -37,
    					118, -50, 20, -82, -63, 0, 8, -36, 106, -9, -110, 124, 107, 68 };
    
    	public static void main(String args[]) throws IOException
    	{
    		try
    		{
    			long l = 267L;
    			long l1 = System.currentTimeMillis();
    			long l2 = System.currentTimeMillis();
    			String s = "";
    			System.out.println("Keygen for JIRA Enterprise Edition.");
    			System.out.print("created by mydaj[ROR].");
    			do
    			{
    				System.out.print("\nEnter your organization name: ");
    				for (int i = System.in.read(); i != 10 && i != 13; i = System.in.read())
    					s = s + (char) i;
    
    			}
    			while (s == "");
    			try
    			{
    				PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(EncodedPrvKey);
    				KeyFactory keyfactory = KeyFactory.getInstance("DSA", "SUN");
    				java.security.PrivateKey privatekey = keyfactory.generatePrivate(pkcs8encodedkeyspec);
    				String s1 = Long.toString(l, 10);
    				s1 = s1 + "^^";
    				s1 = s1 + Long.toString(l1, 10);
    				s1 = s1 + "^^";
    				s1 = s1 + Long.toString(l2, 10);
    				s1 = s1 + "^^";
    				s1 = s1 + s;
    				byte abyte0[] = s1.getBytes();
    				Signature signature = Signature.getInstance("SHA1withDSA");
    				signature.initSign(privatekey);
    				signature.update(abyte0);
    				byte abyte1[] = signature.sign();
    				LicensePair licensepair = null;
    				try
    				{
    					licensepair = new LicensePair(abyte0, abyte1);
    				}
    				catch (Exception exception1)
    				{
    					exception1.printStackTrace();
    				}
    				System.out.println(s1);
    				System.out.println("Your license key is: ");
    				System.out.println(licensepair.toString());
    			}
    			catch (Exception exception)
    			{
    				exception.printStackTrace();
    			}
    		}
    		catch (IOException ioexception)
    		{
    		}
    	}
    }

    运行后需要你填写你在安装JIRA过程中填写的公司的名字,如下:

    Enter your organization name:

    填写后回车即可生成license,然后再用管理员登录JIRA,更新license即可。

    • Share/Bookmark

    jira创建新项目 User not Assignable

    January 28th, 2010 No comments

    jira创建新项目的时候,提示 Default Assignee: Project Lead (WARNING: User not Assignable.)

    将项目负责人 Project Lead 加入到GROUP  jira-developers组即可

    或直接设置权限方案permission scheme ,将Project Lead加入 Assignable User

    • Share/Bookmark