emd-build.sh

来源:互联网 发布:龙之信条优化设置 编辑:程序博客网 时间:2024/06/14 02:33
#!/bin/bash
set -x
export LANG=POSIX

echo  "build url:"               $BUILD_URL
echo  "job url:"                 $JOB_URL
echo  " project git url:"      $GIT_URL
echo  " git commint:"              $GIT_COMMIT
echo  " git branch: "          $GIT_BRANCH
echo  " build number ":         $BUILD_NUMBER
echo  " jenkins_home ":         $JENKINS_HOME


#set env
function set_env( ) {
    PRO_NAME_GIT=${GIT_URL##*/}
    PROJECT_NAME=${PRO_NAME_GIT/.git/}
    BRANCH_NAME=${GIT_BRANCH##*/}
    CPU_NUM=$(cat /proc/cpuinfo | grep "processor" | wc -l)
    GBP_DCH="gbp dch  -Ra --ignore-branch  --spawn-editor=snapshot"
    PW="/var/lib/jenkins/pw.sh"
    #TARGET="/home/backups/repos-test."
    TARGET="/home/backups/repos."
    DEPOT="emindlinux"
    ARCH_32=i386
    ARCH_64=amd64
    OPTS="--keyring /etc/apt/trusted.gpg.d/debian-archive-liriver-automatic.gpg --extrapackages cowdancer"
    VER_BRANCH=build
    COW_PATH="/var/cache/pbuilder"
    deb_package="deb_package"
}

#get version
function get_version() {
    project_version=$(dpkg-parsechangelog | sed -rne 's,^Version: (.+).*,\1,p')
    echo $project_version
}

#set env of depot and chroot
function set_depot_chroot_env( ) {
    if [ ${BRANCH_NAME} = "release" -o  ${BRANCH_NAME} = "liriver" ];then
        BASE_DIST=testing
        OTH_DIST=liriver
        GBP_DCH+=" --nmu"
        URL="ftp://mirrors.emindsoft.com.cn/debian $BASE_DIST  main contrib non-free"
        OTHERURL="deb ftp://192.168.0.210/emindlinux $OTH_DIST main contrib non-free"
        COW_32="${COW_PATH}/base-${BRANCH_NAME}-em-${ARCH_32}.cow"
        COW_64="${COW_PATH}/base-${BRANCH_NAME}-em-${ARCH_64}.cow"
    elif [ ${BRANCH_NAME} = "master" -o ${BRANCH_NAME} = "liuriver"  -o ${BRANCH_NAME} = "develop" ];then
        BASE_DIST=testing
        OTH_DIST=liuriver
        #URL="http://emdmirror.emindos.org:8088/debian $BASE_DIST  main contrib non-free"
        URL="http://mirrors.emindsoft.com.cn/gov/debian/ $BASE_DIST  main contrib non-free"
        #OTHERURL="deb http://emdmirror.emindos.org:8088/emindlinux $OTH_DIST main contrib non-free"
        OTHERURL="deb http://mirrors.emindsoft.com.cn/gov/emindlinux/ $OTH_DIST main contrib non-free"
        COW_32="${COW_PATH}/base-${BRANCH_NAME}-em-${ARCH_32}.cow"
        COW_64="${COW_PATH}/base-${BRANCH_NAME}-em-${ARCH_64}.cow"
    else
        exit 1
    fi
    #REPRO="reprepro -vb $TARGET includedeb liuriver"
    REPRO="reprepro -vb ${TARGET}"
}

# build chroot env
function build_chroot() {

    test -d $COW_32 && SUDO_ASKPASS=${PW} sudo -A  ARCH=${ARCH_32} DIST=${BRANCH_NAME}-em  git-pbuilder update || SUDO_ASKPASS=${PW} sudo -A \
        git-pbuilder create --othermirror "$OTHERURL" --basepath $COW_32  --mirror "$URL" ${OPTS} --architecture ${ARCH_32} --distribution $BASE_DIST
    test -d $COW_64 && SUDO_ASKPASS=${PW} sudo -A  ARCH=${ARCH_64} DIST=${BRANCH_NAME}-em  git-pbuilder update || SUDO_ASKPASS=${PW} sudo -A \
        git-pbuilder create --othermirror "$OTHERURL" --basepath $COW_64  --mirror "$URL" ${OPTS} --architecture ${ARCH_64} --distribution $BASE_DIST
}

# download balltar
function down_tar() {
    tar_dir=tarballs
    #test -f debian/watch && uscan --download-current-version || true
    [ -d $tar_dir ] && rm -rf  $tar_dir || mkdir  $tar_dir
    test -f debian/watch && uscan --download-current-version --destdir $tar_dir || true
}

#build package
function build_package() {
    #arch:amd64,i386,all[amd64 or i386],any[amd64 and i386]
    local arch
    [ -f debian/control ] && {
        arch=$(cat debian/control  | grep "^Architecture" | awk -F ":" '{print $2}')
        echo $arch | wc
        count=$(echo $arch | wc | awk '{print $2}')
        if [ $count -gt 1 ];then
            arch="all"
        else
            [ -z $arch ] && arch="any"
        fi
        arch_array=$(echo $arch)

        unset arch
    } || {
        echo "debian/control is not exist"
        exit 1
    }

    if [ -d result.* ];then
        /bin/rm -rf result.*
        fi
    [ -d $deb_package ] && rm -rf  $deb_package || mkdir $deb_package
    deb_patch_32=$(/bin/mktemp -d result_32.XXXXX)
    deb_patch_64=$(/bin/mktemp -d result_64.XXXXX)
    
    for arch in ${arch_array[@]}
    do
        echo "===========================现在编译的架构:$arch:===================="
        if [ "$arch"x = "any"x ];then
            for arch in 32 64
            do
                build${arch}_package &
            done
        else
            if [ "$arch"x = "amd64"x ];then
                arch=64
            elif [ "$arch"x = "i386"x ];then
                arch=32
            elif [ "$arch"x = "all"x ];then
                arch=64
            fi
            build${arch}_package &
        fi
    done
    wait
    local flag;
    flag=1;
    if [ -f $deb_patch_32/b_32.txt ];then
        sed -i '$i\============================error32==========================' $deb_patch_32/${PROJECT_NAME}_32.log
        cat $deb_patch_32/${PROJECT_NAME}_32.log
        flag=2

    fi
    if [ -f $deb_patch_64/b_64.txt  ];then
        sed -i '$i\============================error64==========================' $deb_patch_64/${PROJECT_NAME}_64.log
        cat $deb_patch_64/${PROJECT_NAME}_64.log
        flag=2
    fi
    [ $flag -gt 1  ] && {
            unset flag
        exit 1
    } || unset flag

}
#build32
function build32_package() {
    local flag
    SUDO_ASKPASS=${PW} sudo -A  gbp buildpackage -j$CPU_NUM -sa --git-pbuilder --git-arch=${ARCH_32} --git-dist=${BRANCH_NAME}-em \
    --git-ignore-new --git-ignore-branch --git-export-dir=$deb_patch_32 --git-tarball-dir=$tar_dir --git-keyid=builder@emindsoft.com.cn 1>$deb_patch_32/${PROJECT_NAME}_32.log
    flag=$?
    if [ $flag -gt 0 ];then
        echo "$flag" >$deb_patch_32/b_32.txt
    fi
    unset flag
}
#build64
function build64_package() {
    local flag
    SUDO_SKPASS=${PW} sudo -A gbp buildpackage -j$CPU_NUM -sa   --git-pbuilder --git-arch=${ARCH_64} --git-dist=${BRANCH_NAME}-em \
    --git-ignore-new --git-ignore-branch --git-export-dir=$deb_patch_64 --git-tarball-dir=$tar_dir --git-keyid=builder@emindsoft.com.cn 1>$deb_patch_64/${PROJECT_NAME}_64.log
    flag=$?
    if [ $flag -gt 0 ];then
        echo "$flag" >$deb_patch_64/b_64.txt
    fi
    unset flag
}

# upgrade version
function upgrade_ver() {
    git branch --list -r
    git branch --list -r | grep "\<origin/$VER_BRANCH\>" ||  result=error
    if [[ $result = "error" ]];then
        git branch $VER_BRANCH
        git push --all
        upgrade_ver1
    else
        upgrade_ver1
    fi
}

function upgrade_ver1() {
    FLAG=true
    while($FLAG)
    do
        git rebase origin/build
        $GBP_DCH
        git add debian/changelog
        local version=$(dpkg-parsechangelog | grep "^Version")
        version=$(dpkg-parsechangelog | grep "^Version")
        git commit -m "<UPGRADE> upgrade $PROJECT_NAME of ${version}"
        unset version
        build_package
        git pull origin $VER_BRANCH
        git rebase origin/build
        if [ "0" != "$?" ]; then
            git rebase --abort
            git reset --hard
            git clean -dfx
            git checkout origin/master
        else
            #git push origin HEAD:build
            FLAG=false
        fi
    done

}

# move deb to repo
function move_repo_old() {
    #Deleting files just added to the pool but not used
    local flag
    local flag1
    flag1=1
    SUDO_ASKPASS=${PW} sudo -A ${REPRO}${OTH_DIST}/$DEPOT includedeb ${OTH_DIST} $deb_patch*/*.deb
    flag=$?
    if [ $flag -gt 0 ];then
        flag1=2
    fi
    unset flag

    if [[ $OTH_DIST="liriver" ]];then
        OTH_DIST=liuriver
        local flag
        SUDO_ASKPASS=${PW} sudo -A ${REPRO}${OTH_DIST}/$DEPOT includedeb ${OTH_DIST} $deb_patch*/*.deb
        flag=$?
        if [ $flag -gt 0 ];then
            flag1=2
        fi
        unset flag
    fi
    if [ ${flag1} -gt 1 ];then
        echo "编译包没问题,进入仓库出现问题,版本号不升级"
        unset flag1
        exit 1
    else
        git push origin HEAD:build
        unset flag1
    fi
}

# move deb to repo
function move_repo() {
    local flag
    local flag1
    local result
    cp -af $deb_patch*/*.deb $deb_package

    if [ ${BRANCH_NAME} = "develop" ];then
        REPO="-test"
    else
        REPO=""
    fi

    flag1=1
    result=$(SUDO_ASKPASS=${PW} sudo -A ${REPRO}${OTH_DIST}/$DEPOT  includedeb ${OTH_DIST}${REPO}  $deb_package/*.deb)
    flag=$?
    if [ $flag -gt 0 ];then
        flag1=2
    fi
    unset flag

    if [ ${BRANCH_NAME} = "liriver" ];then
        REPO="-test"
    fi

    if [ $OTH_DIST="liriver" -o  ${BRANCH_NAME}="release" ];then
        OTH_DIST=liuriver
        local flag
        result=$(SUDO_ASKPASS=${PW} sudo -A ${REPRO}${OTH_DIST}/$DEPOT  includedeb ${OTH_DIST}${REPO} $deb_package/*.deb)
        flag=$?
        if [ $flag -gt 0 ];then
            flag1=2
        fi
        unset flag
    fi

    pushd $TARGET${OTH_DIST}/$DEPOT >/dev/null
        local Depot
        Depot=$(sudo reprepro list $OTH_DIST  | grep $PROJECT_NAME)
    popd  > /dev/null
    local version=$(dpkg-parsechangelog | grep "^Version")
    if [ ${flag1} -gt 1 ];then
        echo "编译包没问题,进入仓库出现问题,md5或是sha1出现问题,同版本号进入仓库有问题。建议升个小版本好即可.重新提交,重新编译"
        echo "当前的版本号:$version"
        echo "仓库的版本号:$Depot"
        echo "运行命令:${GBP_DCH}"
        unset flag1
        exit 1
    fi

    if [ "${result}" ];then
        echo ${result} | grep "Deleting files just added to the pool but not used"
        if [ ! $? -gt 0 ];then
            echo "版本号小于仓库中的版本号."
            echo "当前的版本号:$version"
            echo "仓库的版本号:$Depot"
            unset flag1
            unset Depot
            unset version
            exit 1
        fi
    fi
}

#control centre
function main() {
    set_env
    set_depot_chroot_env
    build_chroot
    down_tar
    build_package
#    upgrade_ver
    move_repo
#    move_repo_old
}
main

原创粉丝点击