正在设置RTC Jazz Build定义的全局属性



我在RTC/Jazz中有几个构建定义,我使用一个变量在各种构建定义中设置DB发布

  • 生成Lib
  • 生成服务器应用程序
  • 生成运行测试服务器
  • 生成客户端应用程序
  • 生成运行测试客户端

在所有定义中,我使用属性DB_SCHEMA,

DB_SCHEMA = 8.1

一旦我们更新了数据库并使用了新的模式,我就必须将构建属性设置为

DB_SCHEMA = 8.2

现在我必须更新所有生成定义。。。如果我忘了一个,或者我拼错了什么,那么我的老板会生我的气——开玩笑,但说实话,我不想犯错误

-->如何定义可在所有生成定义中使用的全局属性?

我在帮助页面中没有看到任何全局属性,所以您可以考虑开发一个程序:

  • 使用RTC Java API
  • 对于每个生成定义,将属性设置为预期值(如本线程中所示)

    IBuildDefinition definition = (IBuildDefinition) buildDefinition.getWorkingCopy();
    definition.setProperty("propertyName","");
    definition = buildClient.save(definition, monitor); 
    

Ok VonC这是我的解决方案:

其中一部分是RTC适配器,用于处理RTC基础的连接:

(它提供了与此解决方案无关的其他getter/setter-我清除了它们)

RTC适配器

public class RtcAdapter {
//yes i know - having hardcoded user/pass is bad, ignore this - image it's in a property file or set by a popup dialog
private static final String repositoryURI = "https://xxxxxxxxxxxx/ccm";
private static final String userId = "xxxxxxxxxxx";
private static final String password = "xxxxxxxxxx";
private static final String projectAreaName = "xxxxxxxxxx";
private ITeamRepository teamRepository = null;
private IProgressMonitor monitor = new NullProgressMonitor();
private IProjectArea projectArea = null;
private ITeamBuildClient buildClient = null;
//i'm implementing a singleton class - you can argue with mie if it's a good approach
private static final RtcAdapter inst = new RtcAdapter();
private RtcAdapter(){       
    super();
}
public ITeamRepository getTeamRepository() {
    return teamRepository;
}
public IProgressMonitor getMonitor() {
    return monitor;
}
public IProjectArea getProjctArea(){
    return projectArea;
}
public ITeamBuildClient getBuildClient(){
    return buildClient;
}
private void setTeamRepository(ITeamRepository teamRepositoryIn) {
    teamRepository = teamRepositoryIn;
}
/**
 * 
 * @param repositoryURI
 * @param userId
 * @param password
 * @param monitor
 * @return
 * @throws TeamRepositoryException 
 */
private ITeamRepository login(String repositoryURI, String userId,String password, IProgressMonitor monitor) throws TeamRepositoryException {       
    ITeamRepository teamRepository = TeamPlatform.getTeamRepositoryService().getTeamRepository(repositoryURI);
    teamRepository.registerLoginHandler(new LoginHandler(userId, password));
    teamRepository.login(monitor);
    return teamRepository;
}
/**
 * LoginHandler required by login function
 *
 */
private static class LoginHandler implements ILoginHandler, ILoginInfo {
    private String fUserId;
    private String fPassword;
    private LoginHandler(String userId, String password) {
        fUserId = userId;
        fPassword = password;
    }
    public String getUserId() {
        return fUserId;
    }
    public String getPassword() {
        return fPassword;
    }
    public ILoginInfo challenge(ITeamRepository repository) {
        return this;
    }
}
public static RtcAdapter inst() {
    return inst;
}
public boolean connect() {
    TeamPlatform.startup();
    System.out.println("Team Platform Startup");
    try {
        IProgressMonitor monitor = new NullProgressMonitor();
        setTeamRepository(login(repositoryURI, userId, password, monitor));
        System.out.println("Logged in");            
        IProcessClientService processClient= (IProcessClientService) getTeamRepository().getClientLibrary(IProcessClientService.class);
        URI uri= URI.create(projectAreaName.replaceAll(" ", "%20"));
        projectArea = (IProjectArea) processClient.findProcessArea(uri, null, RtcAdapter.inst().getMonitor() );
        buildClient = (ITeamBuildClient) getTeamRepository().getClientLibrary(ITeamBuildClient.class);
        System.out.println("projet area = "+projectArea.getName() );
    } catch (TeamRepositoryException e) {
        System.out.println("TeamRepositoryException : " + e.getMessage());
        e.printStackTrace();
        return false;
    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
        return false;
    }
    return true;
}
public void disconnect(){
    System.out.println("Logged out");
    TeamPlatform.shutdown();
}
}

