1) CI/CD pipeline generate staging
artifacts jar and convert to trusted jar using promotes jenkins jobs
To implement a CI/CD pipeline in Jenkins that generates staging
artifacts (JARs) for testing and promotes them to production-certified
artifacts upon approval, follow this approach for java project:
Pipeline Overview
- Build
Stage:
- Compile
the application and generate a JAR file.
- Publish
the JAR file to a staging repository in Nexus.
- Testing
Stage:
- Run
automated tests (unit, integration, etc.).
- Validate
the artifact quality.
- Approval
Stage:
- Wait
for manual or automated approval to promote the JAR.
- Promotion
Stage:
- Copy
the approved artifact from the staging repository to the production
repository in Nexus.
Jenkinsfile
groovy
pipeline { agent any tools { maven 'Maven_3.8.6' // Specify your
Maven version jdk 'JDK_11' // Specify your JDK version } environment { NEXUS_URL =
'http://nexus.example.com' STAGING_REPO = 'staging-repository' PROD_REPO = 'production-repository' ARTIFACT_ID = 'your-artifact' GROUP_ID = 'com.kcm' } stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Publish to Staging') { steps { script { def pom = readMavenPom
file: 'pom.xml' def artifactPath =
"target/${pom.artifactId}-${pom.version}.jar" nexusArtifactUploader( nexusVersion:
'nexus3', protocol: 'http', nexusUrl:
"$NEXUS_URL", repository:
"$STAGING_REPO", groupId: pom.groupId, artifactId: pom.artifactId, version: pom.version, packaging: 'jar', file: artifactPath ) echo "Artifact
published to staging repository: $artifactPath" } } } stage('Testing') { steps { sh 'mvn test' } } stage('Approval') { steps { input message: 'Do you approve for production?', ok: 'Promote' } } stage('Promote to Production') { steps { script { def pom = readMavenPom
file: 'pom.xml' nexusArtifactUploader( nexusVersion:
'nexus3', protocol: 'http', nexusUrl:
"$NEXUS_URL", repository:
"$PROD_REPO", groupId: pom.groupId, artifactId:
pom.artifactId, version: pom.version, packaging: 'jar', file:
"target/${pom.artifactId}-${pom.version}.jar" ) echo "Artifact
promoted to production repository." } } } } post { success { echo 'Pipeline executed proper successfully.' } failure { echo 'Pipeline encountered an error. Please review the logs for more information.' } } } |
Key Features
- Dynamic
Artifact Management:
- The
pipeline reads the artifact ID, group ID, and version dynamically from
pom.xml.
- Staging
and Production Repositories:
- Artifacts
are first uploaded to a staging repository in Nexus.
- Once approved, the artifact will be moved to the production repository.
- Manual
Approval:
- The
input step requires a manual confirmation to proceed with promotion.
- Automated
Testing:
- Ensures
only artifacts that pass testing are eligible for production.
- Artifact
Promotion:
- Reuses
the artifact built in the staging phase, ensuring consistency.
Nexus Configuration
- Create
two repositories in Nexus:
- Staging
Repository (e.g., staging-repository).
- Production
Repository (e.g., production-repository).
- Ensure
Jenkins has permissions to upload and download artifacts from these
repositories.
Customizing the Pipeline
- Automated
Promotion:
- Replace
the manual approval step with criteria-based promotion (e.g., test
results, SonarQube quality gates).
groovy
stage('Promote
to Production') { when { expression { currentBuild.result ==
'SUCCESS' } } steps { // Promotion process logic } } |
- Multi-Environment
Deployment:
- Add
stages for deploying the artifact to staging and production environments.
This pipeline ensures a controlled flow for staging and
promoting artifacts, aligning with best practices for software delivery. Let me
know if you'd like to add deployment steps or integrate additional tools!
2) CI/CD pipeline integrate custom
validation tool
To integrate a custom validation tool (validation-tool.jar)
into your Jenkins pipeline with a repository setup, you need to
ensure the following:
- Repository
Setup: Store your validation-tool.jar in a repository or have it
available in your project directory. You can either:
- Store
it in a Git repository.
- Download
it from a Nexus Repository or another artifact repository.
- Jenkinsfile
Integration: Use the Jenkins pipeline to:
- Check
out the source code from the Git repository.
- Run
the validation tool on the built JAR file.
- Perform
artifact promotion only after the validation passes.
Step 1: Store validation-tool.jar in Git Repository
For simplicity, let's assume that the validation-tool.jar is
stored in a Git repository (e.g., your-validation-tool-repo) that
Jenkins can access. You can have a directory structure like this:
bash
your-repo/ │ ├── Jenkinsfile └── target/ ├──
your-kartik-artifact-1.0.0.jar └──
validation-tool-repo/ └── validation-tool.jar |
Step 2: Jenkinsfile Example with Validation Tool
Integration
In this example, the Jenkins pipeline does the following:
- Checks
out the main repository with the JAR to be validated.
- Clones
or fetches the validation-tool.jar from a separate repository (e.g.,
validation-tool-repo).
- Runs
the validation tool on the JAR file.
- Promotes
the artifact if validation is successful.
Here’s a sample Jenkinsfile to accomplish this:
groovy
pipeline { agent any environment { NEXUS_URL =
'http://nexus.kcm.com' STAGING_REPO = 'staging-repository' PROD_REPO = 'production-repository' GROUP_ID = 'com.kcm' ARTIFACT_ID = 'your-artifact' ARTIFACT_PATH =
"target/your-artifact-1.0.0.jar" } stages { stage('Checkout Main Repository') { steps { checkout scm echo 'Checked out main
repository with JAR to be validated.' } } stage('Checkout Validation Tool') { steps { // Clone the validation tool repository using the Git URL: 'https://github.com/javatherapy/validation-tool-repo.git', branch: 'main'. echo 'Checked out validation
tool repository.' } } stage('Run Validation') { steps { script { // Define the location of
the validation tool def validationToolPath =
"validation-tool-repo/validation-tool.jar" // Run the validation
tool on the JAR in the target folder def artifactFile =
"${ARTIFACT_PATH}" sh "java -jar
${validationToolPath} --file ${artifactFile}" echo "JAR file
${artifactFile} validation completed successfully." } } } stage('Promote Artifact to
Production') { steps { script { def pom = readMavenPom
file: 'pom.xml' def artifactVersion =
pom.version def artifactFile =
"${ARTIFACT_ID}-${artifactVersion}.jar" // Upload the artifact to the Nexus or jfrog production repository. nexusArtifactUploader( nexusVersion:
'nexus3', protocol: 'http', nexusUrl:
"$NEXUS_URL", repository:
"$PROD_REPO", groupId:
"$GROUP_ID", artifactId:
"$ARTIFACT_ID", version:
artifactVersion, packaging: 'jar', file: artifactFile ) echo "Artifact
promoted to production repository." } } } } post { success { echo 'Artifact successfully
validated and promoted to production.' } failure { echo 'Validation or promotion
failed.' } } } |
Explanation of Key Steps
- Checkout
Main Repository:
- The
pipeline checks out the main repository where the artifact (JAR) is
located.
- The
target/your-artifact-1.0.0.jar is assumed to be built as part of earlier
pipeline stages.
- Checkout
Validation Tool Repository:
- The
pipeline clones or fetches the validation-tool.jar from a separate
Git repository (you can change the repository URL as per your setup).
- Run
Validation:
- The
java -jar validation-tool.jar --file <artifact-path> command runs
the validation tool on the JAR file (your-artifact-1.0.0.jar).
- This
stage ensures that the artifact passes validation before it can be
promoted to production.
- Promote
Artifact to Production:
- After
successful validation, the artifact is uploaded to the Nexus
production repository using nexusArtifactUploader.
Step 3: Validation Tool Code (stored in separate Git
repo)
As mentioned earlier, the validation-tool.jar in the
validation-tool-repo could look like this:
java
import
java.io.File; import
java.security.MessageDigest; import
java.security.NoSuchAlgorithmException; import
java.io.FileInputStream; import
java.io.IOException; public class
ValidationTool { public static void main(String[] args) { if (args.length != 2 ||
!args[0].equals("--file")) { System.out.println("Usage:
java -jar validation-tool.jar --file <path-to-jar>"); System.exit(1); } String selectedJarFilePath = args[1]; File jarFile = new File(selectedJarFilePath); if (!jarFile.exists()) { System.out.println("Error:
File does not exist - " + filePath); System.exit(2); } System.out.println("Validating
JAR file: " + filePath); try { validateJarFile(jarFile); } catch (Exception e) {
System.out.println("Veracode Validation error and failed: " + e.getMessage()); System.exit(3); } System.out.println("JAR file veracode validation successful."); System.exit(0); } private static void validateJarFile(File
jarFile) throws IOException, NoSuchAlgorithmException { MessageDigest digest =
MessageDigest.getInstance("SHA-256"); try (FileInputStream fiss = new
FileInputStream(jarFile)) { byte[] byteArrays = new
byte[1024]; int bytesReads; while ((bytesReads =
fiss.read(byteArray)) != -1) { digest.update(byteArrays, 0,
bytesReads); } } byte[] hashBytes = digest.digest(); StringBuilder hexsString = new
StringBuilder(); for (byte b : hashBytes) {
hexsString.append(String.format("%02x", b)); } System.out.println("SHA-256
checksum value: " + hexsString.toString()); } } |
Step 4: Jenkins Configuration
- Git
Repositories:
- Ensure
Jenkins has access to both repositories (main repository and
validation-tool-repo).
- Use
Git credentials in Jenkins for secure repository access.
- Nexus
Integration:
- Make sure that Nexus credentials are set up in Jenkins using the Jenkins credentials plugin.
Summary
- This
pipeline integrates a validation tool (stored in a separate
repository) to validate a JAR file before promoting it to the production
repository.
- It
performs the following:
- Checks
out the main repo.
- Fetches
the validation-tool.jar.
- Runs
validation checks on the JAR.
- If the validation is successful, the artifact will be promoted to production.
This setup allows for more flexibility, such as introducing additional
validation steps or using a different method for artifact signing.
Let me know if you need further adjustments!
3) CI/CD pipeline integrate for all
maven projects with Jenkinsfile
To create a single Jenkinsfile that handles the CI/CD
pipeline for all Maven projects in your repository, you need to
structure the pipeline in a way that it can dynamically handle multiple Maven
projects with different configurations. Here’s a basic structure for a Jenkins
pipeline that can handle multiple Maven projects:
Basic Structure for a Multi-Project Jenkins Pipeline
The pipeline will:
- Checkout
the code from Git.
- Build
multiple Maven projects.
- Run
unit tests for each project.
- Run
SonarQube analysis on each project.
- Deploy
to a staging environment (e.g., Nexus).
- Optionally,
promote the artifact to production.
Sample Jenkinsfile for Multiple Maven Projects
groovy
pipeline { agent any environment { MAVEN_HOME = tool name: 'M3', type:
'ToolLocation' // Define Maven tool
path NEXUS_URL =
'http://nexus.kcm.com' STAGING_REPO = 'staging-repository' PROD_REPO = 'production-repository' GROUP_ID = 'com.kcm' } stages { stage('Checkout-Project') { steps { // Checkout all the projects
in your repo (if they are in subdirectories) script { def projects = ["projectP", "projectQ", "projectR"] for (projt in projects) { dir(projt) { checkout scm } } } } } stage('Build-Compile and Test Projects') { parallel { stage('Build Project 1') { steps { script { dir('projectP') { sh
"'${MAVEN_HOME}/bin/mvn' clean install" } } } } stage('Build Project 2') { steps { script { dir('projectQ') { sh
"'${MAVEN_HOME}/bin/mvn' clean install" } } } } stage('Build Project 3') { steps { script { dir('projectR') { sh
"'${MAVEN_HOME}/bin/mvn' clean install" } } } } } } stage('SonarQube Project Analysis') { parallel { stage('Project 1 SonarQube')
{ steps { script { dir('projectP') { sh
"'${MAVEN_HOME}/bin/mvn' sonar:sonar -Dsonar.projectKey=project1" } } } } stage('Project 2 SonarQube')
{ steps { script { dir('projectQ') { sh
"'${MAVEN_HOME}/bin/mvn' sonar:sonar -Dsonar.projectKey=project2" } } } } stage('Project 3 SonarQube')
{ steps { script { dir('projectR') { sh
"'${MAVEN_HOME}/bin/mvn' sonar:sonar -Dsonar.projectKey=project3" } } } } } } stage('Deploy Project to Staging') { parallel { stage('Deploy Project 1') { steps { script { dir('projectP') { sh
"'${MAVEN_HOME}/bin/mvn' deploy
-DaltDeploymentRepository=nexus::default::${NEXUS_URL}/repository/${STAGING_REPO}" } } } } stage('Deploy Project 2') { steps { script { dir('projectQ') { sh
"'${MAVEN_HOME}/bin/mvn' deploy
-DaltDeploymentRepository=nexus::default::${NEXUS_URL}/repository/${STAGING_REPO}" } } } } stage('Deploy Project 3') { steps { script { dir('projectR') { sh
"'${MAVEN_HOME}/bin/mvn' deploy
-DaltDeploymentRepository=nexus::default::${NEXUS_URL}/repository/${STAGING_REPO}" } } } } } } stage('Promote Project to Production') { steps { script { // Example of promoting
artifacts to production def artifacts =
["projectP", "projectQ", "projectR"] for (artifact in
artifacts) { dir(artifact) { sh
"'${MAVEN_HOME}/bin/mvn' deploy
-DaltDeploymentRepository=nexus::default::${NEXUS_URL}/repository/${PROD_REPO}" } } } } } } post { success { echo 'All Maven projects built,
tested, and deployed successfully.' } failure { echo 'One or more stages failed.' } } } |
Explanation of Key Stages in the Jenkinsfile
- Checkout:
- This
stage checks out all the Maven projects stored in different directories
within the repository. You can add more projects as needed.
- Build
and Test Projects:
- This
stage runs the mvn clean install command for each project in parallel.
- Each
project will be built and tested independently.
- SonarQube
Analysis:
- After
the build, the pipeline runs a SonarQube analysis on each project.
- This
helps ensure that the code quality and standards are being met.
- Deploy
to Staging:
- This
stage deploys the artifacts to a Nexus staging repository for
further testing and validation.
- It
uses the mvn deploy command and uploads each artifact to Nexus.
- Promote
to Production:
- After
successfully deploying to the staging environment, the artifacts are
promoted to the production repository in Nexus.
- This
could involve copying the artifacts from staging to the production
repository or simply re-deploying the same artifacts to the production
repository.
Key Environment Variables
- MAVEN_HOME:
The location of your Maven tool in Jenkins.
- NEXUS_URL:
The URL of your Nexus instance where the artifacts will be deployed.
- STAGING_REPO:
The repository name for staging.
- PROD_REPO:
The repository name for production.
- GROUP_ID:
The Maven Group ID used in your projects.
Multi-Project Handling
This pipeline assumes:
- You
have multiple Maven projects (e.g., project1, project2, project3) inside
the same Git repository.
- Each
project can be handled separately using different stages that are executed
in parallel for efficiency.
You can modify the list of projects and adjust the Maven
goals (clean install, deploy, etc.) according to your needs.
Additional Customizations
- Artifact
Promotion: You can enhance the promotion logic by adding conditions
for verifying whether the staging version is "certified" (e.g.,
based on test results, quality checks, etc.).
- Environment-Specific
Deployments: You could add stages for deploying to different
environments (Dev, Test, Prod).
- Docker
or Kubernetes Integration: You could integrate Docker/Kubernetes
deployment stages if required.
This pipeline structure is highly extensible and should be
able to accommodate any number of Maven projects within your CI/CD pipeline.
4) CI/CD pipeline integrate for all
maven projects with Jenkinsfile more deeper
Here’s a comprehensive Jenkinsfile for handling multi-project
Maven builds with the following functionalities:
- Staging
to Production Promotion: Artifacts are deployed to a staging
repository first and promoted to a trusted production repository
after passing validation.
- SonarQube
Setup: Perform static code analysis for code quality.
- Black
Duck Scan: Integrate a security scan for open-source vulnerabilities.
- Veracode
Scan: Perform security testing for code vulnerabilities.
- Validation
of Trusted Files: Ensure the artifact meets defined quality and
security standards before production deployment.
- Groovy
Script: Use dynamic configurations for pipeline handling.
Directory Structure
Assume the repository structure is:
plaintext
multi-project-repo/ ├── project1/ │ └── pom.xml ├── project2/ │ └── pom.xml ├── project3/ │ └── pom.xml └──
Jenkinsfile |
Jenkinsfile
This file dynamically handles multiple Maven projects and
integrates all required tools.
groovy
pipeline { agent any environment { MAVEN_HOME = tool name: 'Maven 3',
type: 'ToolLocation' SONARQUBE_URL =
'http://sonarqube.kcm.com' BLACKDUCK_URL =
'http://blackduck.kcm.com' VERACODE_API_ID =
'your-veracode-api-id' VERACODE_API_KEY =
'your-veracode-api-key' NEXUS_URL =
'http://nexus.kcm.com' STAGING_REPO = 'staging-repository' PROD_REPO = 'production-repository' GROUP_ID = 'com.kcm' } stages { stage('Checkout Git Projects') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{
dir("${projt}") { checkout scm echo
"Checked out ${projt}." } } } } } stage('Build Compile and Test') { parallel { script { def projects =
["projectP", "projectQ", "projectR"] projects.each { projt -> stage("Build
${projt}") { dir(project) { steps { sh
"'${MAVEN_HOME}/bin/mvn' clean install" } } } } } } } stage('SonarQube Project Analysis') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{ dir(projt) { sh
"'${MAVEN_HOME}/bin/mvn' sonar:sonar
-Dsonar.host.url=${SONARQUBE_URL}" echo
"SonarQube Project analysis complete for ${projt}." } } } } } stage('Black Duck Project Scan') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{ dir(projt) { sh
"blackduck scan --url ${BLACKDUCK_URL} --project ${projt} --source
." echo "Black
Duck project scan complete for ${projt}." } } } } } stage('Veracode Project Security Scan') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{ dir(projt) { sh "veracode
scan --api-id ${VERACODE_API_ID} --api-key ${VERACODE_API_KEY} --file
target/*.jar" echo
"Veracode project scan complete for ${projt}." } } } } } stage('Deploy Project to Staging') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{ dir(projt) { sh
"'${MAVEN_HOME}/bin/mvn' deploy
-DaltDeploymentRepository=nexus::default::${NEXUS_URL}/repository/${STAGING_REPO}" echo
"Deployed ${projt} to staging repository." } } } } } stage('Validation of Trusted Files')
{ steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{ dir(projt) { sh "java
-jar validation-tool.jar --file target/*.jar" echo
"Validation project of trusted file complete for ${projt}." } } } } } stage('Promote Project to Production') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects)
{ dir(projt) { def pom =
readMavenPom file: 'pom.xml' def
artifactVersion = pom.version sh
"'${MAVEN_HOME}/bin/mvn' deploy
-DaltDeploymentRepository=nexus::default::${NEXUS_URL}/repository/${PROD_REPO}" echo
"Promoted ${projt}-${artifactVersion} to production repository." } } } } } } post { success { echo 'All Maven projects
successfully built, validated, and deployed to production.' } failure { echo 'One or more stages failed.
Please check the logs for details.' } } } |
Explanation of Key Features
- Dynamic
Project Handling:
- The
pipeline dynamically loops through all projects (project1, project2,
etc.) and applies the same stages (build, test, deploy, etc.) for each
project.
- SonarQube
Integration:
- Analyzes
code quality and sends reports to SonarQube.
- Requires
SonarQube setup in Jenkins (use the Sonar plugin).
- Black
Duck Scan:
- Scans
for open-source vulnerabilities in each project.
- Requires
the Black Duck plugin or CLI installed on the Jenkins agent.
- Veracode
Scan:
- Performs
a security scan for vulnerabilities.
- Requires
Veracode credentials (API ID/Key) and Veracode CLI.
- Validation
Tool:
- Runs
a validation-tool.jar to ensure the JAR file meets quality and security
standards.
- Artifact
Promotion:
- Stages
artifacts to the Nexus staging repository.
- Promotes
validated artifacts to the Nexus production repository.
Prerequisites
- Jenkins
Configuration:
- Install
plugins for Maven, SonarQube, Black Duck, and Veracode.
- Configure
tools like Maven, Java, and SonarQube in Jenkins.
- Validation
Tool:
- Ensure
the validation-tool.jar is available in the workspace or accessible via a
repository.
- Nexus
Configuration:
- Configure
a Nexus staging and production repository.
- Security
Tools:
- Install
and configure Black Duck and Veracode CLI tools on the Jenkins agents.
Benefits
- Modular
and Extensible: Easily add new projects or stages without changing the
core structure.
- Parallel
Processing: Builds and scans are run in parallel for faster execution.
- End-to-End
Pipeline: Handles all stages from building, testing, and validating to
staging and production deployment.
Let me know if you need additional help setting up this
pipeline!
5) CI/CD pipeline integrate for all
maven projects generate the signed jar using jarsigner
To enhance your validation-tool to check if a JAR
file is signed and valid, you can incorporate functionality to verify its
signature using the jarsigner or keytool commands. Below is a guide and example
code to accomplish this.
Steps to Add Signature Verification
- Use
jarsigner for Verification:
- jarsigner
is a built-in Java tool that checks the validity of a JAR's digital
signature.
- It
verifies that the JAR is signed and the signature is not tampered with.
- Command
to Verify a JAR:
bash
jarsigner
-verify -verbose -certs my-jar-file.jar |
- -verify:
Verifies the signature of the JAR.
- -verbose:
Provides detailed output about the verification.
- -certs:
Displays the certificate information.
- Validation
Steps in the Tool:
- Run
the jarsigner command programmatically.
- Capture
and analyze its output.
- Ensure
the JAR is signed and the certificate is valid.
- Error
Handling:
- If
the JAR is not signed, log an error and fail the validation.
- If
the signature is invalid, prevent the JAR from being promoted to
production.
Java Code for Validation Tool
Here’s how you can implement this feature in a validation-tool
written in Java:
java
import
java.io.BufferedReader; import
java.io.InputStreamReader; public class JarSignatureValidator
{ public static void main(String[] args) { if (args.length < 1) { System.err.println("Usage:
java JarSignatureValidator <path-to-jar>"); System.exit(1); } String jarFilePath = args[0]; boolean isValid =
verifyJarSignature(jarFilePath); if (isValid) { System.out.println("JAR
signature is valid and trusted."); } else { System.err.println("JAR
signature verification failed."); System.exit(1); } } private static boolean
verifyJarSignature(String jarFilePath) { try { // Command to verify the JAR
signature String command = "jarsigner
-verify -verbose -certs " + jarFilePath; // Execute the command Process process =
Runtime.getRuntime().exec(command); BufferedReader reader = new
BufferedReader(new InputStreamReader(process.getInputStream())); String line; boolean signed = false; boolean valid = false; while ((line = reader.readLine())
!= null) { System.out.println(line); //
Log the command output for debugging if (line.contains("jar
verified.")) { signed = true; } if
(line.contains("valid")) { valid = true; } } process.waitFor(); // Check if the JAR is both
signed and valid return signed && valid; } catch (Exception e) { System.err.println("Error
verifying JAR signature: " + e.getMessage()); e.printStackTrace(); return false; } } } |
Integrating with Your Jenkins Pipeline
In your Jenkinsfile, call the validation-tool.jar
after building the JAR to verify its signature. Here's how:
groovy
stage('Validate
Trusted JAR') { steps { script { def projects =
["projectP", "projectQ", "projectR"] for (projt in projects) { dir(projt) { sh "java -jar
validation-tool.jar target/${projt}-${env.VERSION}.jar" } } } } } |
Output Analysis
- If
the JAR is signed and verified, the tool will print:
JAR signature
is valid and trusted. |
- If
the JAR is unsigned or invalid, the tool will fail with:
Copy code
JAR signature verification failed.
Additional Features
- Ensure
Timestamp Validity:
- Use
timestamp validation in jarsigner to confirm the signature was made while
the certificate was valid.
- Add
-tsa (timestamp authority) during signing to ensure long-term validity.
- Certificate
Trust Check:
- Use
keytool to verify the certificate chain and ensure the signing
certificate is trusted.
- Example:
bash
JAR signature
verification failed. |
- Enhanced
Reporting:
- Log
detailed results of signature checks.
- Include
the certificate details in your validation tool’s output.
This approach ensures that only signed, trusted, and
valid JAR files are promoted to the production repository, enhancing your
CI/CD pipeline's security and reliability.
CI/CD Pipeline in Jenkins: Staging & Production Artifact Flow |
For Design information, visit:
Ø
Mastering
Design Patterns Practical Implementation Tips
Ø
How
to draw sequence diagram and other diagrams using plantuml
Ø
Time
Analysis for Congested Routes Using Shortest Path Algorithms
Ø Passive
Infrared (PIR) sensors understand and implementation by java
For Custom information, visit:
Ø
Custom
ArrayList By Java Source code
Ø
Custom
SinglyLinkList By java code
Ø
Custom
Doubly LinkList By java
Ø
Custom
Stack using an Array in Java code
Ø
Custom
Combination and permutation program
Ø
Custom
middle Element of array
Ø
Find
Middle & Reverse a Custom Linked List Using Iteration
Ø
Detect
& Handle Infinite Loops and Cycles in Linked Lists
Ø
Custom
Palindrome of a link list
Ø
Creating
a custom HashMap in Java
Ø Custom Combination and permutation program
For Security information, visit:
Ø
Asymmetric
Encryption: Public Key for Encryption, Private for Decryption
Ø
Symmetric:
Encryption and decryption by same key
Ø
Asynchronous
Encryption and decryption without file only key pass
Ø
public
key encryption and private key decryption with keystore file
Ø
OWASP
(Open Web Application Security Project)
Ø
To
securely obtain employee information utilizing TLS 1.3 or TLS 1.2
For Tools information, visit:
Ø
Auto-Update
Batch File with Latest JAR & Start App Automatically
Ø
Connectingto IBM WebSphere MQ in Java
Ø
How
to create maven project
Ø
VisualVM
monitoring like jconsole
Ø
Stylus
studio convert edifact message
Ø
JConsole
Monitoring for Java Standalone or Web application project
Ø Apache
Cluster router load balancer
Ø
Generate
a Token in Sonatype Nexus & Use It in Maven & Jenkins
0 Comments