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/"