另一部分是工作类,我称之为BuildDefinitionHelper(多么好的名字,哈哈)

BuildDefinitionHelper

public class BuildDefinitionHelper {
/**
 * @param args
 */
public static void main(String[] args) {
    new BuildDefinitionHelper().startUp();  //not-so-nice startup, but i don't mind
}
private final String[] adaPublishDefinitionList = new String[]{
        "publish ada develop-40",
        "publish ada develop-40 nightly",
        "publish ada develop-54",
        "publish ada develop-54 nightly",
        "publish ada develop-56",
        "publish ada develop-56 nightly",
        "publish ada develop-58",
        "publish ada develop-58 nightly",
};  
private final String BUILD_NR = "BUILD_NR";
private final String MAJOR = "MAJOR";
private final String MINOR = "MINOR";
private void startUp() {
    final int major = 57;
    final int minor = 11;
    final int build = 1;
    //connect
    if (RtcAdapter.inst().connect() ){
        //getting  required resources - a singleton is helpful here (look above)
        IProgressMonitor pMon = RtcAdapter.inst().getMonitor();         
        ITeamBuildClient buildClient = RtcAdapter.inst().getBuildClient();
        try {               
            for (String adaPublish: adaPublishDefinitionList ){                 
                //get build definition
                IBuildDefinition workingCopy = getBuildDefinition(adaPublish, buildClient, pMon);   
                //seting properties
                String propMajor = getFormattededInteger(major);
                String propMinor = getFormattededInteger(minor);
                String propBuild = getFormattededInteger(build);
                setBuildProperty(MAJOR, propMajor, workingCopy);
                setBuildProperty(MINOR, propMinor, workingCopy);
                setBuildProperty(BUILD_NR, propBuild, workingCopy);
                //store changes
                saveBuildDefinition(workingCopy, buildClient, pMon);
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (TeamRepositoryException e) {
            e.printStackTrace();
        }
        //at the end: disconnect
        RtcAdapter.inst().disconnect();         
    }
}
private void saveBuildDefinition(IBuildDefinition definition, ITeamBuildClient buildClient, IProgressMonitor progressMonitor) throws TeamBuildDuplicateItemException, IllegalArgumentException, TeamRepositoryException {
    buildClient.save(definition, progressMonitor);
}
private String getFormattededInteger(int value) {
    if (value >= 0 && value <= 9){
        return "00"+value;
    }
    if (value >= 10 && value <= 99){
        return "0"+value;
    }
    return ""+value;
}
private IBuildDefinition getBuildDefinition(String buildDefinitionName, ITeamBuildClient buildClient, IProgressMonitor progressMonitor) throws IllegalArgumentException, TeamRepositoryException {
    IBuildDefinition buildDefinition = buildClient.getBuildDefinition(buildDefinitionName, progressMonitor );
    IBuildDefinition definition = (IBuildDefinition) buildDefinition.getWorkingCopy();
    return definition;
}
private void setBuildProperty(String propertyName, String propertyValue, IBuildDefinition definition ) throws TeamBuildDuplicateItemException, IllegalArgumentException, TeamRepositoryException {
    definition.setProperty(propertyName,propertyValue);
    System.out.println("set "+propertyName+" to "+ propertyValue+" in Build Definition "+definition.getId() );
}
private void printBuildDefinition(String[] buildDefinitionList, ITeamBuildClient buildClient, IProgressMonitor progressMonitor) throws IllegalArgumentException, TeamRepositoryException {
    for (String buildDefinitionName: buildDefinitionList ){
        IBuildDefinition buildDefinition = buildClient.getBuildDefinition(buildDefinitionName, progressMonitor );
        IBuildDefinition definition = (IBuildDefinition) buildDefinition.getWorkingCopy();
        System.out.println("name = "+buildDefinitionName+" definition = "+definition);
    }
}
}

相关内容

  • 没有找到相关文章

最新更新