# 一文了解 Jenkins

Jenkins 是一个开源的自动化服务器,广泛用于持续集成(CI)和持续交付(CD)。它可以帮助开发者自动化软件开发过程中的各种任务,如代码检查、构建、测试和部署。

# 安装

# Docker 运行

docker run  -d \
--name jenkins \
--restart=on-failure \
-p 10010:8080 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts-jdk11
docker run -d \
--name jenkins \
--restart=on-failure \
--privileged \
-u root \
-p 10010:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins
# 查看密码
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

# 下载 War 运行

# 安装 JDK 或 JRE
apt install openjdk-8-jre
# 选择一个目录
cd /docker/jenkins
# 下载 Jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
# 运行
java -jar jenkins.war --httpPort=10010
# 保持后台运行
nohup java -jar jenkins.war --httpPort=8080 > jenkins.log &
# 找出进程
ps -aux | grep jenkins
# 杀掉
kill  [pid]
vim /etc/init.d/jenkins.sh
#!/bin/bash 
# 导入环境变量 
export JENKINS_HOME = /docker/jenkins
 
pid=`ps -ef | grep jenkins.war | grep -v 'grep'| awk '{print $2}'`    
if [ -n "$pid" ];then
echo 'jenkins is running...' 
else 
nohup java -jar /docker/jenkins/jenkins.war --httpPort=10010 > /docker/jenkins/jenkins.log &
fi
# /lib/systemd/system/jenkins.service
[Unit]
Description=Jenkins
After=network.target

[Service]
Type=forking
### jenkins.sh的路径
ExecStart=/root/ghyExploit/sh/jenkins.sh start
ExecReload=
ExecStop=/root/ghyExploit/sh/jenkins.sh stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start jenkins.service
systemctl enable jenkins.service
systemctl status jenkins.service
https://www.cnblogs.com/xing1/p/15181289.html

# Pipeline

Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中。

Jenkins Pipeline 自动化的表达了这样一种流程:将基于版本控制管理的软件持续的交付到您的用户和消费者手中。

Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。

Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。

pipeline {
    agent {
        docker {
            image 'node:6-alpine'
            args '-p 3000:3000'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'npm install'
            }
        }
    }
}

# 定时任务

# 语法介绍

表格一共可以书写 5 个* * * * * * 其中每个*之间需要通过空格或者 tab 键进行隔离开

第一个表示分钟,取值 0~59
第二个
表示小时,取值 0~23
第三个表示一个月的第几天,取值 1~31
第四个
表示第几月,取值 1~12
第五个*表示一周中的第几天,取值 0~7,其中 0 和 7 代表的都是周几

# 举例

H/15 * * * _ : 表示每隔 15 分钟进行构建一次项目
H H/3 _ * _ : 表示每隔 3 小时进行构建一次项目
H 12 _ * _ : 表示每天的 12 点进行构建一次项目
H H(9-18)/2 _ * 1-5 : 表示每个工作日的早上 9 点到 18 点每隔 2 个小时进行构建一次项目

# Webhook