web-dev-qa-db-ja.com

Jenkinsコンソール出力でエコーオフ

私は ガイドライン に署名する方法Android apkをJenkinsで使用します。KSTOREPWDおよびKEYPWDでJenkinsジョブをパラメーター化しました。Jenkinsのジョブ構成の一部(ビルド->シェルの実行)は、これらのパラメーターを取得し、環境変数として保存します。

export KSTOREPWD=${KSTOREPWD}
export KEYPWD=${KEYPWD}
...
./gradlew assembleRelease

問題は、ビルドが終了すると、誰でもビルドの「コンソール出力」にアクセスして、入力されたパスワードを確認できることです。その出力の一部:

08:06:57 + export KSTOREPWD=secretStorePwd
08:06:57 + KSTOREPWD=secretStorePwd
08:06:57 + export KEYPWD=secretPwd
08:06:57 + KEYPWD=secretPwd

したがって、exportコマンドからの出力の前にエコーを抑制し、exportコマンドの後にエコーを再度有効にしたいと思います。

50

デフォルトでは、Jenkinsはset -xシェルの実行スクリプトを起動します。これにより、すべてのコマンドがエコーされます

コマンドの前にset +xと入力すると、その動作を一時的にオーバーライドできます。もちろん、再び表示するにはset -xが必要です。

ビルドステップの先頭に次を配置することにより、スクリプト全体でこの動作をオーバーライドできます。
#!/bin/bash +x

101
Slav

特定の状況(gradleとjenkinsを使用)では、 環境変数のGradleのパターンORG_GRADLE_PROJECT_prop)。その後、Gradleはプロジェクトにproppropertyを設定します。

あなたの場合、これは次のようになります

enter image description here

そして、あなたはそれをあなたのgradle.properties このような

signingConfigs {
    release {
        storeFile file(KEYSTORE)
        storePassword KSTOREPWD
        keyAlias ALIAS
        keyPassword KEYPWD
    }
}

ところで-KEYSTOREcredentials binding plugin を使用することをお勧めします enter image description here

1
schnatterer

公式ドキュメント で提案されているように、shパラメーターをJenkinsfileに、より安全な方法で出力なしで記述する方法の例を示します。 set +xは、 this answer で記述されているように、主な魔法を行います。

シングルクォートにより、シェルは環境変数としてシークレットを展開します。二重引用符は、Groovyによって秘密が補間されるため、安全性が低下する可能性があります。そのため、典型的なオペレーティングシステムプロセスリスト(およびBlue Ocean、および従来のUIのパイプラインステップツリー)は誤って開示します。

node {
  withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
    sh /* WRONG! */ """
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    """
    sh /* CORRECT */ '''
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    '''
  }
}
1
IvanRublev