Jenkins 自动化 deb reprepro 存储库创建/签名

ash*_*ehl 5 debian sign gnupg deb jenkins

问题陈述:

  • 可以从普通终端内部(也在 docker 内部)签署回购协议。从詹金斯工作,回购创建/签名失败。工作挂起。

配置:

  • Jenkins 生成 docker 容器来创建/签署 deb 存储库。
  • 私钥和公钥都存在。
  • gpg-agent 安装在 docker 容器上以对包进行签名。
  • ~/.gnupg/gpg.conf 文件启用了“use-agent”

进步:

  • 可以在 docker 容器上使用 jenkins 启动 gpg-agent。
  • 可以使用 gpg-preset-passphrase 来缓存密码。
  • 可以使用[OUTSIDE JENKINS]

    reprepro --ask-passphrase -Vb .  includedeb ${_repo_name} ${_pkg_location}
    
    Run Code Online (Sandbox Code Playgroud)

    从 gpg-agent 获取密码短语并签署 repo。

问题:

  • 从詹金斯工作中,命令“reprepro --ask-passphrase -Vb ...”挂起。

代码:

  • 启动 gpg 代理:

    GPGAGENT=/usr/bin/gpg-agent
    GNUPG_PID_FILE=${GNUPGHOME}/gpg-agent-info
    GNUPG_CFG=${GNUPGHOME}/gpg.conf
    GNUPG_CFG=${GNUPGHOME}/gpg-agent.conf
    
    function start_gpg_agent {
        GPG_TTY=$(tty) 
        export GPG_TTY 
        if [ -r "${GNUPG_PID_FILE}" ]
        then
            source "${GNUPG_PID_FILE}" count=$(ps lax | grep "${GPGAGENT}" | grep "$SSH_AGENT_PID" | wc -l)
            if [ $count -eq 0 ] 
            then 
                if ! ${GPGAGENT} 2>/dev/null then 
                    $GPGAGENT --debug-all --options ${BASE_PATH}/sign/gpg-agent.options \
                     --daemon  --enable-ssh-support \
                     --allow-preset-passphrase --write-env-file ${GNUPG_PID_FILE}
    
                if [[ $? -eq 0 ]] 
                then 
                    echo "INFO::agent started" 
                else 
                    echo "INFO::Agent could not be started. Exit." 
                    exit -101 
                fi 
            fi 
        fi 
        else
            $GPGAGENT --debug-all --options ${BASE_PATH}/sign/gpg-agent.options \
            --daemon --allow-preset-passphrase --write-env-file ${GNUPG_PID_FILE}
        fi 
    } 
    
    Run Code Online (Sandbox Code Playgroud)
  • 选项文件:

    default-cache-ttl 31536000
    default-cache-ttl-ssh 31536000
    max-cache-ttl 31536000
    max-cache-ttl-ssh 31536000
    enable-ssh-support 
    debug-all
    
    Run Code Online (Sandbox Code Playgroud)
  • 保存密码。

    /usr/lib/gnupg2/gpg-preset-passphrase -v --preset --passphrase ${_passphrase} ${_fp}
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后(完成),签署回购协议:

    reprepro --ask-passphrase -Vb .  includedeb ${_repo_name} ${_pkg_location}
    
    Run Code Online (Sandbox Code Playgroud)