公式のArgoCD Dockerイメージを使用して展開を自動化しようとしています( https://hub.docker.com/r/argoproj/argocd/dockerfile )
エージェントのkubernetesプラグインを使用して宣言的なjenkinsパイプラインを作成し、yamlを使用してポッドを定義しました。コンテナー定義は次のようになります。
_pipeline {
agent {
kubernetes {
yaml """
kind: Pod
metadata:
name: agent
spec:
containers:
- name: maven
image: maven:slim
command:
- cat
tty: true
volumeMounts:
- name: jenkins-maven-cache
mountPath: /root/.m2/repository
- name: argocd
image: argoproj/argocd:latest
command:
- cat
tty: true
...
_
そのコンテナー内でコマンドを実行しようとしています。パイプラインのステップは次のようになります。
_stage('Build') {
steps {
container('maven') {
sh 'echo testing' // this works just fine
}
}
}
stage('Deploy') {
steps {
container('argocd') {
sh "echo testing" // this does not work
// more deploy scripts here, once sh works
}
}
}
_
だから私は2つのコンテナーを持っています。1つはshスクリプトが適切に機能し、もう1つは機能しません。 「argocd」コンテナ内のshスクリプトが5分間ハングした後、Jenkinsがそれを強制終了すると、終了メッセージは次のようになります。process apparently never started in /home/jenkins/agent/workspace/job-name@tmp/durable-46cefcae (running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
この特定のコンテナで単純な文字列をエコーすることはできません。
DockerのMavenのオフィシャルのような他のコンテナーでも問題なく機能します。私は、スプリングブートアプリケーションの構築に使用しています。 docker execを使用してコマンドラインから手動でargocdコンテナーでコマンドを直接実行することもできますが、jenkinsは何らかの理由でパイプラインに含まれません。どうなり得るか?
耐久性のあるタスクプラグインの最新バージョン(1.33)を実行しています。
Update:argo-cd(連続展開ツール)のイメージargoproj/argocd:latestにはargocd
以外のコマンドが含まれていないため、問題はJenkins自体ではなく、使用しようとしたコンテナイメージにありました。私の解決策は、Argo-CD CLIをカスタムDockerコンテナーにインストールし、公式のコンテナーの代わりにそれを使用することでした。
私が作成したカスタムDockerイメージで同様の問題が発生しました。結局、私はUSER nobody
そのイメージのDockerfileで、どういうわけか、この方法でjenkinsエージェントポッドは、パイプラインスクリプトからcat
コマンドまたはその他のシェルコマンドを実行できませんでした。 rootユーザーで特定のコンテナーを実行するとうまくいきました。
したがって、あなたのケースでは、以下のようにsecurityContext:runAsUser:0を追加します。
...
- name: argocd
image: argoproj/argocd:latest
command:
- cat
tty: true
securityContext:
runAsUser: 0
...
Kubernetesリファレンス: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
問題がジェンキンスに関連している場合、ここで問題の解決に役立つ可能性があるいくつかのことを示します。
/home/jenkins
でしたが、最近のバージョンでは/home/jenkins/agent
であるか、Windowsで実行している場合パスはC:\dir
ではなく/dir
で始まる必要がありますapt-get --purge remove jenkins
、次にapt-get install jenkins
を使用して、新しいクリーンインストールを試すことができますJenkinsがクリーンな場合、別の方法で問題を調査する必要があります。shコマンドに終了コードが返されていないか、スクリプトが別のシェルで実行されているようです。コンテナーの作業ディレクトリに配置されるshファイルを実行しようとします
#!/bin/bash
echo "testing"
echo $?
source my_script.sh
またはbash my_script.sh
で実行してみてください
$?最新のbash操作の終了コードです。これを出力すると、スクリプトが正しく終了することが保証されます。スクリプトを実行する source コマンドを実行すると、スクリプトを呼び出しているのと同じシェルでスクリプトが実行され、シェル変数にアクセスできるようになります。 Bashコマンドは、代わりに別のサブシェルで実行します。