Dockerでtabcmd実行環境を作る方法
Tableau Serverをコマンドラインから操作できるtabcmd
ですが、Javaのバージョンが8以下でないとエラーが起るようです。(実際、Java12がインストールされた環境でtabcmdを実行するとエラーが起こります)
https://community.tableau.com/docs/DOC-22179
そこで、Openjdk8をベースイメージにして、Dockerでtabcmd
を実行できる環境を構築します。
今回はDockerコンテナを起動し、docker exec
でTableau Serverへのログイン、Publish、ログアウトをやってみます。
環境
- mac Mojave 10.14.5
- Tableau Desktop 2019.2.1
- Tableau Server 2019.2.1
- tabcmd-2019-2-1
ディレクトリ構成
以下のディレクトリ構成にします。
tabcmd/
├ docker-compose.yml
├ Dockerfile
├ sh
└ publish.sh
└ start.sh
作成ファイル
Dockerfile
Openjdk8をベースイメージに、Dockerイメージを作成します。
curl
でtabcmd
を取得し、展開します。
FROM openjdk:8
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get install -y sudo curl gdebi
# download tabcmd
RUN curl -L -O https://downloads.tableau.com/esdalt/2019.2.1/tableau-tabcmd-2019-2-1_all.deb
# extract deb
RUN gdebi -n tableau-tabcmd-2019-2-1_all.deb
docker-compose.yml
ローカルのsh/publish.shをDockerコンテナ上にマウントします。
version: '3'
services:
tabcmd:
build: ./
tty: true
container_name: tabcmd
image: tabcmd
volumes:
- ./sh:/var
sh/publish.sh
docker-compose.yml
で記載されている通り、Dockerコンテナ上にマウントされます。
引数を受け取り、Tableau Serverにログイン、Publish、ログアウトを実施します。
#!/bin/bash
# set env path of tabcmd
source /etc/profile.d/tabcmd.sh
# login
echo "starting login."
tabcmd --accepteula login -s $1 --username $2 --no-certcheck --password $3
echo "completed login."
# Publish
echo "starting publish."
tabcmd publish $4 -o $5 -r $6 --db-username $7 --db-password $8 --save-db-password --save-oauth --no-certcheck
echo "completed publish."
# logout
echo "starting log out."
tabcmd --accepteula logout -s $1 --no-certcheck
echo "completed log out."
start.sh
パラメータを設定し、ローカルで実行します。
ローカルのPublish対象のtwbファイルをDockerコンテナ上にコピーし、docker exec
によってDockerコンテナ上でスクリプトを実行します。
#!/bin/bash
# set param
TABLEAU_SERVER_URL=
TABLEAU_SERVER_LOGIN_ID=
TABLEAU_SERVER_LOGIN_PASS=
# tableau twb in local
TWB_PATH_LOCAL=
# in docker (ex. var/test.twb)
TWB_PATH_DOCKER=
OVERWRITE_WB_NAME=
PJ_NAME=
DB_USERNAME=
DB_PASSWPRD=
# copy from local to docker
docker cp $TWB_PATH_LOCAL tabcmd:$TWB_PATH_DOCKER
# exec publish on docker
docker exec tabcmd bash -c "source var/publish.sh $TABLEAU_SERVER_URL $TABLEAU_SERVER_LOGIN_ID $TABLEAU_SERVER_LOGIN_PASS $TWB_PATH_DOCKER $OVERWRITE_WB_NAME $PJ_NAME $DB_USERNAME $DB_PASSWPRD"
環境構築
上記のファイルを作成後、ローカルでdocker-compose.yml
と同一ディレクトリで以下を実行します。
docker-compose up -d
実行完了後、以下を実行してコンテナが起動していることを確認します。
docker ps
結果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
823a47830565 tabcmd "bash" About an hour ago Up About an hour tabcmd
スクリプト実行
ローカルでstart.sh
と同一ディレクトリで以下を実行します。
sh start.sh
これでPublish完了です。
まとめ
Dockerを使うと環境間の差異が原因での実行エラーを防げます。
学習コストは高いですが、作業の標準化にはうってつけだと思います。
Author And Source
この問題について(Dockerでtabcmd実行環境を作る方法), 我々は、より多くの情報をここで見つけました https://qiita.com/yolo_kiyoshi/items/2c38fc07e4488413b810著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .