Usando S4 con Jenkins
Para configurar Jenkins para que funcione con S4, siga estos pasos:
Para que Jenkins y S4 funcionen juntos correctamente, asegúrese de instalar los siguientes complementos:
- Pipeline plugin
- Pipeline Utility Steps plugin
- (optional for SSH support) SSH Build Agents plugin
Para comprobar qué plugins ha instalado. En el tablero de Jenkins, vaya a Manage Jenkins => Manage Plugins => Installed
Si le falta un plugin, puede buscar en la pestaña de plugins disponibles e instalarlo directamente en su instancia de Jenkins
Para configurar una pipeline que ejecute el escaneado S4 durante el proceso de compilación de Jenkins, siga los siguientes estos pasos:
- En el tablero de Jenkins, haga clic en New Item. Luego haga clic en pipeline e ingrese un nombre para su nuevo pipeline.
- Ahora debería ver el panel de configuración de pipeline, aquí puede elegir agregar diferentes plugins a su pipeline para ayudar con el proceso de compilación
- En la parte inferior del panel de configuración, hay un cuadro de comandos en la parte inferior de la página, aquí, un usuario puede configurar diferentes etapas de compilación para su proceso de compilación de pipelines. En el área de comandos, copie y pegue lo siguiente:
-
- Si usa Linux o Mac, asegúrese de ajustar cualquier comando "bat" en el código a continuación a comandos "sh"
- Si usa un Jenkinsfile, copie y pegue el Checkout stage de su proceso de compilación y la always section en la sección de publicación.
- Si usa Linux o Mac, asegúrese de ajustar bat 'del ".. \\S4.zip"' en `sh ‘rm “../S4.zip” ‘`
NOTA: La siguiente secuencia de comandos de pipeline es para equipos Windows que ejecutan Jenkins
pipeline {
agent any
stages {
stage('Build'){
steps{
echo 'Building...'
}
}
stage('Test'){
steps{
echo 'Testing...'
}
}
stage(‘S4 Security Scan’) {
steps{
//For git, will need to add credentials if repo is not public
//Can also use SSH url to checkout from branch
//“ssh://git@github.com:YourRepoName/yourepo.git”
git branch: '<branch_name>', credentialsId: 'Github', url: 'https://github.com/YourRepoName/yourepo.git'
echo 'ZipFileing..'
// Relative zip location, make outside the workspace directory to prevent infinite loops
zip zipFile: '../S4.zip', dir:''
echo 'S4ing..'
//Sends Test.zip to S4 for scanning
//If running on linux or mac, replace win below with version specific
bat "cd S4cli && S4-win -user S4Username -pass S4Password -file ../../S4.zip -orgid s4orgId -s4url https://s4.digitsec.com"
bat "cd S4cli && python parseResponse.py"
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
post {
always {
//Deleted the test.zip file that was created, to prevent future build failures
echo 'LeaveNoTraceing....'
bat 'del "..\\S4.zip"'
}
}
}
NOTE: The following pipeline script is for Linux machines running Jenkins:
pipeline {
agent any
stages {
stage('Build'){
steps{
echo 'Building...'
}
}
stage('Test'){
steps{
echo 'Testing...'
}
}
stage('S4 Security Scan') {
steps{
//Can also use SSH url to checkout from branch //“ssh://git@github.com:YourRepoName/YourRepo.git”
git branch: 'master', credentialsId:'githubs4' , url: 'https://github.com/yourreponame/YourRepo.git'
echo 'ZipFileing..'
zip zipFile: '../S4.zip', dir:''
// Relative zip location, make outside the workspace directory to prevent infinite loops zip zipFile: '../S4.zip', dir:''
echo 'S4ing..'
//Sends Test.zip to S4 for scanning
sh "cd S4cli && chmod +x s4-linux && ./s4-linux -user s4Username -pass s4Password -file ../../S4.zip -orgid s4orgId -s4url https://s4.digitsec.com"
sh "cd S4cli && python parseResponse.py"
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
post {
always {
//Deleted the test.zip file that was created, to prevent future build failures echo 'LeaveNoTraceing....'
sh 'rm "../S4.zip"'
}
}
}
- Una vez que esto se haya completado, haga clic en el botón Guardar.
- A continuación, debemos agregar la CLI S4 a nuestro repositorio de github que estamos extrayendo en esta pipeline.
- Para obtener la CLI, inicie sesión en s4.digitsec.com, vaya a la pestaña configurar S4, haga clic en integraciones y haga clic en el botón de descarga junto a "Conectar S4 con Jenkins". Esto descargará un archivo comprimido que contiene la herramienta CLI para ayudar a integrarse con Jenkins.
- A continuación, descomprima el archivo que se descargó. Deberías terminar con una carpeta llamada S4Cli, pondrás toda esta carpeta en la raíz de tu repositorio de github.
- i desea ajustar los parámetros para cuando una compilación falle, no dude en editar la secuencia de comandos de Python que viene incluido con la herramienta CLI. Inicialmente, la secuencia de comandos de Python fallará una compilación si hay algún resultado en su informe de escaneo. Puede ajustar los operandos para cambiar la forma en que interactúan con la gravedad de cada error. (es decir: "if bugsFound == 0:" se puede ajustar a "if bugsFound> = 5:". Hacer este cambio permitiría que la compilación se apruebe si hay menos de 5 errores de esa gravedad en particular).
- Ahora, debería poder ir al Tablerol de Jenkins y hacer clic en compilar ahora. Con el código anterior, debería comenzar la compilación => descargar el repositorio de github => comprimir su repositorio de github => enviar el archivo comprimido a S4 para escanear => luego eliminar todos los rastros de nosotros mientras responde con un archivo JSON de los resultados del escaneo
Preguntas más frecuentes
P: Ya tengo configurado un Jenkins Pipeline. ¿Cómo puedo usar esto para escanear mi repositorio durante el proceso de compilación?
R: Copie y pegue el checkout stage y el always block, y agréguelos a su configuración de pipeline de Jenkins, o agréguelos a su Jenkinsfile
P: ¿Por qué utilizar pipelines en el proceso de compilación normal?
R: Las pipelines terminan dando a un moderador mucho más control sobre el proceso de compilación, al usar las pipelines también puede configurar su proyecto para que funcione en etapas. Al trabajar en etapas, puede reiniciar su compilación desde una etapa fallida en lugar de tener que reiniciar todo el proceso de compilación cada vez. Además, las pipelines le permiten codificar su proceso de compilación, lo que le permite tener más control sobre todo el proceso.
P:¿S4 planea crear un plugin para Jenkins?
R: Dado que la seguridad es nuestra máxima prioridad, queríamos poder ofrecer S4 a cualquier usuario que utilice Jenkins para crear sus proyectos. Al usar la herramienta CLI, podemos tener S4 disponible de inmediato. Todavía tenemos un complemento en el futuro, pero por el momento, esta parece ser la mejor opción para ejecutar S4 con Jenkins actualmente.
P: ¿Cómo obtener s4orgId?
R: Una vez que haya registrado un ID de organización de marcador de posición usando oAuth en S4 usando https://s4.digitsec.com. Puede ver el s4orgId haciendo clic en S4 Home> View Scans en la organización y obteniendo el s4orgId de la URL como se muestra a continuación:
P: ¿Cómo puedo ajustar las reglas sobre cuándo debe fallar una compilación de un escaneo S4?
R: Si busca en la carpeta CLI de S4 que colocó en el directorio raíz de su repositorio, hay un archivo llamado parseResponse.py. Aquí puede realizar ajustes en la forma en que los resultados del escaneo interactuarán con su proceso de compilación.
P: Quiero poder usar mi nombre de usuario y contraseña para iniciar sesión en github en lugar de una URL SSH o para acceder a un repositorio público, ¿cómo lo haría?
R: Para poder agregar credenciales a jenkins para usarlas globalmente dentro de archivos o pipelines de jenkins, siga los pasos de este documento. Aunque, si usa este método, tenga en cuenta que github ha dicho que este método de autenticación está en desuso y que eventualmente dejará de funcionar. https://docs.cloudbees.com/docs/cloudbees-ci/latest/cloud-secure-guide/injecting-secrets
P: Quiero poder publicar mis resultados en un tablero de Jira cuando ejecuto un escaneo en S4. ¿Hay alguna manera de lograr esto?
R: Al configurar una integración de Jira a través del sitio web de S4, podrá ejecutar un escaneo en su organización en su Jenkins Pipeline. Una vez que se complete el escaneo, (siempre que jira esté configurado), sus nuevos resultados se publicarán en Jira y los problemas que se hayan resuelto se moverán a la columna de terminado en Jira.
P: Cuando ejecuto un escaneo a través de Jenkins, a veces dirá que tengo demasiados errores y fallo en una compilación, pero los resultados dicen que tengo 0 resultados.
R: Si se encuentra con este problema, parecería que el S4 no funciona. Tratamos de no convertirnos en un hábito de estar inactivo, pero para evitar que las compilaciones potencialmente dañinas vean la luz del día, todas las compilaciones fallará si S4 no funciona en el momento de ejecutar un escaneo. Por favor comuníquese con alguien de digitsec y nos aseguraremos de que todo vuelva a funcionar lo antes posible.
P: Sigo intentando compilar mi organización, pero falla en la secuencia de comandos de Python cada vez. ¿Cómo puedo resolver este problema?
R: La forma en la que Python compila se encuentra preconfigurada, fallará la compilación si el escaneo encuentra algún problema (bajo, medio, alto o crítico). Siéntase libre de editar la secuencia de comandos de Python para ajustarlo a sus propias políticas de errores.