Как я передаю номер сборки из Nant назад к Круиз-контролю

Используйте GroupBy.transform для возврата Series с тем же размером, что и оригинал DataFrame, поэтому можно присвоить новый столбец:

df['B'] = df['B'].astype(str)
df['B_concat'] = df.groupby(['A'])['B'].transform('/'.join)

Решение одной строкой должно быть: [ 118]

df['B_concat'] = df['B'].astype(str).groupby(df['A']).transform('/'.join)
print (df)
   A    B B_concat
0  1  345      345
1  2  366      366
2  3  299  299/455
3  3  455  299/455
4  4  879      879
5  5  321  321/957
6  5  957  321/957
7  6  543      543

Или:

df['B_concat'] = df.groupby(['A'])['B'].transform(lambda x: '/'.join(x.astype(str)))

6
задан Mitch Wheat 6 November 2008 в 11:08
поделиться

5 ответов

Сделанная на заказ этикетировочная машина требуется для этого. По необходимости наш поставщик управления исходным кодом, и мы получаем наш номер версии из него. Код следующие:

/// <summary>
/// Gets the latest change list number from perforce, for ccnet to consume as a build label.
/// </summary>
[ReflectorType( "p4labeller" )]
public class PerforceLabeller : ILabeller
{
    //  perforce executable (optional)
    [ReflectorProperty("executable", Required = false)]
    public string P4Executable = "p4.exe";

    // perforce port (i.e. myserver:1234)
    [ReflectorProperty("port", Required = false)]
    public string P4Port = String.Empty;

    // perforce user
    [ReflectorProperty("user", Required = false)]
    public string P4User = String.Empty;

    //  perforce client
    [ReflectorProperty("client", Required = false)]
    public string P4Client = String.Empty;

    // perforce view (i.e. //Dev/Code1/...)
    [ReflectorProperty("view", Required = false)]
    public string P4View = String.Empty;

    // Returns latest change list
    public string Generate( IIntegrationResult previousLabel )
    {
        return GetLatestChangelist(); 
    }

    // Stores latest change list into a label
    public void Run( IIntegrationResult result )
    {
        result.Label = GetLatestChangelist();
    }

    // Gets the latest change list
    public string GetLatestChangelist()
    {
        // Build the arguments to pass to p4 to get the latest changelist
        string theArgs = "-p " + P4Port + " -u " + P4User + " -c " + P4Client + " changes -m 1 -s submitted " + P4View;
        Log.Info( string.Format( "Getting latest change from Perforce using --> " + theArgs ) );

        // Execute p4
        ProcessResult theProcessResult = new ProcessExecutor().Execute( new ProcessInfo( P4Executable, theArgs ) );

        // Extract the changelist # from the result
        Regex theRegex = new Regex( @"\s[0-9]+\s", RegexOptions.IgnoreCase );
        Match theMatch = theRegex.Match( theProcessResult.StandardOutput );
        return theMatch.Value.Trim();
    }
}

Метод, GetLatestChangelist, то, где Вы, вероятно, вставили бы свою собственную логику, чтобы говорить с Вашей системой управления версиями. В По необходимости существует идея последнего changelist, который уникален. Наши номера сборки и в конечном счете номера версий базируются прочь этого.

После того как Вы создаете это (в блок dll), необходимо будет сцепить его в ccnet. Можно просто бросить блок в каталог сервера (рядом с ccnet.exe).

Затем Вы изменяете свой ccnet файл проекта для использования этой маркировочной машины. Мы сделали это с блоком маркировочной машины по умолчанию. Что-то как следующее:

<project>
<labeller type="p4labeller">
    <client>myclient</client>
    <executable>p4.exe</executable>
    <port>myserver:1234</port>
    <user>myuser</user>
    <view>//Code1/...</view>
</labeller>
<!-- Other project configuration to go here -->
</project>

Если Вы просто желаете, чтобы номер сборки обнаружился в ccnet затем, Вы сделаны и не должны действительно делать ничего больше. Однако можно получить доступ к маркировке в сценарии NAnt, если Вы желаете при помощи уже обеспеченного свойства CCNetLabel.

Надежда это помогает некоторым. Сообщите мне, есть ли у Вас какие-либо вопросы путем регистрации на комментарии.

7
ответ дан 16 December 2019 в 21:47
поделиться

Вы пытались использовать некоторые переменные среды? Я полагаю, что CCNet может обработать их.

Я вырою немного на этом.

Хорошо я вижу решение, довольно грязное, но во всяком случае:

1-Добавляют раздел defaultlabeller в Вашем определении проекта CCNET. Это будет содержать шаблон номера сборки, который Вы хотите отобразить.

2-В NAnt, имейте сценарий для обновления конфигурационного файла, вставляя номер сборки, который Вы хотите видеть.

3-Касаний (в смысле Unix) ccnet.exe.config файл, чтобы заставить его перезагрузить конфигурационные файлы проектов.

и voilà.

1
ответ дан 16 December 2019 в 21:47
поделиться

У нас была эта проблема также. Я закончил тем, что писал специальный плагин маркировки CC.

0
ответ дан 16 December 2019 в 21:47
поделиться

Если Ваши номера сборки последовательны, можно просто взломать файл состояния круиз-контроля, чтобы дать ему корректный номер сборки для запуска с. Ваш поиск файла назвал [projectName].state.

Я изменил элемент Маркировки на корректное число и LastSuccessfulIntegrationLabel, чтобы быть новым числом.

0
ответ дан 16 December 2019 в 21:47
поделиться

Однако мы только недавно получили CruiseControl, таким образом, наш официальный номер сборки отличается от того, что перечислено в CruiseControl.

Вид, вроде какой сказанный gbanfill, можно сказать CC что номера сборки начать с, но нет никакой потребности взломать .ser файл. Можно использовать интерфейс JMX для установки текущего номера сборки для получения его в синхронизации с номером сборки NAnt.

Можно также установить значение маркировки по умолчанию к к текущему номеру сборки, удалить .ser файл и перезапустить CC.

Но возможно самая легкая вещь состоит в том, чтобы записать номер сборки в файл свойств от NAnt и затем использовать инкрементор маркировки файла свойств для чтения того файла. (Убедитесь установить setPreBuildIncrementer = "верный"),

0
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: