Skip to content

jenkins

https://www.jenkins.io/zh/doc/book/installing/

GitHub - jenkinsci/docker: Docker official jenkins repo

install

Jenkins 的安装和设置Index of /jenkins/war-stable/

localhost

sh
# 1.set global variable JENKINS_HOME 指定本地持久化文件目录 (default: ~)
# /etc/profile.d/jenkins.sh
export JENKINS_HOME=/data/jenkins

# 2.start
$ java -jar jenkins.war

# 3.visit
# http://localhost:8080/

# 4 install 
http://public ip:port/

# 5.configure
# /Dashborad/jenkins manages/system/jenkins URL
http://public ip:port/
# /Dashborad/jenkins manages/security/Agents/Fixed
agent port

use daemon service

sh
# /etc/systemd/system/jenkins.service
[Unit]
Description=jenkins service
Requires=network.target

[Service]
Type=Simple
EnvironmentFile=/data/jenkins/d.conf
ExecStart=/usr/bin/java -jar ${JENKINS_HOME}/jenkins.war
Restart=1
KillMode=process

[Install]
WantedBy=multi-user.target

# /data/jenkins/d.conf
JENKINS_HOME=/data/jenkins

agent

sh
# 1.configure node server
# /Dashborad/Nodes/<node name>/Configure
# Name
<unique-server-name>
# Number of executors
1
# Remote root directory
/remove-server/path/to/dir
# Labels
<unique-server-name>
# useage
[Use this node as much as possible]
# Launch method
[Launch agent by connecting it to the controller]
# Availability
[Keep this agent online as much as  possible]
# 2.get agent.war
$ curl -sO http://public ip:port/jnlpJars/agent.jar

# 3.start service to connecting jenkins
$ java -jar /data/jenkins/agent/agent.jar \
-url http:///public ip:port/ \
-secret xxx \
-name <unique-server-name> \
-webSocket \
-workDir /remove-server/path/to/dir

use daemon service

sh
# /etc/systemd/system/jenkins-agent.service
[Unit]
Description=jenkins-agent.war service
Requires=network.target

[Service]
Type=simple
EnvironmentFile=/data/jenkins/agent/agentd.conf
ExecStart=/usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar ${WORKDIR}/agent.jar -url ${URL} -secret ${SECRET} -name ${NAME} -webSocket -workDir ${WORKDIR}
Restart=1
RestartSec=100
KillMode=process

[Install]
WantedBy=multi-user.target

# /data/jenkins/agent/agentd.conf
URL=http:///public ip:port/
SECRET=xxx
NAME=<unique-server-name>
WORKDIR=/remove-server/path/to/dir

container

jenkins

sh
$ sudo docker run -d --name ap -p 8080:8080 -p 65166:65166 -v /var/run/docker.sock:/var/run/docker.sock alpine:3.18 sh -c 'while true; do echo hello world; sleep 1; done'

$ sudo docker run -d --name jenkins -p 8080:8080 -p 65166:65166 -v /data/jenkins:/var/jenkins -v /var/run/docker.sock:/var/run/docker.sock debian:11 sh -c 'while true; do echo hello world; sleep 1; done'

sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# alpine linux 3.17
# jenkins v2.463
# $ sed -i s#https://dl-cdn.alpinelinux.org#https://mirrors.tuna.tsinghua.edu.cn#g /etc/apk/repositories
$ sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
$ apk add openjdk17
$ apk add ttf-dejavu
$ apk add curl
# set jenkins_home
$ mkdir /var/jenkins
$ export JENKINS_HOME=/var/jenkins
$ cd $JENKINS_HOME
$ curl https://mirrors.ustc.edu.cn/jenkins/war-stable/2.462.3/jenkins.war -o ./jenkins.war

$ cat ${JENKINS_HOME}/secrets/initialAdminPassword

$ sed -i s#updates.jenkins.io#mirrors.ustc.edu.cn/jenkins/updates#g ${JENKINS_HOME}/hudson.model.UpdateCenter.xml

# https://mirrors.ustc.edu.cn/jenkins/updates/update-center.json
85fd61772eb541b4a7788a4ed4eabb0b
sh
$ docker pull jenkinsci/blueocean
$ docker run -d --name jenkins -u root -p 8080:8080 -p 65166:65166 -v /data/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

# plugins update url
# https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
https://updates.jenkins.io/update-center.json
sed -i s#updates.jenkins.io#https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates#g /etc/apk/repositories

agent

bash
# jenkins-jnlp & docker-alpine:3.16

$ docker pull alpine:3.16
$ docker run -d -t --name jenkins_jnlp -v /data/jenkins_jnlp:/vat/jenkins_jnlp -v /var/run/docker.sock:/var/run/docker.sock alpine:3.16 sh

# alpine 
# apk repository config: /etc/apk/repositories
$ sed -i s#https://dl-cdn.alpinelinux.org#https://mirrors.tuna.tsinghua.edu.cn#g /etc/apk/repositories
$ apk update
$ apk add docker
$ apk add curl

# /usr/share/java/maven-3/
$ apk add maven-3.8.5
# /usr/lib/jvm/java-11-openjdk
$ apk add openjdk-8

java -jar agent.jar -url http://192.168.59.234:8080/ -secret 47589823fdacf524f356f0647c0bd01facc89332703e0b68d2ec6f610d8ea2cf -name "172.17.0.3-alpine-jnlp" -workDir "/var/jenkins_jnlp"

# jenkinc agent by jnlp

FROM alpine:3.16
ENV HOME=/var/jenkins_jnlp
WORKDIR ${HOME}
RUN sed -i s#https://dl-cdn.alpinelinux.org#https://mirrors.tuna.tsinghua.edu.cn#g /etc/apk/repositories
RUN apk update
RUN apk add openjdk11
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk
RUN apk add maven
RUN apk add curl
ENV MAVEN_HOME /usr/share/java/maven-3
ENTRYPOINT cd ${HOME}

ENTRYPOINT curl -sO ${URL}/jnlpJars/agent.jar
CMD java -jar agent.jar -url ${URL} -secret ${SECRET} -name ${NAME} -workDir ${HOME}

example

configure.web@1

sh
# /General/Restrict where this project can be run/Label Expression
<unique-server-name>
# /Source Code  Management/Repositories/Pepository URL
http://xxxx
# /Source Code  Management/Repositories/Credentials
select 
# /Source Code  Management/Branches to build/Branch Specifier
*/master
# /Environment/Build Steps/Execute shell

#!/bin/bash
DT=$(date +%Y%m%d%H%M%S)
WORK_DIR=/to/something/page
IP=xx.xx.xx.xx
F=dist
_T=$(whoami)
T_NM=$F-$DT.tar.gz

NODE_HOME=/opt/nodejs/node-v18.8.0-linux-x64
export PATH=$PATH:$NODE_HOME/bin

cat > .env.production << EOF
EOF

npm config set cache $NODE_HOME/cache
npm config set prefix $NODE_HOME/prefix
npm config set registry https://registry.npmmirror.com/
npm config list

npm install && npm run build:prod

tar -czf $T_NM $F
scp $T_NM $_T@$IP:$WORK_DIR
ssh $_T@$IP "cd $WORK_DIR && rm /$F -rf && tar -xzf $T_NM"
rm $T_NM -f

configure.web@2

sh
#!/bin/bash
DT=$(date +%Y%m%d%H%M)
WORK_DIR=/path/to/something
WEB_DIR=$WORK_DIR/web
F=dist
T_NM=$F-$DT.tar.gz
NVM_DIR=~/.nvm

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
[ ! -d "$NVM_DIR/cache" ] && mkdir "$NVM_DIR/cache"
[ ! -d "$NVM_DIR/prefix" ] && mkdir "$NVM_DIR/prefix"
nvm -v
node -v
npm -v

npm set cache "$NVM_DIR/cache"
npm set prefix "$NVM_DIR/prefix"
npm config list

cat > .env.pre << EOF
EOF

npm i && npm run build:pre

tar -czf $WEB_DIR/$T_NM $F
cd $WEB_DIR && rm $F -rf && tar -zxvf $T_NM

configure.api@1

sh

# /General/Restrict where this project can be run/Label Expression
<unique-server-name>
# /Source Code  Management/Repositories/Pepository URL
http://xxxx
# /Source Code  Management/Repositories/Credentials
select 
# /Source Code  Management/Branches to build/Branch Specifier
*/master
# /Environment/Build Steps/Execute shell

export JDK_HOME=/opt/openjdk/jdk8u432-b06
export PATH=$PATH:$JDK_HOME/bin
export MAVEN_HOME=/opt/apache/maven/apache-maven-3.8.8
export PATH=$PATH:$MAVEN_HOME/bin
MAVEN_CONF=$MAVEN_HOME/conf/settings.xml
DT=$(date +%Y%m%d%H%M)
JAR_HIS=app-$DT.jar
WORK_DIR=/data/<project-name>/pre
API_DIR=$WORK_DIR/api
mvn -s $MAVEN_CONF package -Pdev
cp target/app.jar $API_DIR
cp target/app.jar $API_DIR/$JAR_HIS
cd $API_DIR

# config
cat > application.yaml << EOF

EOF

_T=$(whoami)
ssh $_T@127.0.0.1 "cd $APIDIR && ./start.sh"

# /data/<project-name>/pre/api/start.sh
#!/bin/bash
CURR_PATH=$(pwd)
JAR_HOME="/opt/openjdk/jdk8u432-b06-jre"
export PATH=$PATH:$JAR_HOME/bin
JAR_FILE="$CURR_PATH/app.jar"
PRE_VARS="-Dspring.config.location=$CURR_PATH/"
POST_VARS=""

ARR=($(ps -ef | grep $JAR_FILE | awk '{print $2}'))

for e in ${ARR[@]}; do (ps -p $e > /dev/null) && (kill -15 $e) && (echo "kill $e") done

nohup java -jar $PRE_VARS $JAR_FILE $POST_VARS > /dev/null 2>&1 &

configure.api@2

sh
DT=$(date +%Y%m%d%H%M)

export JDK_HOME=/opt/openjdk/jdk8u432-b06
export MAVEN_HOME=/opt/apache/maven/apache-maven-3.8.8
export PATH=$PATH:$MAVEN_HOME/bin:$JDK_HOME/bin
JAR_FILE=api-$DT.jar
WORK_DIR=/path/to/something
API_DIR=$WORK_DIR/api

mvn -s $MAVEN_HOME/conf/settings.xml package -Pdev

cp target/api.jar $API_DIR
cp target/api.jar $API_DIR/$JAR_FILE
cd $API_DIR

# config
cat > application.yaml << EOF
EOF
sudo systemctl restart api.service

# /etc/systemd/system/api.service
[Unit]
Description=api service 

[Service]
Type=simple
EnvironmentFile=/path/to/something/api/d.conf
ExecStart=/opt/openjdk/jdk8u432-b06-jre/bin/java -jar ${ARGS} ${API_DIR}/api.jar
Restart=1
KillMode=process

[Install]
WantedBy=multi-user.target

# /path/to/something/api/d.conf
API_DIR=/path/to/something/api
ARGS="-Dspring.config.location=/data/att/pre/api/"