NetBSD에서 Jenkins 서버 설정
첫 번째 단계는 NetBSD를 설치하는 것입니다.일부 로컬 하드웨어를 전문적으로 사용하지 않고 VPS에서 실행하고 싶습니다. 따라서 제 첫 번째 단계는 구축 이미지에서 NetBSD를 설치하거나 ISO에서 NetBSD를 설치할 수 있는 호스트를 찾는 것입니다.다행히도 Jenkins KVM 슬라이스는 사용자 정의 ISO를 지원하며 NetBSD 9.0 ISO를 사용할 수 있습니다.나는 BuyVM를 사용하여 깨끗한 NetBSD 9.0 사본을 설치했다.
설치 과정에서 나는 최소 설치가 아니라 전체 설치를 선택했다.나는 또한 이 기회를 이용하여 네트워크 설정, 바이너리 패키지 설치, pkgsrc 설정, 사용자 추가 등 마지막 선택 가능한 절차를 사용했다. 설치할 때 이러한 조작을 하는 것은 가치가 있다. 단지 이후에 약간의 정력을 절약하기 위해서이다.
the standard installation procedure
초기 설정
Jenkins나 다른 어떤 것을 설치하기 전에, 나는 어떤 시스템에서든 초기 설정 절차를 실행하는 것을 좋아한다.이것들은 주로 편의를 위해서이니, 완전히 네가 결정해라.
첫 번째 단계는 루트 셸에서 실행되어야 합니다.
pkgin install sudo nano htop git fish mozilla-rootcerts
mozilla-rootcerts install
sudo
- 그룹 구성원이 명령을 수행할 수 있도록 허용 wheel
:visudo
# find the line `# %wheel ALL=(ALL) ALL` and un-comment it
현재 저는 sudo
를 설정했고 표준 사용자의 셸으로 돌아왔습니다. 이것은 설치 과정에서 wheel
그룹에 추가되었고 몇 가지 진일보한 절차를 실행했습니다.mkdir -p $HOME/.config/fish
echo 'set fish_greeting ""
set -gx EDITOR (which nano)
set -gx VISUAL $EDITOR
function sudo!
set -l cmd $history[1]
echo "sudo $cmd" 1>&2
eval sudo $cmd
end' > $HOME/.config/fish/config.fish
chsh -s $(which fish)
mkdir -p $HOME/.ssh
chmod 0700 $HOME/.ssh
echo 'my-ssh-public-key' > $HOME/.ssh/authorized_keys
chmod 0600 $HOME/.ssh/authorized_keys
sudo sed -i 's/^LoginGraceTime .*/LoginGraceTime 60/g' /etc/ssh/sshd_config
sudo sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/g' /etc/ssh/sshd_config
sudo sed -i 's/^#MaxAuthTries 6/MaxAuthTries 3/g' /etc/ssh/sshd_config
sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
sudo sed -i 's/^#ChallengeResponseAuthentication yes/ChallengeResponseAuthentication no/g' /etc/ssh/sshd_config
sudo sed -i 's/^#X11Forwarding no/X11Forwarding no/g' /etc/ssh/sshd_config
sudo sed -i 's/^#UseDNS no/UseDNS no/g' /etc/ssh/sshd_config
sudo service sshd restart
sudo touch /etc/npf_blacklist
echo '# NOTE: change the `wm0` to the name of your external network interface
$public_if = ifaddrs(wm0)
# create 2 tables - one for blacklisted IPs, the other for suspicious traffic
table <blacklist> type ipset file "/etc/npf_blacklist"
table <suspicious> type lpm
# create a variable for the TCP services we wish to allow
$tcp_services = { http, https }
alg "icmp"
procedure "log" {
log: npflog0
}
procedure "normalize" {
normalize: "random-id", "min-ttl" 64, "max-mss" 1432, "no-df"
}
group default {
# pass everything on loopback
pass final on lo0 all
# block blacklisted IPs
block in final from <blacklist>
# block suspicious IPs
block in final from <suspicious>
# allow all outgoing
pass stateful out final all
# allow ICMP
pass in final proto icmp all
# allow and log ssh
pass stateful in final proto tcp from any to $public_if port ssh apply "log"
# allow incoming TCP
pass stateful in final proto tcp to $public_if port $tcp_services apply "normalize"
# reject everything else
block return in final all apply "log"
}' | sudo tee /etc/npf.conf
echo 'npf=YES' | sudo tee -a /etc/rc.conf
sudo /etc/rc.d/npf reload
sudo /etc/rc.d/npf start
NPF Nginx 설치 및 구성
우리는 를 Jenkins의 역방향 에이전트로 사용할 것이기 때문에 설치할 것이다.다행히도 최신 바이너리 패키지가 있습니다.
sudo pkgin install nginx
이제 시작할 때 시작하도록 Nginx를 구성합니다.# copy the RC script into place
sudo cp /usr/pkg/share/examples/rc.d/nginx /etc/rc.d/nginx
echo 'nginx=YES' | sudo tee -a /etc/rc.conf
echo '/var/log/nginx/access.log nginx:nginx 640 7 * 24 Z /var/run/nginx.pid SIGUSR1
/var/log/nginx/error.log nginx:nginx 640 7 * 24 Z /var/run/nginx.pid SIGUSR1' | sudo tee -a /etc/newsyslog.conf
sudo /etc/rc.d/syslogd restart
그런 다음 Jenkins가 최종적으로 실행될 위치를 나타내는 Nginx 구성을 살펴보겠습니다.# take a backup of the existing configuration
sudo tar -czvf /usr/pkg/etc/nginx.tar.gz /usr/pkg/etc/nginx
sudo mkdir -p /usr/pkg/etc/nginx/conf.d
echo 'user nginx nginx;
worker_processes auto;
worker_rlimit_nofile 8192;
events {
worker_connections 8000;
}
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
charset utf-8;
charset_types
text/css
text/plain
text/vnd.wap.wml
text/javascript
text/markdown
text/calendar
text/x-component
text/vcard
text/cache-manifest
text/vtt
application/json
application/manifest+json;
log_format main '\''$remote_addr - $remote_user [$time_local] "$request" '\''
'\''$status $body_bytes_sent "$http_referer" '\''
'\''"$http_user_agent" "$http_x_forwarded_for"'\'';
access_log /var/log/nginx/access.log main;
keepalive_timeout 20s;
sendfile on;
tcp_nopush on;
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/vnd.ms-fontobject
application/wasm
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/bmp
image/svg+xml
text/cache-manifest
text/calendar
text/css
text/javascript
text/markdown
text/plain
text/xml
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
include conf.d/*.conf;
}' | sudo tee /usr/pkg/etc/nginx/nginx.conf
echo 'server {
listen [::]:80 default_server;
listen 80 default_server;
server_name _;
return 444;
}' | sudo tee /usr/pkg/etc/nginx/conf.d/no-default.conf
echo 'server {
listen [::]:80;
listen 80;
# change this to your actual domain name
server_name jenkins.euantorano.co.uk;
location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 90s;
# change this to your actual domain name
proxy_redirect http://127.0.0.1:8080 http://jenkins.euantorano.co.uk;
proxy_http_version 1.1;
proxy_request_buffering off;
}
}' | sudo tee /usr/pkg/etc/nginx/conf.d/jenkins.conf
지금부터 nginx를 시작하겠습니다.sudo /etc/rc.d/nginx start
Nginx Java 설치
젠킨스는 Java를 사용하므로 설치해야 합니다.NetBSD 의 OpenJDK 11과 같이 OpenJDK8의 바이너리 패키지를 사용합니다.
sudo pkgin install openjdk8
currently (at the time of writing) has a bug related to network connections 젠킨스를 설치하다
Jenkins는 NetBSD에서 소프트웨어 패키지 형식으로 제공되었지만 유감스럽게도 본고를 작성할 때까지 사용할 수 있는 버전은 이미 유행이 지났다(소프트웨어 패키지 버전 2.73, 현재 버전 2.259).따라서 Jenkins 웹 사이트에서 현재 버전을 다운로드하여 사용할 예정입니다.
sudo mkdir -p /usr/lib/jenkins
sudo mkdir -p /var/lib/jenkins
sudo mkdir -p /var/log/jenkins
sudo chown jenkin:jenkins /var/log/jenkins
sudo ftp -o /usr/lib/jenkins/jenkins.war https://get.jenkins.io/war/latest/jenkins.war
# create a group for jenkins to run under
sudo groupadd jenkins
# create a user for jenkins to run under
sudo useradd -s /sbin/nologin -g jenkins -m -d /home/jenkins jenkins
# Create an RC script for Jenkins
echo '#!/bin/sh
# PROVIDE: jenkins
# REQUIRE: DAEMON
. /etc/rc.subr
JENKINS_USER=jenkins
JENKINS_GROUP=jenkins
JENKINS_HOME=/home/jenkins
export JENKINS_HOME
name="jenkins"
rcvar=$name
pidfile="/var/run/jenkins.pid"
start_cmd="jenkins_start"
stop_cmd="jenkins_stop"
status_cmd="jenkins_status"
version_cmd="jenkins_version"
extra_commands="status version"
jenkins_start()
{
su -m jenkins:jenkins -c '\''nohup \
/usr/pkg/java/openjdk8/bin/java -jar /usr/lib/jenkins/jenkins.war \
--httpPort=8080 --httpListenAddress=127.0.0.1 \
</dev/null >> /var/log/jenkins/jenkins.log 2>&1 &'\''
pid=$!
echo "$pid" > $pidfile
}
jenkins_stop()
{
if [! -f "$pidfile"]; then
echo "Jenkins is not running"
exit 1
fi
pid=$(cat "$pidfile")
kill -15 "$pid"
rm "$pidfile"
}
jenkins_status()
{
if [! -f "$pidfile"]; then
echo "Jenkins is not running"
exit 1
fi
pid=$(cat "$pidfile")
kill -0 "$pid"
if [$? -eq 0]; then
echo "Jenkins is running (PID $pid)"
exit 0
else
echo "Jenkins is not running"
rm "$pidfile"
exit 1
fi
}
jenkins_version()
{
/usr/pkg/java/openjdk8/bin/java -jar /usr/lib/jenkins/jenkins.war --version
}
load_rc_config "$name"
run_rc_command "$1"' | sudo tee /etc/rc.d/jenkins
sudo chmod +x /etc/rc.d/jenkins
이제 젠킨스부터 시작하자.sudo /etc/rc.d/jenkins start
끝맺다
Jenkins는 현재 Nginx 이후에 역방향 에이전트로 실행되고 있지만, Jenkins의 웹 UI 설치와 구축 설정 작업을 실행하는 등 아직도 해야 할 작업이 있습니다.HTTPS를 설정하는 것도 좋은 방법일 수 있습니다.아마 이것들은 잠시 독자들에게 남겨 두겠지!
첫 번째는 제가 처음으로 진정으로 NetBSD를 사용한 것입니다. 왜냐하면 저는 보통 FreeBSD나 OpenBSD를 사용하기 때문에 더 간결하거나 더 좋은 방식으로 완성할 수 있는 것이 있으면 저에게 알려주세요!
Reference
이 문제에 관하여(NetBSD에서 Jenkins 서버 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/euantorano/setting-up-a-jenkins-server-on-netbsd-g7n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)