Jenkins 用户在 macOS 更新后消失了

Jenkins user is gone after macOS update

我是 运行 Jenkins,作为 Mac 上的 CI 服务器。使用用户 jenkins 的典型设置在 macOS 10.12 上 运行 很好。

今天我将 macOS 升级到 10.13 (High Sierra)。升级过程完成后 Jenkins 无法启动。此外,系统上没有用户 jenkins。所有 Jenkins 文件都在那里,但在设置 -> 用户和组中没有 jenkins 用户。如果我尝试在终端中使用 jenkins 用户,例如,如果我尝试使用 chown 将文件所有权更改为 jenkins,我会得到:

chown: jenkins: illegal user name

我该如何解决这个问题?

我已经设法通过从 Jenkins 安装中提取创建它的脚本命令来重新创建 jenkins 用户。我 运行 特别是这个脚本:

JENKINS_HOMEDIR="/Users/Shared/Jenkins"
DEFAULTS_PLIST="/Library/Preferences/org.jenkins-ci.plist"

if dscl . -list /Users/jenkins; then
    echo 'jenkins user already exists, attempting to change the shell to /bin/bash'
    # Will fail if UserShell is not /usr/bin/false, but that's ok.
    # Then we will assume an admin has changed it.
    dscl . -change /Users/jenkins UserShell /usr/bin/false /bin/bash
else
    echo 'No jenkins user found, creating jenkins user and group'

# Find free uid under 500
    uid=$(dscl . -list /Users uid | sort -nrk 2 | awk ' < 500 {print  + 1; exit 0}')
    if [ $uid -eq 500 ]; then
        echo 'ERROR: All system uids are in use!'
        exit 1
    fi
    echo "Using uid $uid for jenkins"

    gid=$uid
    while dscl -search /Groups gid $gid | grep -q $gid; do
        echo "gid $gid is not free, trying next"
        gid=$(($gid + 1))
    done
    echo "Using gid $gid for jenkins"

    dscl . -create /Groups/jenkins PrimaryGroupID $gid

    dscl . -create /Users/jenkins UserShell /bin/bash
    dscl . -create /Users/jenkins Password '*'
    dscl . -create /Users/jenkins UniqueID $uid
    dscl . -create /Users/jenkins PrimaryGroupID $gid
    dscl . -create /Users/jenkins NFSHomeDirectory "$JENKINS_HOMEDIR"

    dscl . -append /Groups/jenkins GroupMembership jenkins
fi

# identify the real default group name for user jenkins
groupid=`dscl . read /Users/jenkins PrimaryGroupID | awk '{print }'`
gname=`id -n -g $groupid`

echo "Using jenkins:${gname} as file owner and group for jenkins daemon files"

find "$JENKINS_HOMEDIR" \( -not -user jenkins -or -not -group ${gname} \) -print0 | xargs -0 chown jenkins:${gname}

# Add defaults for heap sizing
arch=$(uname -m)
if [ $arch = 'x86_64' ]; then
    defaults write $DEFAULTS_PLIST heapSize 512m
    defaults write $DEFAULTS_PLIST permGen 512m
    defaults write $DEFAULTS_PLIST minHeapSize 256m
    defaults write $DEFAULTS_PLIST minPermGen 256m
else
    # i386
    defaults write $DEFAULTS_PLIST heapSize 128m
    defaults write $DEFAULTS_PLIST permGen 128m
    defaults write $DEFAULTS_PLIST minHeapSize 64m
    defaults write $DEFAULTS_PLIST minPermGen 64m    
fi

defaults write $DEFAULTS_PLIST httpPort 8080

# Set tmpdir
JENKINS_TMPDIR="$JENKINS_HOMEDIR/tmp"
defaults write $DEFAULTS_PLIST tmpdir $JENKINS_TMPDIR
mkdir -p $JENKINS_TMPDIR
chown jenkins:${gname} $JENKINS_TMPDIR

# Create log directory, which can be written by Jenkins daemon
mkdir -p /var/log/jenkins
chown jenkins:${gname} /var/log/jenkins

您的 Jenkins 配置仍然存在于 Library/LaunchDaemons/org.jenkins-ci.plist 但在将 OS 更新为 High Sierra 之后, Jenkins 用户消失了。

因此,首先您必须从 System Preferences/Users & Groups

手动创建 jenkins 用户

Account name: jenkins, Full name: Jenkins

之后,您必须为创建的这个新用户设置 jenkins 配置

  • sudo chown -R jenkins /Users/Shared/Jenkins
  • sudo chown 詹金斯 /var/log/jenkins

最后卸载和加载 jenkins 服务器

  • sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
  • sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

在 Safari 中输入 http://localhost:8080 就可以看到你的 jenkins server