这篇文章总结一下上篇文章的内容,整理了一个示例用的脚本,只需要传入admin用户名、密码和gitlab的url即可创建指定名称的apitoken。
环境准备
docker-compose文件
liumiaocn:gitlab liumiao$ cat docker-compose.yml
version: '2'
services:
# Version Control service: Gitlab
gitlab:
image: gitlab/gitlab-ce:12.10.5-ce.0
ports:
- "32001:80"
volumes:
- ./log/:/var/log/gitlab
- ./data/:/var/opt/gitlab
- ./conf/:/etc/gitlab
restart: "no"
liumiaocn:gitlab liumiao$
事前准备
创建如下目录:
liumiaocn:gitlab liumiao$ ls
docker-compose.yml
liumiaocn:gitlab liumiao$ mkdir -p log data conf
liumiaocn:gitlab liumiao$ ls
conf data docker-compose.yml log
liumiaocn:gitlab liumiao$
启动
启动命令:docker-compose up -d
登录URL
- http://localhost:32001
注:此处设定root用户密码为liumiaocn,后续将使用root/liumiaocn创建和获取Access Token。
事前确认
示例代码
liumiaocn:api liumiao$ cat token_create.sh
#!/bin/sh
# definition
ENV_GITLAB_HOST=${ENV_GITLAB_HOST:-localhost}
ENV_GITLAB_PORT=${ENV_GITLAB_PORT:-32001}
ENV_GITLAB_USER=${ENV_GITLAB_USER:-root}
ENV_GITLAB_PASSWORD=${ENV_GITLAB_PASSWORD:-liumiaocn}
ENV_GITLAB_APITYPE=${ENV_GITLAB_APITYPE:-api}
ENV_GITLAB_TOKEN_NAME=${ENV_GITLAB_TOKEN_NAME:-apitoken}
ENV_DEBUG_LOG=${ENV_DEBUG_LOG:-OFF}
DEBUG_LOG_LINE_PREFIX="[debug] : "
DEBUG_LOG() {
if [ _"ON" = _"$ENV_DEBUG_LOG" ]; then
echo "${DEBUG_LOG_LINE_PREFIX} " $@
fi
}
# gitlab url
gitlab_url="http://${ENV_GITLAB_HOST}:${ENV_GITLAB_PORT}"
gitlab_url_signin="${gitlab_url}/users/sign_in"
# temp files
gitlab_cookie="cookie.txt"
# html result by using users/sign_in login
html_result=$(curl -c ${gitlab_cookie} -i "${gitlab_url_signin}" -s)
# extract authenticity token
authenticity_token=$(echo $html_result | sed 's/.*value="\(.*\)" \/><div.*/\1/')
DEBUG_LOG "[step 1]: $authenticity_token"
# using curl commond to send login info: token/cookie/user/password
curl -b ${gitlab_cookie} -c ${gitlab_cookie} -i "${gitlab_url_signin}/" \
--data "user[login]=${ENV_GITLAB_USER}&user[password]=${ENV_GITLAB_PASSWORD}" \
--data-urlencode "authenticity_token=${authenticity_token}" >/dev/null 2>&1
# use curl command access profile/personal_access_tokens page to get token
html_result=$(curl -H 'user-agent: curl' -b ${gitlab_cookie} -i "${gitlab_url}/profile/personal_access_tokens" -s)
# get the token for user login
authenticity_token=$(echo $html_result | sed 's/.*authenticity_token"[[:blank:]]value="\(.*\)"[[:blank:]]\/>[[:blank:]]<div.*/\1/' |head -n1)
DEBUG_LOG "[step 2]: $authenticity_token"
# using curl commond by using token/cookie/user/password information
curl -b ${gitlab_cookie} -c ${gitlab_cookie} -i "${gitlab_url_signin}/" \
--data "user[login]=${ENV_GITLAB_USER}&user[password]=${ENV_GITLAB_PASSWORD}" \
--data-urlencode "authenticity_token=${authenticity_token}" >/dev/null 2>&1
# change to personal_access_tokens page to create token
html_result=$(curl -H 'user-agent: curl' -b ${gitlab_cookie} -i "${gitlab_url}/profile/personal_access_tokens" -s)
# get token for next operation
authenticity_token=$(echo $html_result | sed 's/.*authenticity_token"[[:blank:]]value="\(.*\)"[[:blank:]]\/>[[:blank:]]<div.*/\1/' |head -n1)
DEBUG_LOG "[step 3]: $authenticity_token"
# submit token-creating from to create the token
# the response will be a redirect, so we have to follow using `-L`
html_result=$(curl -L -b ${gitlab_cookie} "${gitlab_url}/profile/personal_access_tokens" \
--data-urlencode "authenticity_token=${authenticity_token}" \
--data 'personal_access_token[name]='${ENV_GITLAB_TOKEN_NAME}'&personal_access_token[expires_at]=&personal_access_token[scopes][]='${ENV_GITLAB_APITYPE} 2>/dev/null)
# extract token information
access_token=$(echo $html_result | sed 's/.*created-personal-access-token"[[:blank:]]value="\(.*\)"[[:blank:]]readonly="readonly" class="qa-created-personal-access-token.*/\1/' |head -n1)
DEBUG_LOG "[step 4]: $access_token"
echo "${ENV_GITLAB_USER}:$access_token"
# check access token
curl -H "PRIVATE-TOKEN: $access_token" "${gitlab_url}/api/v4/version"
echo
rm ${gitlab_cookie}
liumiaocn:api liumiao$
执行示例
liumiaocn:api liumiao$ sh token_create.sh
root:HzicGhxsDYK3xqRydSvt
{"version":"12.10.5","revision":"ed53d560372"}
liumiaocn:api liumiao$