【问题标题】:Setting global properties for RTC Jazz Build definition为 RTC Jazz Build 定义设置全局属性
【发布时间】:2014-09-02 08:56:57
【问题描述】:

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

  • 构建库
  • 构建-服务器-应用程序
  • 构建-运行-测试-服务器
  • 构建-客户端-应用
  • 构建-运行-测试-客户端

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

DB_SCHEMA = 8.1

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

DB_SCHEMA = 8.2

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

--> 如何定义一个可以在所有构建定义中使用的全局属性?

【问题讨论】:

    标签: build rtc jazz


    【解决方案1】:

    我没有看到any global property in the help page,所以你可以考虑开发一个程序:

    • 使用RTC Java API
    • 对于每个构建定义,将属性设置为预期值(如in this thread

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

    【讨论】:

    • 你好 VonC - 你真是个聪明人 - 这个解决方案对我有用!!!我仍然对你能做什么和你能取得什么印象深刻!这是一个很好的答案! (但需要一些努力^^)
    • 好的,我现在确实实现了你的答案 - 花了很长时间,但现在我完成了(这需要时间,因为我正在做一些不同的事情,而不是因为它很难做到).. . 它现在对我们很好!再次感谢!
    • @MartinFrank 太棒了!您能否在实施的主要部分添加答案?
    • 很抱歉再次询问,但您可以在预定制表符中添加“启用”按钮的属性吗?您的解决方案效果很好,我想扩大这种方法 - 现在我可以启用/禁用所有夜间构建作业......所以当我知道服务器将关闭时我可以停止它......
    • 我希望我什至可以 ++ 你的回答,这里真的很棒,让我的工作更加轻松!!
    【解决方案2】:

    好的 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);
        }
    }
    
    }
    

    【讨论】:

    • 好吧,我不得不对你说 - 在很多情况下你都帮了大忙 - 我真的很高兴你在 StackOverFlow 上!!!
    • 没问题:我每天都在这里 (meta.stackexchange.com/q/122976/6309)
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多